From 2493370e44566970dae72afd5553566962a4284c Mon Sep 17 00:00:00 2001 From: u Date: Fri, 17 Nov 2023 14:37:58 -0500 Subject: delete cruft files --- Makefile | 25 +-- src/grub-efi.sh | 65 -------- src/initrd.sh | 59 ------- src/mkinitramfs-samizdat | 85 ---------- src/parted-usb.sh | 389 -------------------------------------------- src/publish-ip.sh | 53 ------ src/qemu.sh | 129 --------------- src/store-child-permanently | 47 ------ src/xorriso-usb.sh | 295 --------------------------------- 9 files changed, 4 insertions(+), 1143 deletions(-) delete mode 100755 src/grub-efi.sh delete mode 100755 src/initrd.sh delete mode 100755 src/mkinitramfs-samizdat delete mode 100755 src/parted-usb.sh delete mode 100755 src/publish-ip.sh delete mode 100755 src/qemu.sh delete mode 100755 src/store-child-permanently delete mode 100755 src/xorriso-usb.sh diff --git a/Makefile b/Makefile index 6265999..db124be 100644 --- a/Makefile +++ b/Makefile @@ -37,27 +37,10 @@ wait_for_files: src/wait_for_files.c | build-deps %: src/%.c | build-deps $(CC) $(CFLAGS) $< -o $@ -dyndns_realprog = dyndns.ssh-rsa.cryptonomic.net -dyndns_links = dyndns.ssh-dss.cryptonomic.net \ -dyndns.ecdsa-sha2-nistp256.cryptonomic.net dyndns.ssh-ed25519.cryptonomic.net -dyndns_progs = $(dyndns_realprog) $(dyndns_links) - -$(addprefix src/, $(dyndns_links)): - ln -s $(dyndns_realprog) $@ - -src_bin_programs = xorriso-usb.sh btrfs-functions.sh btrfs-receive-root.sh \ -btrfs-send-root.sh var.sh grub-efi.sh keygen.sh initrd.sh qemu.sh \ -dnsmasq-dhcp-script.sh publish-ip.sh \ -git-ll-remote usb \ -hostname.cryptonomic.net partvi ficlonerange.py ${dyndns_progs} +src_bin_programs = btrfs-functions.sh var.sh dnsmasq-dhcp-script.sh usb partvi bin_programs=$(addprefix src/, $(src_bin_programs)) samizdat-paths.sh ${cc_files} ${btrfs_utils} -dyndns_programs = cryptonomic-dyndns-command samizdat-ssh-command samizdat-ssh-uid -dyndns_program_paths=$(addprefix cryptonomic-dyndns-server/bin/, $(dyndns_programs)) - -bin_programs += $(dyndns_program_paths) - btrfs_utils=$(addprefix src/btrfs-utils/, btarfs with-btrfs-seed) initrd_files:=$(wildcard src/initrd/*) dynmenu samizdat-pinentry wait_for_files @@ -163,7 +146,7 @@ $(btrfs_images): FORCE $(MAKE) -C rootfs $(notdir $@) boot: rootfs - sudo ./src/mkinitramfs-samizdat + sudo update-initramfs -u sudo ROOTFS=$(rootfs) ./src/parted-usb.sh fastboot: rootfs @@ -265,13 +248,13 @@ bootclean: .PHONY: update upgrade up upgrade-key initrd initrd: install - ./src/mkinitramfs-samizdat + sudo update-initramfs -u update: apt-get-update-stamp git pull --ff-only --recurse-submodules upgrade: install-submodules install - ./src/mkinitramfs-samizdat -f + sudo update-initramfs -u upgrade-key: upgrade key diff --git a/src/grub-efi.sh b/src/grub-efi.sh deleted file mode 100755 index f3f6b1c..0000000 --- a/src/grub-efi.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash -. samizdat-paths.sh - -if [ "$BOOTLOADER_ONLY" ] -then - linux_kernel_commandline='boot=samizdat components quiet nbdroot=192.168.10.1/samizdat.btrfs nbddev=/dev/nbd0 ip=dhcp' -else - linux_kernel_commandline='boot=samizdat components quiet' -fi - -grub_config() -{ - cat </dev/null || true -mkdir -p "${destdir}"/grub/i386-pc/ -cp -r /usr/lib/grub/i386-pc/* "${destdir}"/grub/i386-pc/ -rm "${destdir}"/grub/i386-pc/*.img || true - -grub_config > "${destdir}"/load_cfg - -grub-mkimage -O i386-pc -d /usr/lib/grub/i386-pc/ -o "${destdir}"/core.img -c "${destdir}"/load_cfg --prefix=/grub iso9660 biosdisk -cat /usr/lib/grub/i386-pc/cdboot.img "${destdir}"/core.img > "${destdir}"/grub/i386-pc/eltorito.img -cat /usr/lib/grub/i386-pc/boot.img "${destdir}"/core.img > "${destdir}"/embedded.img - -rm -r "$real_destdir" 2>/dev/null || true -mv -T "$destdir" "$real_destdir" diff --git a/src/initrd.sh b/src/initrd.sh deleted file mode 100755 index 2ec278d..0000000 --- a/src/initrd.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/sh - -. samizdat-paths.sh - -if [ -d "$1" ] -then - samizdat_linux_dir=$1 -fi - -initrd=${samizdat_linux_dir}/initrd.img -vmlinuz=${samizdat_linux_dir}/vmlinuz - -conf_dir=$samizdat_initramfs_conf_dir - -get_kernel_version() -{ - local pkgs_file="$1" - egrep '^ii linux-image-(amd64|686)' "$pkgs_file" | - (read _ pkg ver _; apt-cache show "$pkg=$ver") | - grep Depends | - (read _ a; echo ${a#linux-image-}) -} - -pkgs_file=rootfs/_build/${rootfs:-samizdat}.pkgs.txt - -[ -f "$pkgs_file" ] || exit - -kernel_version=$(get_kernel_version rootfs/_build/${rootfs:-samizdat}.pkgs.txt) - -[ "$kernel_version" ] || exit - -debian_initrd=/boot/initrd.img-${kernel_version} - -find_deps() { - find "$conf_dir" "$samizdat_initrd_files_dir" "$debian_initrd" "$@" -} - -force_rebuild() -{ - touch "$conf_dir" - return 1 -} - -rebuild() -{ - set -ex - cp -f /boot/vmlinuz-"${kernel_version}" "$vmlinuz" - /usr/sbin/mkinitramfs -d "$conf_dir" -o "$initrd" "${kernel_version}" || force_rebuild -} - -if [ ! -e "$initrd" -o ! -e "$vmlinuz" ]; then - rebuild -else - found=$(find_deps -newer "$initrd" -print -quit) - if [ "$found" ]; then - echo "initrd.sh: rebuild forced: found modified source: $found" >&2 - rebuild - fi -fi diff --git a/src/mkinitramfs-samizdat b/src/mkinitramfs-samizdat deleted file mode 100755 index c2e6141..0000000 --- a/src/mkinitramfs-samizdat +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/bash -if [ "$(id -u)" != 0 ] -then - exec sudo -- "$0" "$@" - exit 1 -fi - -loudly() -{ - (set -x - "$@") -} - -deb_arch() -{ - dpkg-architecture -q DEB_HOST_ARCH -} - -up_to_date() -{ - local found - [ -e "$1" ] || return - [ -z "$FORCE_BUILD" ] || return - found=$(find "$samizdat_initramfs_conf_dir" \ - "$samizdat_initrd_files_dir" \ - -type f -newer "$1" -print -quit) || return - [ -z "$found" ] -} - -build_image() -{ - OUTPUT=/boot/initrd.img-$1 - # Always regenerate when --system specified. - # Otherwise, only regenerate if it appears dependencies changed. - if ! up_to_date "$OUTPUT" - then - /usr/sbin/mkinitramfs \ - -d "$samizdat_initramfs_conf_dir" \ - -o "$OUTPUT" \ - -k "$1" || return - fi - loudly ln -sf "${OUTPUT#/}" /initrd.img -} - -. samizdat-paths.sh - -OUTPUT_TAG= -FORCE_BUILD= -while [ $# -gt 0 ] -do - case "$1" in - -t|--tag) OUTPUT_TAG=.samizdat;; - -f|--force) FORCE_BUILD=y;; - --) shift; break;; - -*) exit 1;; - *) break;; - esac - shift -done - -if [ "$1" ] -then - k=/boot/vmlinuz-$1 - if ! [ -e "$k" ] - then - printf 'Error: No such file: %s\n' "$k" >&2 - exit 1 - fi - build_image "$1$OUTPUT_TAG" || exit - ln -sf "${k#/}" /vmlinuz -elif [ -L /vmlinuz ] -then - l=$(readlink /vmlinuz) - mv=${l#boot/vmlinuz-} - for v in "$mv" "$mv-$(deb_arch)" - do - [ -e "/boot/vmlinuz-$v" ] || continue - build_image "$v" - exit - done - exit 1 -else - printf 'Error: Could not determine kernel version. Create /vmlinuz or specify a version.' >&2 - exit 1 -fi diff --git a/src/parted-usb.sh b/src/parted-usb.sh deleted file mode 100755 index bd8eeae..0000000 --- a/src/parted-usb.sh +++ /dev/null @@ -1,389 +0,0 @@ -#!/bin/bash -USE_EFI= -die() -{ - printf 'Error: %s\n' "$*" >&2 - exit 1 -} -KiB() -{ - printf %s $(("$1" * 1024)) -} -MiB() -{ - KiB $(KiB "$1") -} - -get_size() -{ - [ "$1" ] || return - if [ -b "$1" ] - then - blockdev --getsize64 "$1" - else - stat -c'%s' "$1" - fi -} - -get_rootfs_size() -{ - rootfs_size=$(get_size "$ROOTFS") -} - -initialize_target() -{ - if [ -b "$target" ] - then return - fi - - rm -f "$target" - if [ "$ROOTFS" ] - then - get_rootfs_size - fallocate -l $(($(KiB 17) + $(MiB $end_keys) + rootfs_size + $(KiB 640))) "$target" - else - fallocate -l $(($(KiB 17) + $(MiB $end_keys))) "$target" - fi -} - -# TODO: Use GUID type tags for each Samizdat partition type. -partition_target() -{ - parted "$target" -sm -a optimal \ - unit MiB \ - mklabel gpt \ - mkpart samizdat-efi 1 8 \ - set 1 esp on \ - mkpart samizdat-grub 8 64 \ - set 2 bios_grub on \ - mkpart samizdat-keys btrfs ${start_keys} ${end_keys} - if [ -b "$target" ] - then - partx -u "$target" - fi - - if [ "$ROOTFS" ] - then - parted "$target" -sm -a optimal \ - mkpart samizdat-rootfs btrfs ${end_keys}MiB 100% - fi -} - -sex() -{ - ( - set -x - "$@" - ) -} - -make_target_bootable() -{ - mkfs.btrfs -f --mixed "$part"3 - mkdir -p "$mnt" - mount "$part"3 "$mnt" - - mkdir -p "$mnt"/boot/grub - cp -avL "$GRUB_CONFIG" "$mnt"/boot/grub - - mkdir -p "$mnt"/boot/efi - mkfs.vfat "$part"1 - if [ "$USE_EFI" ] - then - efi_dir="$mnt".efi - mkdir -p "$efi_dir" - mount "$part"1 "$mnt".efi - mkdir "$efi_dir"/boot - boot_dir=$efi_dir/boot - else - boot_dir=$mnt/boot - fi - - # https://wiki.archlinux.org/index.php/Multiboot_USB_drive#Hybrid_UEFI_GPT_+_BIOS_GPT/MBR_boot - # grub-install --target=x86_64-efi --removable --boot-directory=/mnt/boot --efi-directory=/mnt - - GRUB_LOGFILE=$(mktemp) || exit - set -- eatmydata -- \ - grub-install ${VERBOSE:+ -v} \ - ${USE_EFI:+ --target=i386-efi} \ - ${USE_EFI:+ --recheck} \ - ${USE_EFI:+ --removable} \ - ${USE_EFI:+ --efi-directory "$efi_dir"} \ - --boot-directory "$boot_dir" \ - "$dev" - echo "running: $* >$GRUB_LOGFILE 2>&1" >&2 - if "$@" >"$GRUB_LOGFILE" 2>&1 - then - fail= - else - fail=y - fi - if [ "$USE_EFI" ] - then - umount -l "$mnt"/boot/efi || : - fi - umount -l "$mnt" || : - if [ "$fail" ] - then - set -x - tail -n5 "$GRUB_LOGFILE" - exit 1 - else - rm "$GRUB_LOGFILE" - fi - sync -} - -copy_rootfs() -{ - if [ -z "$ROOTFS" ] - then - return - fi - [ -e "$ROOTFS" -a -b "$part"4 ] - get_rootfs_size - part_size=$(blockdev --getsize64 "$part"4) - [ "$rootfs_size" -le "$part_size" ] || die "rootfs_size=$rootfs_size > part_size=$part_size" - - ( - set -x - dd if="$ROOTFS" of="$part"4 - # dd if=rootfs/samizdat.patch.seed.btrfs of="$part"5 - ) -} - -acquire_target_block_devices() -{ - if [ -b "$target" ] - then - dev=$target - part=$target - mnt=/mnt/${target#/dev/} - partx -u "$target" - else - trap release_target_block_devices EXIT - losetup -f "$target" - dev=$(losetup -j "$target" -O NAME --noheadings) - - btrfs device scan -u || : - kpartx -vasas "$dev" - btrfs device scan - part=/dev/mapper/${dev##*/}p - - mnt=$target.mnt - fi -} - -release_target_block_devices() -{ - ( - set +e - [ -z "$mnt" ] || ! mountpoint -q "$mnt" || umount "$mnt" - case "$dev" in - /dev/loop*) - kpartx -d "$dev" - losetup -d "$dev" - ;; - esac - true - ) - unset mnt dev -} - -add_keys() -{ - rsync -a --info=STATS "$GPG_INPUT_DIR"/ "$mnt"/gnupghome/ -} - -add_initrd() -{ - initrd_suffix=.samizdat - mkdir -p "$mnt"/linux - rsync -aL --info=STATS "${1}vmlinuz${2}" "$mnt"/linux/vmlinuz - rsync -aL --info=STATS "${1}initrd.img${2}${2:+$initrd_suffix}" "$mnt"/linux/initrd.img -} - -add_grub_cfg() -{ - mkdir -p "$mnt"/boot/grub - cp -aL "$GRUB_CONFIG" "$mnt"/boot/grub -} - -individualize() -{ - mkdir -p "$mnt" - ( - set +e - losetup -a >&2 - lsblk >&2 - mount|grep $PWD >&2 - : OK - ) - mountpoint "$mnt" || mount "$part"3 "$mnt" - add_keys - add_initrd "$samizdat_linux_dir"/ "${version_suffix}" - add_grub_cfg -} - -globalize() -{ - initialize_target - partition_target - acquire_target_block_devices - make_target_bootable - copy_rootfs -} - -sanity_checks() -{ - [[ $UID = 0 ]] || die "You are not root." - for d in "$samizdat_linux_dir" "$GPG_INPUT_DIR" - do - [ -d "$d" ] || die "Not a directory: $d" - done -} - -find_mac() -{ - start_mac=$1 - for mac in $(ip link show | grep link/ether | (read _ mac _; echo $mac | tr : -)); do - if [ "${mac%??}" = "${start_mac%??}" ]; then - prefix=${mac%??} - suffix=$(printf %x $(( 0x${mac##*-} + 1 ))) - MAC=${prefix}${suffix} - return - fi - done - MAC=$start_mac -} - -boot_vm() -{ - boot_drive=$1 - installer_target=samizdat.disk.img - - if [ ! -e "$installer_target" ] - then - fallocate -l 10G "$installer_target" - fi - - find_mac 52-54-00-12-34-56 - qemu-system-x86_64 \ - -enable-kvm \ - ${USE_EFI:+ -bios /usr/share/OVMF/OVMF_CODE.fd} \ - -smp 2 \ - -m 512 \ - -k en-us \ - -net nic,model=virtio,macaddr="$MAC" \ - -net tap,ifname=tap0,script=no,downscript=no \ - -curses \ - -drive file="$boot_drive",format=raw \ - -drive file="$installer_target",format=raw -} - -do_build() -{ - if [ -b "$target" ] - then - globalize - individualize - release_target_block_devices - elif [ -f "$target" -o ! -e "$target" ] - then - template=${target%.img}.template.img - final=$target - ( - target=$target.tmp - if [ ! -e "$template" ] - then - target="$template".tmp globalize - release_target_block_devices - mv -T "$template".tmp "$template" - fi - - cp -T --reflink=always "$template" "$target" - acquire_target_block_devices - individualize - release_target_block_devices - - mv -T "$target" "$final" - ) - else - die "Target must be a file or block device." - fi -} - -. samizdat-paths.sh || die 'samizdat-paths.sh not found' -samizdat_linux_dir=/ - -DEFAULT_ROOTFS=rootfs/samizdat.seed.btrfs -#DEFAULT_PATCHFS=rootfs/samizdat.patch.btrfs - -if [ "$ROOTFS" = none ] -then - ROOTFS= -elif [ "$ROOTFS" ] -then - [ -f "$ROOTFS" ] || die "Not a file: $ROOTFS" -elif [ -f "$DEFAULT_ROOTFS" ] -then - ROOTFS=$DEFAULT_ROOTFS -fi - -if [ ! "$GPG_INPUT_DIR" ] -then - for d in $GPG_INPUT_DIR /root/.gnupg /cdrom/gnupghome - do - [ -d "$d" ] || continue - GPG_INPUT_DIR=$d - break - done -fi - -: ${GRUB_CONFIG:=conf/grub.cfg} -start_keys=64 # megs -end_keys=256 # megs - -if [ "$KERNEL_VERSION" ] -then - version_suffix=-$KERNEL_VERSION -fi - -sanity_checks -set -e - -if [ "$1" = -n ] -then - shift - DO_BUILD= -else - DO_BUILD=y -fi - -default_target=boot-disk.img - -USB=$(which usb || echo ./src/usb) - -if [ "$1" ] -then - if [ "$1" = USB ] - then - [ "$DO_BUILD" ] && arg= || arg=-n - target=$($USB $arg) || exit 1 - elif [ -f "$1" ] - then - case "$1" in - *.img) ;; - *) die "Invalid image filename. Use *.img";; - esac - target=$1 - fi -else - target=$default_target -fi - -if [ "$DO_BUILD" ] -then - do_build -fi -boot_vm "$target" diff --git a/src/publish-ip.sh b/src/publish-ip.sh deleted file mode 100755 index 37fd2e3..0000000 --- a/src/publish-ip.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/sh - -kiki_hostkey=/var/cache/kiki/config/ssh_host_rsa_key -debian_hostkey=/etc/ssh/ssh_host_rsa_key - -determine_lan_ip() -{ - ip -4 -oneline addr show | - while read n dev _ ip rest; do - case "$rest" in - *'scope global'*) ;; - *) continue ;; - esac - # Exclude our IP address on br0 -- hosts connected via this device should - # be receiving DNS servers from us via DHCP, so dyndns is unnecessary. - # However, perhaps we could install a third entry in the dyndns. (Perhaps - # something like *.br0.ssh.cryptonomic.net would give us automatic names - # for all devices.) - case "$dev" in - br0) continue ;; - esac - echo ${ip%/*} - break - done -} - -ssh_cryptonomic_net__known_hosts() -{ -cat <<'END' -|1|ORqVRkqd0LO25vHCB0LezHAgwRE=|ih7EYLpvg9jpU86/0Od0N8Ur36c= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHkIETz7wmKd7TZgb3NPeUElZDjZqw2VPd8yDOBTj5UzUBmcgCyE1oCS3Oe1iO9zJWpPtG0QyYa29lKi+vN6pN4= -END -} - -tmpfile=$(mktemp) || exit 1 -trap 'rm -f "$tmpfile"' EXIT -ssh_cryptonomic_net__known_hosts > "$tmpfile" - -lan_ip=$(determine_lan_ip) - -if [ "$lan_ip" ]; then - set -- lan "$lan_ip" -else - set -- -fi - -hostkey= -for f in "$kiki_hostkey" "$debian_hostkey"; do - [ -r "$f" ] || continue - hostkey=$f - break -done - -ssh -o GlobalKnownHostsFile="$tmpfile" ${hostkey:+ -i "$hostkey"} dyndns@ssh.cryptonomic.net "$@" diff --git a/src/qemu.sh b/src/qemu.sh deleted file mode 100755 index 0300c71..0000000 --- a/src/qemu.sh +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/sh - -. samizdat-paths.sh - -case "$(id -u)" in - 0) sudo= ;; - *) sudo=sudo ;; -esac - -iso=${samizdat_iso_dir}/samizdat.iso -disk=${samizdat_iso_dir}/samizdat.disk.img -layered=${samizdat_iso_dir}/${iso%.iso}.layered.iso - -[ -f "$layered" ] && iso=$layered - -[ "$1" ] && iso=$1 - -[ "$NO_NET" ] || USE_NET=y - -NET='tap,ifname=tap0,script=no,downscript=no' - -[ "$SLOW_BOOT" ] || QEMU_LOADS_LINUX=y - -# To use qemu built-in pxe boot server: -# NET='user,tftp=isolinux,bootfile=/pxelinux.0' - -nbd_filename=samizdat.btrfs -[ "$NBD_FILENAME" ] && nbd_filename=$NBD_FILENAME - -initrd=${samizdat_isolinux_dir}/linux/initrd.img -kernel=${samizdat_isolinux_dir}/linux/vmlinuz -kcmdline_CDROM='boot=samizdat components quiet' -kcmdline_CDROM_NET="${kcmdline_CDROM} nbdroot=,${nbd_filename}, nbddev=/dev/nbd0 ip=dhcp" -kcmdline_NET="${kcmdline_CDROM_NET} netkeys" - -find_mac() -{ - start_mac=$1 - for mac in $(ip link show | grep link/ether | (read _ mac _; echo $mac | tr : -)); do - if [ "${mac%??}" = "${start_mac%??}" ]; then - prefix=${mac%??} - suffix=$(printf %x $(( 0x${mac##*-} + 1 ))) - MAC=${prefix}${suffix} - return - fi - done - MAC=$start_mac -} -find_mac 52-54-00-12-34-56 - -kcmdline_BOOTIF="BOOTIF=01-$MAC" - -set -- -if [ "$USE_ISO" ]; then - set -- "$@" -cdrom "$iso" - if [ "$QEMU_LOADS_LINUX" ]; then - set -- "$@" -initrd "$initrd" -kernel "$kernel" - if [ "$NO_NET" ]; then - set -- "$@" -append "$kcmdline_CDROM" - else - set -- "$@" -append "$kcmdline_CDROM_NET" - fi - else - set -- "$@" -boot d - fi -else - if [ "$QEMU_LOADS_LINUX" ]; then - set -- "$@" -initrd "$initrd" -kernel "$kernel" -append "$kcmdline_NET $kcmdline_BOOTIF" - else - set -- "$@" -boot n - fi -fi - -case $(arch) in - x86_64) qemu=qemu-system-x86_64 ;; - *) qemu=qemu-system-i386 ;; -esac - -try_fallocate() -{ - for size in "$@"; do - fallocate -l "$size" "$disk"~tmp || continue - mv "$disk"~tmp "$disk" - return - done - false -} - -if [ ! -e "$disk" ]; then - try_fallocate 16GB 8GB 4GB 2GB 1GB || - echo "Warning: no virtual disk (could not create $disk)" >&2 -fi - -if grep -q '^flags.*\' /proc/cpuinfo; then - kvm='-enable-kvm -cpu host' - read nested < /sys/module/kvm_intel/parameters/nested - if [ "$nested" != Y ]; then - printf '%s\n' \ - 'Warning: nested KVM is not available' \ - 'Try "make install-nested-kvm"' - fi -else - >&2 printf '%s\n' \ - '' \ - 'Warning: kernel virtual machine extensions (KVM) not available.' \ - 'The VM will be intolerably slow.' \ - 'If your hardware supports KVM, you need to enable it in the BIOS.' \ - '' \ - 'If you are trying to run qemu in a virtual machine, you need to append' \ - 'the kvm-(intel|amd) module parameter "nested=1" on the _host_ machine.' \ - 'Use "make install-nested-kvm" to do so.' \ - '' - kvm= -fi - -mem_total=$(grep MemTotal /proc/meminfo | (read _ kb _; echo $((kb / 1024)))) -use_mem=640 -if [ "$mem_total" -le $((use_mem * 2)) ]; then - use_mem=$((mem_total / 2)) -fi - -set -x -$sudo ${qemu} ${kvm} -smp 2 -m ${use_mem} -k en-us \ - -vga qxl \ - -net nic,model=virtio,macaddr=$MAC \ - ${USE_NET:+ -net "$NET"} \ - -rtc base=localtime \ - -drive index=0,media=disk,format=raw,file="$disk" \ - "$@" diff --git a/src/store-child-permanently b/src/store-child-permanently deleted file mode 100755 index 82e79d8..0000000 --- a/src/store-child-permanently +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh - -. samizdat-paths.sh - -error() -{ - printf 'Error: %s\n' "${*:-command failed}" >&2 - exit 1 -} - -warning() -{ - printf 'Warning: %s\n' "${*:-something went wrong}" >&2 -} - -store_tmpfs() -{ - local dir="$1" - mountpoint -q "$dir" || return 0 - [ ! -d "$dir".backup ] || error "existing child backup found: '$dir.backup'. Refusing to continue." - cp -a "$dir" "$dir".backup || error "failed to make copy of child." - umount "$dir" || error "failed to unmount child tmpfs" - rmdir "$dir" || mv -Tb "$dir" "$dir".unlikely - mv -T "$dir".backup "$dir" || error "failed to move copied child dir into place. Child will not function!" -} - -assert_root() -{ - [ "$(id -u)" = 0 ] || error "you are not root" -} - -main() -{ - assert_root - child=$1 - [ "$child" ] || usage - if [ -d "$samizdat_child_dir"/child."$child" ]; then - store_tmpfs "$samizdat_child_dir"/child."$child" - else - error "not a directory: $samizdat_child_dir/child.$child" - fi -} - -case $# in - 0) read child < reused-child && main "$child" ;; - *) main "$@" ;; -esac diff --git a/src/xorriso-usb.sh b/src/xorriso-usb.sh deleted file mode 100755 index 436c8fe..0000000 --- a/src/xorriso-usb.sh +++ /dev/null @@ -1,295 +0,0 @@ -#!/bin/bash - -die() { printf "%s: Error: %s\n" "$0" "$*" >&2; exit 1; } - -whole_device() -{ - case "$1" in - *-part?) false ;; - *-part??) false ;; - *-part???) false ;; - */usb\*) false ;; - *) true ;; - esac -} - -confirm_usb() -{ - local msg="This will completely overwrite device:\n\n\t%s\n\nType 'yes' to confirm.\nContinue? " - printf "$msg" "$1" >&2 - read line - case "$line" in - [yY][eE][sS]) return ;; - *) die "Aborted by user." ;; - esac -} - -choose_usb() -{ - local devs maj - set -- /dev/disk/by-id/usb* - for dev; do - shift - whole_device "$dev" || continue - set -- "$@" "$dev" - done - if [ $# = 0 ]; then - die "no usb device found" - elif [ $# = 1 ]; then - confirm_usb "$1" || die impossible - outdev="$1" - else - die "multiple USB devices connected and choice between them is unimplemented. ($*)" - fi -} - -choose_cdrom() -{ - die 'choose_cdrom: unimplemented; specify cdrom device with --out' -} - -choose_outdev() -{ - if [ "$CMDLINE_OUTDEV" ]; then - outdev=$CMDLINE_OUTDEV~ - NEED_STDIO=y - elif [ "$USB" ]; then - choose_usb - NEED_STDIO=y - else - choose_cdrom - NEED_STDIO= - fi -} - -generate_keys() -{ - if [ "$ADAM" -o "$BOOTLOADER_ONLY" ]; then - kiki init || die 'kiki init failed' - GPG_INPUT_DIR=/root/.gnupg - else - keygen.sh "$child_dir" || die "keygen.sh failed" - GPG_INPUT_DIR=$child_dir/root/.gnupg - trap 'umount "$child_dir"; rmdir "$child_dir"' EXIT - fi -} - -try_mount() -{ - # TODO: don't use /mnt - # Ofc the real solution is to get help with xorriso. - NEED_UNMOUNT="$1" - mount -r "$1" /mnt && trap 'umount -l /mnt' EXIT -} - -verbosely() -{ - (set -x; "$@") -} - -xorriso_cmd() -{ - # input variables: - - ## that do not affect the output ISO image: - - # SHOW_XORRISO_CMD - # SILENT - # NEED_STDIO - - ## that do not vary by invocation: - - # volid - # vmlinuz_dir - # efi_dir - # gpg_iso_path - - ## that specify sources of input: - - # INPUT_DEVICE - # GPG_INPUT_DIR - # $@ (btrfs filesystems) - # EXTRA_INPUT_DIRS - - ## boolean flags - - # REMOVE_BTRFS - # ADD_BTRFS - - ${SHOW_XORRISO_CMD:+ verbosely} ${NO_ACT:+ :} \ - xorrisofs -iso-level 3 -- \ - ${INPUT_DEVICE:+ -indev "$INPUT_DEVICE" } \ - -outdev ${NEED_STDIO:+stdio:}"$outdev" \ - -blank as_needed \ - ${SILENT:+ -report_about mishap} \ - -return_with sorry 0 \ - -volid "$volid" \ - -pathspecs on \ - \ - \ - ${EXTRA_INPUT_DIRS} \ - \ - \ - -rm_r linux -- -add linux="${vmlinuz_dir}" -- \ - ${REMOVE_BTRFS:+ -rm_r rootfs -- } \ - ${ADD_BTRFS:+ -follow link -add "$@" -- -follow default } \ - \ - \ - -rm_r "${gpg_iso_path}" -- \ - -add "${gpg_iso_path}=${GPG_INPUT_DIR}" -- \ - \ - \ - -chown_r 0 / -- \ - -chgrp_r 0 / -- \ - -chmod_r go-rwx "${gpg_iso_path}" -- \ - \ - \ - -as mkisofs -graft-points \ - -b grub/i386-pc/eltorito.img \ - -no-emul-boot -boot-info-table \ - --embedded-boot "${efi_dir}"/embedded.img \ - --protective-msdos-label \ - grub="${efi_dir}"/grub -} - -run_xorriso() -{ - xorriso_cmd "$@" || die "xorriso exited $?" - - case "$outdev" in - *~) [ -f "$outdev" ] && mv "$outdev" "${outdev%\~}" ;; - esac - - if [ "$USB" -a "$DETACH" -a $? = 0 ]; then - udisks --detach "$outdev" - fi -} - -find_child() -{ - # TODO: Lookup by IP address, MAC address - printf '%s' "$samizdat_child_dir"/child."$1" -} - -. samizdat-paths.sh || die 'samizdat-path.sh not found' - -if [ -f xorriso-usb.config ]; then - . xorriso-usb.config -fi - -volid=SamizdatLive -vmlinuz_dir=$samizdat_linux_dir -efi_dir=$samizdat_grub_efi_dir -gpg_iso_path=gnupghome - - -outdev= -GPG_INPUT_DIR= -child_dir=$samizdat_child_dir/child.$$ - -OPT=$(getopt -o '' --long 'bootloader,reuse-child:,adam,usb,detach,in:,out:,test' -n "$0" -- "$@") || die 'getopt error' -eval set -- "$OPT" -unset OPT - -ADAM=; DETACH=; USB=y -while [ $# -gt 0 ]; do - case "$1" in - --) shift; break;; - --adam) shift; ADAM=y;; - --bootloader) shift; export BOOTLOADER_ONLY=y;; - --cdrom) shift; USB=;; - --detach) shift; DETACH=y;; - --in) INPUT_DEVICE="$2"; shift 2;; - --out) CMDLINE_OUTDEV="$2"; USB=; shift 2;; - --reuse-child) REUSE_CHILD=y; child_dir="$(find_child "$2")"; shift 2;; - --test) shift; QUICK_TEST=y;; - *) die 'getopt error';; - esac -done - -if [ "$INPUT_DEVICE" ]; then - die "support for --in is disabled because xorriso needs different arguments to produce a bootable image" - -elif [ $# = 0 -a -z "$BOOTLOADER_ONLY" ]; then - if mountpoint -q /cdrom; then - INPUT_DEVICE=/cdrom - elif [ -e /srv/nbd.btrfs ]; then - set -- /srv/nbd.btrfs - elif [ "$(blockdev --getsz /dev/nbd0)" -gt 0 ]; then - (set -x; dd if=/dev/nbd0 of=/srv/nbd.btrfs~ && mv /srv/nbd.btrfs~ /srv/nbd.btrfs) || die "failed to copy network block device" - set -- /srv/nbd.btrfs - else - die "no input device and no input btrfs layers: aborting." - fi -fi - -for fs; do - [ -f "$fs" ] || die "not a file: $fs" - case "$fs" in - *.btrfs) ;; - *) die "invalid name (does not match *.btrfs): $fs" ;; - esac - shift - set -- "$@" "rootfs/${fs##*/}=$fs" -done - - -[ "$(id -u)" = 0 ] || die "you are not root." - -grub-efi.sh || die "grub-efi.sh failed" - -choose_outdev - -if [ "$REUSE_CHILD" ]; then - GPG_INPUT_DIR=$child_dir/root/.gnupg - [ -d "$GPG_INPUT_DIR" ] || die "invalid child" -else - generate_keys -fi - -if [ "$INPUT_DEVICE" ]; then - if [ "$INPUT_DEVICE" = /dev/md55 ]; then - if mountpoint -q /cdrom; then - EXTRA_INPUT_DIRS='-add /=/cdrom --' - fi - elif [ -d "$INPUT_DEVICE" ]; then - EXTRA_INPUT_DIRS="-add /=$INPUT_DEVICE --" # TODO: escape - elif try_mount "$INPUT_DEVICE"; then - EXTRA_INPUT_DIRS='-add /=/mnt --' - else - REPLACE_INITRD= - REMOVE_BTRFS= - ADD_BTRFS= - fi -elif [ "$BOOTLOADER_ONLY" ]; then - REPLACE_INITRD= - REMOVE_BTRFS= - ADD_BTRFS= -else - REPLACE_INITRD=y - REMOVE_BTRFS=y - ADD_BTRFS=y -fi -REPLACE_INITRD= # TODO: fix initrd replacing - -if [ "$QUICK_TEST" ]; then - REMOVE_BTRFS=y - ADD_BTRFS= -fi - -if [ "$REPLACE_INITRD" ]; then - # TODO: fix the paths so this backup isn't needed. What we need to do is - # support tftp pointing to the cdrom. This probably means a tftp directory - # that contains a symlink to /cdrom/linux which gets updated on success here - mv "${vmlinuz_dir}" "${vmlinuz_dir}".bak - mkdir "${vmlinuz_dir}" - initrd.sh || { - mv "${vmlinuz_dir}.bak" "${vmlinuz_dir}" - die 'initrd.sh failed' - } -fi - -SILENT= -SHOW_XORRISO_CMD=y - -run_xorriso "$@" -- cgit v1.2.3