mirror of
https://github.com/zerotier/edge.git
synced 2026-05-22 16:25:05 -07:00
134 lines
3.5 KiB
Bash
Executable File
134 lines
3.5 KiB
Bash
Executable File
#!/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
|
|
}
|