1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
#!/bin/sh
eckd_dasd=
fba_dasd=
_dasdfmt() {
local block="$(ls /sys/bus/ccw/devices/"$1"/block 2>/dev/null)" answer=
if ! [ -b "/dev/$block" ]; then
echo "/dev/$block is not a block device" >&2
else
echo -n "WARNING: Erase ECKD DASD $1? [y/N]: "
read answer
case "$answer" in
y*|Y*) dasdfmt -b 4096 -d cdl -yp "/dev/$block" ;;
esac
fi
}
eckdselect_help() {
cat <<-__EOF__
Enter each available DASD's address (e.g. 0.0.02d0) to format that DASD.
Enter multiple addresses separated by a space to format multiple DASDs.
Enter 'all' to format all available DASDs.
WARNING: Data will be lost after formatted!
Enter 'done' or 'none' to finish formatting.
Enter 'abort' to quit the installer.
__EOF__
}
show_dasd_info() {
local busid= vendor= block= devtype= cutype=
for busid in $@; do
vendor=$(cat /sys/bus/ccw/devices/$busid/vendor 2>/dev/null)
devtype=$(cat /sys/bus/ccw/devices/$busid/devtype 2>/dev/null)
cutype=$(cat /sys/bus/ccw/devices/$busid/cutype 2>/dev/null)
block="$(ls /sys/bus/ccw/devices/$busid/block 2>/dev/null)"
echo " $busid ($devtype $cutype $vendor)"
done
}
ask_eckd(){
local prompt="$1"
local help_func="$2"
shift 2
local answer=
local default_dasd="all"
apk add --quiet s390-tools
while ! all_in_list "$answer" $@ "$default_dasd" "abort" "done" "none"; do
echo "Available ECKD DASD(s) are:"
show_dasd_info "$@"
echon "$prompt [$default_dasd] "
default_read answer $default_dasd
case "$answer" in
'abort') exit 0;;
'done'|'none') return 0;;
'?') $help_func;;
'all') for busid in $@; do _dasdfmt $busid; done;;
*) for busid in $answer; do _dasdfmt $busid; done;;
esac
done
}
check_dasd() {
eckd_dasd= fba_dasd=
local dasd="$(get_bootopt dasd)"
for _dasd in $( echo $dasd | tr ',' ' '); do
[ -e /sys/bus/ccw/drivers/dasd-eckd/$_dasd ] && eckd_dasd="$eckd_dasd $_dasd"
[ -e /sys/bus/ccw/drivers/dasd-fba/$_dasd ] && fba_dasd="$fba_dasd $_dasd"
done
if [ -n "$eckd_dasd" ]; then
ask_eckd \
"Which ECKD DASD(s) would you like to be formatted using dasdfmt? (enter '?' for help)" \
eckdselect_help "$eckd_dasd"
fi
}
is_dasd() {
local disk="${1#*\/dev\/}" dasd_type="$2"
for _dasd in $(eval "echo \$${dasd_type}_dasd"); do
[ -e /sys/bus/ccw/drivers/dasd-$dasd_type/$_dasd/block/$disk ] && return 0
done
return 1
}
setup_zipl() {
local mnt="$1" root="$2" modules="$3" kernel_opts="$4"
local parameters="root=$root modules=$modules $kernel_opts"
local dasd=$(echo $eckd_dasd $fba_dasd | tr ' ' ',')
local s390x_net="$(get_bootopt s390x_net)"
[ -n "$dasd" ] && parameters="$parameters dasd=$dasd"
[ -n "$s390x_net" ] && parameters="$parameters s390x_net=$s390x_net"
cat > "$mnt"/etc/zipl.conf <<- EOF
[defaultboot]
defaultauto
prompt=1
timeout=5
default=linux
target=/boot
[linux]
image=/boot/vmlinuz-$KERNEL_FLAVOR
ramdisk=/boot/initramfs-$KERNEL_FLAVOR
parameters="$parameters"
EOF
}
setup_partitions_eckd() {
local blocks_per_track=12 tracks_per_cylinder=15 boot_track= swap_track=
local diskdev=$1 boot_size=$2 swap_size=$3 sys_type=$4
boot_track=$(($boot_size * 1024 / 4 / blocks_per_track))
[ "$swap_size" != 0 ] && swap_track=$(($swap_size * 1024 / 4 / blocks_per_track + boot_track + 1))
local conf="$(mktemp)"
if [ -n "$swap_track" ]; then
cat > "$conf" <<- EOF
[first,$boot_track,native]
[$((boot_track + 1)),$swap_track,swap]
[$((swap_track + 1)),last,$sys_type]
EOF
else
cat > "$conf" <<- EOF
[first,$boot_track,native]
[$((boot_track + 1)),last,$sys_type]
EOF
fi
fdasd -s -c "$conf" $diskdev
rm $conf
}
|