arch-create-system: function update

- resolve prefix in all functions
- check for mountpoint in 'create_fs_streucture'
- fix printf() missing quote

Signed-off-by: Ralf Zerres <ralf.zerres@networkx.de>
This commit is contained in:
2020-02-03 19:10:22 +01:00
parent 0d4af39281
commit 4d5676a4e0

View File

@@ -119,20 +119,20 @@ create_btrfs () {
if [ $dryrun -eq 1 ]; then
printf "${BLUE}Would prepare filesystem ${GREEN}'%s'${NO_COLOR}\n" \
"$LABEL"
"${PREFIX}-${LABEL}"
else
printf "${BLUE}Prepare filesystem ${GREEN}'%s'${NO_COLOR}\n" \
"$LABEL"
"${PREFIX}-${LABEL}"
fi
if [ -h /dev/disk/by-partlabel/$LABEL ]; then
if [ -h /dev/disk/by-partlabel/${PREFIX}-${LABEL} ]; then
# create filesystem
cmd="mkfs -t btrfs --force \
--label $PREFIX-$LABEL \
--data single \
--metadata single \
/dev/disk/by-partlabel/$LABEL"
--label $PREFIX-$LABEL \
--data single \
--metadata single \
/dev/disk/by-partlabel/${PREFIX}-${LABEL}"
cmd=`echo $cmd | tr -s \"[:blank:]\"`
if [ $dryrun -eq 1 ]; then
printf "${MAGENTA}Would run: ${GREEN}'%s'${NO_COLOR}\n" \
@@ -143,15 +143,6 @@ create_btrfs () {
eval "$cmd"
fi
if [ ! -d $MOUNT_POINT ]; then
cmd="mkdir -p $MOUNT_POINT"
if [ $dryrun -eq 1 ]; then
printf "${MAGENTA}Would run ${GREEN}'%s'${NO_COLOR}\n" \
"$cmd"
else
eval "$cmd"
fi
fi
fi
}
@@ -203,7 +194,7 @@ create_disk () {
sgdisk --new=$PARTITION $TARGET
# assign label
sgdisk --change-name=$PARTITION:${LABEL} $TARGET
sgdisk --change-name=$PARTITION:${PREFIX}-${LABEL} $TARGET
# adapt partition-type
sgdisk --typecode=$PARTITION:8300 $TARGET
@@ -244,12 +235,17 @@ create_fs_structure () {
printf "${MAGENTA}Would mount target root at ${GREEN}'%s'${NO_COLOR}\n" \
"$SUBVOL"
else
if [ ! -d $MOUNT_POINT ]; then
printf "${BLUE} - create target mount point${NO_COLOR}\n"
cmd="mkdir -p $MOUNT_POINT"
eval "$cmd"
fi
printf "${BLUE} - mount target root${NO_COLOR}\n"
mount_target /dev/disk/by-partlabel/${PREFIX}-${LABEL} $MOUNT_POINT btrfs $SUBVOL
if [ $? -gt 0 ]; then
die "Can't mount root filesystem ${PREFIX}-${LABEL}"
else
df $MOUNT_POINT
findmount -t btrfs
fi
fi
@@ -361,17 +357,17 @@ create_fat () {
local cmd
if [ $dryrun -eq 1 ]; then
printf "${BLUE}Would prepare filesystem ${GREEN}'%s'${NO_COLOR}\n" "$LABEL"
printf "${BLUE}Would prepare filesystem ${GREEN}'%s'${NO_COLOR}\n" "${PREFIX}-${LABEL}"
else
printf "${BLUE}Prepare filesystem ${GREEN}'%s'${NO_COLOR}\n" "$LABEL"
printf "${BLUE}Prepare filesystem ${GREEN}'%s'${NO_COLOR}\n" "${PREFIX}-${LABEL}"
fi
if [ -h /dev/disk/by-partlabel/$LABEL ]; then
if [ -h /dev/disk/by-partlabel/${PREFIX}-${LABEL} ]; then
# create filesystem
cmd="mkfs -t fat \
-F 32 \
-n $LABEL \
/dev/disk/by-partlabel/$LABEL"
/dev/disk/by-partlabel/${PREFIX}-${LABEL}"
cmd="echo $cmd | tr -s \"[:blank:]\""
if [ $dryrun -eq 1 ]; then
printf "${MAGENTA}Would run ${GREEN}'%s'${NO_COLOR}\n" "$cmd"
@@ -389,16 +385,16 @@ create_vfat () {
local cmd
if [ $dryrun -eq 1 ]; then
printf "${BLUE}Would prepare filesystem ${GREEN}'%s'${NO_COLOR}\n" "$LABEL"
printf "${BLUE}Would prepare filesystem ${GREEN}'%s'${NO_COLOR}\n" "${PREFIX}-${LABEL}"
else
printf "${BLUE}Prepare filesystem ${GREEN}'%s'${NO_COLOR}\n" "$LABEL"
printf "${BLUE}Prepare filesystem ${GREEN}'%s'${NO_COLOR}\n" "${PREFIX}-${LABEL}"
fi
if [ -h /dev/disk/by-partlabel/$LABEL ]; then
if [ -h /dev/disk/by-partlabel/${PREFIX}-${LABEL} ]; then
# create filesystem
cmd="mkfs -t vfat \
-n $PREFIX-$LABEL \
/dev/disk/by-partlabel/$LABEL"
/dev/disk/by-partlabel/${PREFIX}-${LABEL}"
cmd="echo $cmd | tr -s \"[:blank:]\""
if [ $dryrun -eq 1 ]; then
printf "${MAGENTA}Would run ${GREEN}'%s'${NO_COLOR}\n" "$cmd"
@@ -420,39 +416,6 @@ error () {
printf "\n==> ERROR: %s\n" "$@"
} >&2
get_config_name () {
local config_json=${configfile:-$config_json}
local config_file=${1}
local cmd
if [ $verbose -ge 1 ]; then
printf "${BLUE}get_config_name ...${NO_COLOR}\n"
fi
if [ ! -r ${config_json} ] ; then
if [ $verbose -ge 1 ]; then
printf "${RED}Error:${MAGENTA} config file ${GREEN}'%s'${MAGENTA} can\'t be opend!${NO_COLOR}\n" \
"config_json"
fi
return 1
fi
cmd="jq -r --monochrome-output --ascii-output ' .ConfigEnvironment[] \
| select( .ConfigName == \"${config_file}\" ) \
| .ConfigName ' \
${config_json}"
config_name=$(eval $cmd)
#config_name=$(echo $config_name | sed -e 's/\n//g')
if [ $verbose -ge 2 ]; then
printf "${MAGENTA}Config environment id: ${GREEN}'%s'${NO_COLOR}\n" \
"$config_name"
fi
}
get_config_names () {
local config_json=${config_file:-$config_json}
local cmd
@@ -476,6 +439,70 @@ get_config_names () {
config_names=$(echo $config_names | sed -e 's/\n//g')
}
get_config_values () {
local config_json=${configfile:-$config_json}
local config_file=${1}
local cmd
if [ $verbose -ge 1 ]; then
printf "${BLUE}get_config_values ...${NO_COLOR}\n"
fi
if [ ! -r ${config_json} ] ; then
if [ $verbose -ge 1 ]; then
printf "${RED}Error:${MAGENTA} config file ${GREEN}'%s'${MAGENTA} can\'t be opend!${NO_COLOR}\n" \
"config_json"
fi
return 1
fi
cmd="jq -r --monochrome-output --ascii-output ' \
.ConfigEnvironment[] \
| select( .ConfigName == \"${config_file}\" ) \
| .ConfigName ' \
${config_json}"
config_name=$(eval $cmd)
#config_name=$(echo $config_name | sed -e 's/\n//g')
if [ $verbose -ge 2 ]; then
printf "${MAGENTA}Config environment name: ${GREEN}'%s'${NO_COLOR}\n" \
"$config_name"
fi
cmd="jq -r --monochrome-output --ascii-output ' \
.ConfigEnvironment[] \
| select( .ConfigName == \"${config_file}\" ) \
| .ConfigName, ._comment, .ConfigType, .ConfigEnv' \
${config_json}"
values=$(eval $cmd)
values=$(echo $values | sed -e 's/[\n]//g')
cmd="jq -r --monochrome-output --ascii-output ' \
.ConfigEnvironment[] \
| select( .ConfigName == \"${config_file}\" ) \
| .Disk | flatten | length' \
${config_json}"
disks=$(eval $cmd)
cmd="jq -r --monochrome-output --ascii-output ' \
.ConfigEnvironment[] \
| select( .ConfigName == \"${config_file}\" ) \
| to_entries ' \
$config_json"
entries=$(eval $cmd)
if [ $verbose -ge 2 ]; then
printf "${MAGENTA}Parsed from: ${GREEN}'%s'${MAGENTA}\n" \
"$config"
printf "${BLUE} '%s': ${GREEN}'%s'${NO_COLOR}%s\n" \
"$values"
printf "${BLUE} Entries: ${GREEN}'%s'${NO_COLOR}%s\n" \
"$entries"
fi
}
get_config_disk_names () {
local config_json=${config_file:-$config_json}
@@ -521,7 +548,12 @@ mount_target_filesystems () {
printf "${BLUE}mount_target_filesystems${NO_COLOR}\n"
mount_target /dev/disk/by-partlabel/$disk_label_root $MOUNT_POINT/ btrfs root
mount_target /dev/disk/by-partlabel/${label_prefix}-${disk_label_root} $MOUNT_POINT/ btrfs root
if [ $? -gt 0 ]; then
die "Cant mount root filesystem $disk_label_root"
else
findmount -t btrfs
fi
for subdir in boot data home swap var/log var/cache var/lib/machines; do
if [ ! -d $MOUNT_POINT/$subdir ]; then
@@ -529,11 +561,11 @@ mount_target_filesystems () {
fi
done
mount_target /dev/disk/by-partlabel/$disk_label_uefi $MOUNT_POINT/boot fat
mount_target /dev/disk/by-partlabel/$disk_label_data $MOUNT_POINT/data btrfs data
mount_target /dev/disk/by-partlabel/$disk_label_root $MOUNT_POINT/var/cache btrfs var/cache
mount_target /dev/disk/by-partlabel/$disk_label_machines $MOUNT_POINT/var/lib/machines btrfs var/lib/machines
mount_target /dev/disk/by-partlabel/$disk_label_root $MOUNT_POINT/var/log btrfs var/log
mount_target /dev/disk/by-partlabel/${label_prefix}-${disk_label_uefi} $MOUNT_POINT/boot fat
mount_target /dev/disk/by-partlabel/${label_prefix}-${disk_label_data} $MOUNT_POINT/data btrfs data
mount_target /dev/disk/by-partlabel/${label_prefix}-${disk_label_root} $MOUNT_POINT/var/cache btrfs var/cache
mount_target /dev/disk/by-partlabel/${label_prefix}-${disk_label_machines} $MOUNT_POINT/var/lib/machines btrfs var/lib/machines
mount_target /dev/disk/by-partlabel/${label_prefix}-${disk_label_root} $MOUNT_POINT/var/log btrfs var/log
}
install_target () {
@@ -643,51 +675,45 @@ mount_target () {
local cmd
if [ ! -h $DEV_NAME ]; then
printf "${RED}Error: ${NO_COLOR}Can't access given device ${GREEN}'%s'{NO_COLOR}\n" \
printf "${RED}Error: ${NO_COLOR}Can't access given device ${GREEN}'%s'${NO_COLOR}\n" \
"$DEV_NAME"
return 1
fi
case $FS_TYPE in
"btrfs")
if [ -h $DEV_NAME ]; then
cmd="mount -t $FS_TYPE \
-o subvol=$FS_SUBVOL \
$DEV_NAME \
$MOUNT_POINT"
printf "${BLUE}mounting subvol ${GREEN}'%s' ${BLUE}of ${GREEN}'%s' ${BLUE}at ${GREEN}'%s${NO_COLOR}\n" \
"$FS_SUBVOL" "$DEV_NAME" "$MOUNT_POINT"
fi
cmd="mount -t $FS_TYPE \
-o subvol=$FS_SUBVOL \
$DEV_NAME \
$MOUNT_POINT"
printf "${BLUE}mounting subvol ${GREEN}'%s' ${BLUE}of ${GREEN}'%s' ${BLUE}at ${GREEN}'%s'${NO_COLOR}\n" \
"$FS_SUBVOL" "$DEV_NAME" "$MOUNT_POINT"
;;
"fat")
if [ -h $DEV_NAME ]; then
# we are mounting a vfat for gain long filenames
cmd="mount -t vfat \
$DEV_NAME \
$MOUNT_POINT"
printf "${BLUE}mounting ${GREEN}'%s' ${BLUE}at ${GREEN}'%s${NO_COLOR}\n" \
"$DEV_NAME" "$MOUNT_POINT"
fi
# we are mounting a vfat for gain long filenames
cmd="mount -t vfat \
$DEV_NAME \
$MOUNT_POINT"
printf "${BLUE}mounting ${GREEN}'%s' ${BLUE}at ${GREEN}'%s'${NO_COLOR}\n" \
"$DEV_NAME" "$MOUNT_POINT"
;;
"vfat")
if [ -h $DEV_NAME ]; then
cmd="mount -t $FS_TYPE \
$DEV_NAME \
$MOUNT_POINT"
printf "${BLUE}mounting ${GREEN}'%s' ${BLUE}at ${GREEN}'%s${NO_COLOR}\n" \
"$DEV_NAME" "$MOUNT_POINT"
fi
cmd="mount -t $FS_TYPE \
$DEV_NAME \
$MOUNT_POINT"
printf "${BLUE}mounting ${GREEN}'%s' ${BLUE}at ${GREEN}'%s'${NO_COLOR}\n" \
"$DEV_NAME" "$MOUNT_POINT"
;;
esac
cmd="echo $cmd | tr -s \"[:blank:]\""
cmd="echo $cmd | tr -s "[:blank:]""
if [ $dryrun -eq 1 ]; then
printf "${MAGENTA}Would mount ${GREEN}'%s'${MAGENTA} of ${GREEN}'%s'${MAGENTA} at ${GREEN}'%s'${NO_COLOR}\n" \
"$FS_SUBVOL" "$DEV_NAME" "$MOUNT_POINT"
else
eval "$cmd"
if [ $? -gt 0 ]; then
die "Can't mount filesystem $DEV_NAME"
die "Cant mount filesystem $DEV_NAME"
fi
fi
}
@@ -755,12 +781,15 @@ parse_params () {
test $count -ge 1 && config_name="$1"
set -- $params
shift $count
cmd=get-config-name
;;
--get-config-names)
shift 1
cmd=get-config-names
;;
--get-config-values)
shift 1
cmd=get-config-values
;;
--get-config-disk-names)
shift 1
config_params=${*}
@@ -1091,7 +1120,7 @@ prepare_target_disks () {
create_disk ${disk_dev_machines} $disk_label_machines $label_prefix
fi
if [ ${#disk_dev_data} -gt 1 ]; then
create_disk ${disk_dev_data} $disk_label_data $label_prefix
create_disk ${disk_dev_data} $disk_label_data $label_prefix
fi
}
@@ -1110,10 +1139,9 @@ prepare_target_filesystems () {
fi
create_fs_structure $disk_label_root $label_prefix $mount_point /
if [ $? -gt 1 ]; then
if [ $? -gt 0 ]; then
die "Can't create filesystem structure on" "$mount_point"
fi
}
show_config () {
@@ -1184,10 +1212,14 @@ parse_params $@
# commandline options handled with priority
parse_config_file
if [ ${config_name} != "NONE" ]; then
get_config_values $config_name
fi
case $cmd in
get-config-name)
get-config-values)
#get_config_name 'HyperV-SingleDisk'
get_config_name $config_name
get_config_values $config_name
if test $? -gt 0; then
exit 1
#else
@@ -1216,8 +1248,12 @@ case $cmd in
prepare_target_disks
prepare_target_filesystems
if [ $? -gt 0 ]; then
exit 1
fi
mount_target_filesystems $disk_label_root $mount_point
exit 0
install_target_packages $mount_point
install_target $mount_point