diff --git a/usr/bin/arch-create-system b/usr/bin/arch-create-system index 913af8a..2e1dae3 100755 --- a/usr/bin/arch-create-system +++ b/usr/bin/arch-create-system @@ -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