diff options
-rwxr-xr-x | kvmx-create | 160 |
1 files changed, 84 insertions, 76 deletions
diff --git a/kvmx-create b/kvmx-create index 7f20585..33a7351 100755 --- a/kvmx-create +++ b/kvmx-create @@ -146,21 +146,17 @@ kvmx_sudo_run mkdir -p `dirname $image` # function kvmx_create_vmdebootstrap { # Check for requirements - for req in vmdebootstrap mbr; do + for req in vmdebootstrap; do kvmx_install_package $req done # Image format if [ "$format" == "qcow2" ]; then format="--convert-qcow2" - else - formt="" fi if [ "$booloader" == "grub" ]; then boot_option="--grub" - else - boot_option="" fi # Run @@ -181,8 +177,14 @@ function kvmx_create_vmdebootstrap { function kvmx_create_custom { WORK="`mktemp -d`" + if [ "$arch" == "i386" ]; then + kernel_arch="686" + else + kernel_arch="$arch" + fi + # Check for requirements. - for req in debootstrap grub-pc parted; do + for req in debootstrap parted; do kvmx_install_package $req done @@ -205,7 +207,8 @@ function kvmx_create_custom { # Initial system install. echo "Installing base system..." - kvmx_sudo_run LC_ALL=C DEBIAN_FRONTEND=noninteractive debootstrap --arch=$arch $version $WORK/ $mirror + kvmx_sudo_run LC_ALL=C DEBIAN_FRONTEND=noninteractive debootstrap \ + --arch=$arch --include linux-image-$kernel_arch $version $WORK/ $mirror # Initial configuration. echo "Applying initial configuration..." @@ -224,84 +227,17 @@ function kvmx_create_custom { # Fstab echo "/dev/vda2 / ext4 errors=remount-ro 0 1" | $SUDO tee $WORK/etc/fstab > /dev/null - # Locale - $APT_INSTALL locales - echo "LANG=$LANG" | $SUDO tee $WORK/etc/default/locale > /dev/null - echo "$LANG UTF-8" | $SUDO tee -a $WORK/etc/locale.gen > /dev/null - kvmx_sudo_run chroot $WORK/ locale-gen - - # Initial upgrade - echo "Applying initial upgrades..." - kvmx_sudo_run chroot $WORK/ apt-get update - kvmx_sudo_run chroot $WORK/ apt-get upgrade -y - - if [ "$arch" == "i386" ]; then - kernel_arch="686" - else - kernel_arch="$arch" - fi - - # Basic packages - $APT_INSTALL screen cron lsb-release openssl rsync -y - $APT_INSTALL spice-vdagent qemu-guest-agent - - # Kernel - $APT_INSTALL linux-image-$kernel_arch -y - - # OpenSSH - $APT_INSTALL openssh-server -y - kvmx_sudo_run chroot $WORK/ service ssh stop - - # Sudo - echo "Installing sudo..." - $APT_INSTALL sudo -y - echo "%sudo ALL=NOPASSWD: ALL" | $SUDO tee $WORK/etc/sudoers.d/local > /dev/null - - # Root password - echo 'root:root' | kvmx_sudo_run chroot $WORK/ chpasswd - - # Initial user - kvmx_sudo_run chroot $WORK/ useradd $user -G sudo -s /bin/bash - - if [ "$ssh_support" == "y" ]; then - if [ "$ssh_custom" == "y" ]; then - privkey="`dirname $image`/ssh/$hostname.key" - pubkey="${privkey}.pub" - mkdir -p "`dirname $privkey`" - __kvmx_ssh_keygen $privkey "$user@$hostname" - else - pubkey="$DIRNAME/share/ssh/insecure_private_key.pub" - fi - - kvmx_sudo_run chroot $WORK/ mkdir -p /home/user/.ssh - kvmx_sudo_run chroot $WORK/ chmod 700 /home/user/.ssh - kvmx_sudo_run cp $pubkey $WORK/home/user/.ssh/authorized_keys - kvmx_sudo_run chroot $WORK/ chmod 600 /home/user/.ssh/authorized_keys - kvmx_sudo_run touch $WORK/home/user/.hushlogin - fi - - kvmx_sudo_run chroot $WORK/ chown -R user.user /home/user - echo "$user:$password" | kvmx_sudo_run chroot $WORK/ chpasswd - - # Networking - cat <<-EOF | $SUDO tee $WORK/etc/network/interfaces.d/ens3 > /dev/null -allow-hotplug ens3 -iface ens3 inet dhcp -EOF - # Mount auxiliary filesystems needed by the bootloader kvmx_sudo_run mount none -t proc $WORK/proc kvmx_sudo_run mount none -t sysfs $WORK/sys kvmx_sudo_run mount -o bind /dev/ $WORK/dev if [ "$bootloader" == "grub" ]; then - # Possible alternative: https://packages.debian.org/jessie/grub-firmware-qemu $APT_INSTALL grub-pc - # GRUB install is not working for jessie and this was an attempt to fix it - #kvmx_sudo_run sed -i -e 's|^#GRUB_DISABLE_LINUX_UUID=true|GRUB_DISABLE_LINUX_UUID=true|' $WORK/etc/default/grub kvmx_sudo_run chroot $WORK/ update-grub kvmx_sudo_run chroot $WORK/ grub-install $device - # Alternative: install from the host directly into the image + # Possible alternatives: + # https://packages.debian.org/jessie/grub-firmware-qemu # https://superuser.com/questions/130955/how-to-install-grub-into-an-img-file #kvmx_sudo_run grub-install --boot-directory=$WORK/boot $image elif [ "$bootloader" == "extlinux" ]; then @@ -328,6 +264,9 @@ EOF kvmx_sudo_run umount $WORK/sys kvmx_sudo_run umount $WORK/dev + # Run basic provision + __kvmx_create_custom_second_stage + # Umount image kvmx_sudo_run umount $WORK kvmx_sudo_run rmdir $WORK @@ -345,6 +284,75 @@ EOF kvmx_sudo_run chown -R `whoami`. `dirname $image` } +# Second stage procedure +function __kvmx_create_custom_second_stage { + # Networking: eth0 + cat <<-EOF | $SUDO tee $WORK/etc/network/interfaces.d/eth0 > /dev/null +allow-hotplug eth0 +iface eth0 inet dhcp +EOF + + # Networking: ens3 + # See #799253 - virtio ens3 network interface + # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=799253 + cat <<-EOF | $SUDO tee $WORK/etc/network/interfaces.d/ens3 > /dev/null +allow-hotplug ens3 +iface ens3 inet dhcp +EOF + + # Locale + $APT_INSTALL locales + echo "LANG=$LANG" | $SUDO tee $WORK/etc/default/locale > /dev/null + echo "$LANG UTF-8" | $SUDO tee -a $WORK/etc/locale.gen > /dev/null + kvmx_sudo_run chroot $WORK/ locale-gen + + # Initial upgrade + #echo "Updating list of packages..." + #kvmx_sudo_run chroot $WORK/ apt-get update + #kvmx_sudo_run chroot $WORK/ apt-get dist-upgrade -y + + # Basic packages + $APT_INSTALL screen cron lsb-release openssl rsync + $APT_INSTALL spice-vdagent qemu-guest-agent + + # OpenSSH + $APT_INSTALL openssh-server -y + kvmx_sudo_run chroot $WORK/ service ssh stop + + # Sudo + echo "Installing sudo..." + $APT_INSTALL sudo -y + echo "%sudo ALL=NOPASSWD: ALL" | $SUDO tee $WORK/etc/sudoers.d/local > /dev/null + + # Root password + echo 'root:root' | kvmx_sudo_run chroot $WORK/ chpasswd + + # Initial user + if ! grep -q "^$user:" $WORK/etc/passwd; then + kvmx_sudo_run chroot $WORK/ useradd $user -G sudo -s /bin/bash + fi + + if [ "$ssh_support" == "y" ]; then + if [ "$ssh_custom" == "y" ]; then + privkey="`dirname $image`/ssh/$hostname.key" + pubkey="${privkey}.pub" + mkdir -p "`dirname $privkey`" + __kvmx_ssh_keygen $privkey "$user@$hostname" + else + pubkey="$DIRNAME/share/ssh/insecure_private_key.pub" + fi + + kvmx_sudo_run chroot $WORK/ mkdir -p /home/user/.ssh + kvmx_sudo_run chroot $WORK/ chmod 700 /home/user/.ssh + kvmx_sudo_run cp $pubkey $WORK/home/user/.ssh/authorized_keys + kvmx_sudo_run chroot $WORK/ chmod 600 /home/user/.ssh/authorized_keys + kvmx_sudo_run touch $WORK/home/user/.hushlogin + fi + + kvmx_sudo_run chroot $WORK/ chown -R user.user /home/user + echo "$user:$password" | kvmx_sudo_run chroot $WORK/ chpasswd +} + # Dispatch if [ "$method" == "custom" ]; then kvmx_create_custom |