From 1c735ef89baf6ed7b2d02546891d4bce8f086279 Mon Sep 17 00:00:00 2001 From: Bohan Yang Date: Mon, 13 May 2019 12:59:06 +0800 Subject: [PATCH] Update --- netboot.sh | 626 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 354 insertions(+), 272 deletions(-) diff --git a/netboot.sh b/netboot.sh index 1202e7b..547dd9c 100644 --- a/netboot.sh +++ b/netboot.sh @@ -1,240 +1,201 @@ #!/usr/bin/env sh -# Copyright 2018-present Brent, Yang Bohan - +# Copyright 2018-present Bohan Yang (Brent) +# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. - +# # You may obtain a copy of the License at - +# # http://www.apache.org/licenses/LICENSE-2.0 - +# # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - +# # See the License for the specific language governing permissions and # limitations under the License. set -e echo_stderr() { - echo "$@" 1>&2 + echo "$@" 1>&2 } command_exists() { - _PATH="$PATH" - PATH="$PATH:/usr/local/sbin:/usr/sbin:/sbin" - set +e - command -v "$@" >/dev/null 2>&1 - command_exit_status=$? - set -e - PATH="$_PATH" - unset _PATH - return $command_exit_status + command -v "$@" >/dev/null 2>&1 +} + +read_secret() +{ + stty -echo + trap 'stty echo' EXIT + read "$@" + stty echo + trap - EXIT + echo } while [ $# -gt 0 ]; do - case $1 in - --template) - DEBI_TEMPLATE=$2 - shift - ;; - --hostname) - DEBI_HOSTNAME=$2 - shift - ;; - --protocol) - DEBI_PROTOCOL=$2 - shift - ;; - --mirror) - DEBI_MIRROR=$2 - shift - ;; - --directory) - DEBI_DIRECTORY=${2%/} - shift - ;; - --suite) - DEBI_SUITE=$2 - shift - ;; - --username) - DEBI_USERNAME=$2 - shift - ;; - --password) - DEBI_PASSWORD=$2 - shift - ;; - --timezone) - DEBI_TIMEZONE=$2 - shift - ;; - --ntp-server) - DEBI_NTP_SERVER=$2 - shift - ;; - --security-mirror) - DEBI_SECURITY_MIRROR=$2 - shift - ;; - --upgrade) - DEBI_UPGRADE=$2 - shift - ;; - --ip) - DEBI_IP=$2 - shift - ;; - --netmask) - DEBI_NETMASK=$2 - shift - ;; - --gateway) - DEBI_GATEWAY=$2 - shift - ;; - --dns) - DEBI_DNS=$2 - shift - ;; - --include) - DEBI_INCLUDE=$2 - shift - ;; - --ssh-password) - DEBI_SSH=true - DEBI_SSH_PASSWORD=$2 - shift - ;; - --ssh-keys) - DEBI_SSH=true - DEBI_SSH_KEYS=$2 - shift - ;; - --filesystem) - DEBI_FILESYSTEM=$2 - shift - ;; - --dry-run) - DEBI_DRY_RUN=true - ;; - --disk-encryption) - DEBI_DISK_ENCRYPTION="crypto" - ;; - --manual) - DEBI_MANUAL=true - ;; - --architecture) - DEBI_ARCHITECTURE=$2 - shift - ;; - --boot-partition) - DEBI_BOOT_PARTITION=true - ;; - --poweroff) - DEBI_POWEROFF=true - ;; - *) - echo_stderr "Illegal option $1" - exit 1 - esac - shift + case $1 in + --preset) + DEBI_PRESET=$2 + shift + ;; + --ip) + DEBI_IP=$2 + shift + ;; + --netmask) + DEBI_NETMASK=$2 + shift + ;; + --gateway) + DEBI_GATEWAY=$2 + shift + ;; + --ns) + DEBI_NS=$2 + shift + ;; + --hostname) + DEBI_HOSTNAME=$2 + shift + ;; + --ssh-password) + DEBI_SSH=true + DEBI_SSH_PASSWORD=$2 + shift + ;; + --ssh-keys) + DEBI_SSH=true + DEBI_SSH_KEYS=$2 + shift + ;; + --protocol) + DEBI_PROTOCOL=$2 + shift + ;; + --mirror) + DEBI_MIRROR=$2 + shift + ;; + --directory) + DEBI_DIRECTORY=${2%/} + shift + ;; + --suite) + DEBI_SUITE=$2 + shift + ;; + --skip-user) + DEBI_SKIP_USER=true + ;; + --username) + DEBI_USERNAME=$2 + shift + ;; + --password) + DEBI_PASSWORD=$2 + shift + ;; + --timezone) + DEBI_TIMEZONE=$2 + shift + ;; + --ntp) + DEBI_NTP=$2 + shift + ;; + --skip-part) + DEBI_SKIP_PART=true + ;; + --disk) + DEBI_DISK=$2 + shift + ;; + --part) + DEBI_PART=$2 + shift + ;; + --fs) + DEBI_FS=$2 + shift + ;; + --security) + DEBI_SECURITY=$2 + shift + ;; + --install) + DEBI_INSTALL=$2 + shift + ;; + --upgrade) + DEBI_UPGRADE=$2 + shift + ;; + --poweroff) + DEBI_POWEROFF=true + ;; + --arch) + DEBI_ARCH=$2 + shift + ;; + --boot-partition) + DEBI_BOOT_PARTITION=true + ;; + --gpt) + DEBI_PARTITION_TYPE=gpt + ;; + --dry-run) + DEBI_DRY_RUN=true + ;; + *) + echo_stderr "Error: Illegal option $1" + exit 1 + esac + shift done -case "$DEBI_TEMPLATE" in - china) - DEBI_PROTOCOL=${DEBI_PROTOCOL:-https} - DEBI_MIRROR=${DEBI_MIRROR:-chinanet.mirrors.ustc.edu.cn} - DEBI_TIMEZONE=${DEBI_TIMEZONE:-Asia/Shanghai} - DEBI_NTP_SERVER=${DEBI_NTP_SERVER:-cn.ntp.org.cn} - DEBI_SECURITY_MIRROR=${DEBI_SECURITY_MIRROR:-true} - DEBI_DNS=${DEBI_DNS:-156.154.70.5 156.154.71.5} - ;; - cloud) - DEBI_PROTOCOL=${DEBI_PROTOCOL:-https} - DEBI_MIRROR=${DEBI_MIRROR:-cdn-aws.deb.debian.org} - DEBI_NTP_SERVER=${DEBI_NTP_SERVER:-time.google.com} - DEBI_SECURITY_MIRROR=${DEBI_SECURITY_MIRROR:-true} +case "$DEBI_PRESET" in + china) + DEBI_NS=${DEBI_NS:-156.154.70.5 156.154.71.5} + DEBI_PROTOCOL=${DEBI_PROTOCOL:-https} + DEBI_MIRROR=${DEBI_MIRROR:-chinanet.mirrors.ustc.edu.cn} + DEBI_TIMEZONE=${DEBI_TIMEZONE:-Asia/Shanghai} + DEBI_NTP=${DEBI_NTP:-cn.ntp.org.cn} + DEBI_SECURITY=${DEBI_SECURITY:-true} + ;; + cloud) + DEBI_PROTOCOL=${DEBI_PROTOCOL:-https} + DEBI_MIRROR=${DEBI_MIRROR:-cdn-aws.deb.debian.org} + DEBI_NTP=${DEBI_NTP:-time.google.com} + DEBI_SECURITY=${DEBI_SECURITY:-true} + *) + echo_stderr "Error: No such preset $DEBI_PRESET" + exit 1 esac -DEBI_PROTOCOL=${DEBI_PROTOCOL:-http} -DEBI_MIRROR=${DEBI_MIRROR:-deb.debian.org} -DEBI_DIRECTORY=${DEBI_DIRECTORY:-/debian} - -if [ -z "$DEBI_ARCHITECTURE" ]; then - if command_exists dpkg; then - DEBI_ARCHITECTURE=$(dpkg --print-architecture) - else - DEBI_ARCHITECTURE=amd64 - fi -fi - DEBI_SUITE=${DEBI_SUITE:-stretch} -DEBI_USERNAME=${DEBI_USERNAME:-debian} -DEBI_TIMEZONE=${DEBI_TIMEZONE:-UTC} -DEBI_NTP_SERVER=${DEBI_NTP_SERVER:-pool.ntp.org} -DEBI_UPGRADE=${DEBI_UPGRADE:-full-upgrade} -DEBI_DNS=${DEBI_DNS:-1.1.1.1 1.0.0.1} -DEBI_FILESYSTEM=${DEBI_FILESYSTEM:-ext4} -DEBI_DISK_ENCRYPTION=${DEBI_DISK_ENCRYPTION:-regular} - -if [ -z "$DEBI_SECURITY_MIRROR" ]; then - DEBI_SECURITY_MIRROR=http://security.debian.org/debian-security -else - if [ "$DEBI_SECURITY_MIRROR" = true ]; then - DEBI_SECURITY_MIRROR=$DEBI_PROTOCOL://$DEBI_MIRROR${DEBI_DIRECTORY%/*}/debian-security - fi -fi - -if [ "$DEBI_MANUAL" != true ]; then - if [ -z "$DEBI_PASSWORD" ]; then - DEBI_PASSWORD=$(mkpasswd -m sha-512) - else - DEBI_PASSWORD=$(mkpasswd -m sha-512 "$DEBI_PASSWORD") - fi -fi - -DEBI_TARGET="debian-$DEBI_SUITE" -if [ "$DEBI_BOOT_PARTITION" = true ]; then - DEBI_BOOT_DIRECTORY=/ -else - DEBI_BOOT_DIRECTORY=/boot/ -fi -DEBI_TARGET_PATH="$DEBI_BOOT_DIRECTORY$DEBI_TARGET" -echo='cat' +save_preseed=cat if [ "$DEBI_DRY_RUN" != true ]; then - user="$(id -un 2>/dev/null || true)" + user="$(id -un 2>/dev/null || true)" - sudo='' - if [ "$user" != 'root' ]; then - if command_exists sudo; then - sudo='sudo' - else - exit 1 + if [ "$user" != root ]; then + echo_stderr 'Error: Require root.' + exit 1 fi - fi - - DEBI_WORKDIR="/boot/$DEBI_TARGET" - DEBI_BASE_URL=$DEBI_PROTOCOL://$DEBI_MIRROR$DEBI_DIRECTORY/dists/$DEBI_SUITE/main/installer-$DEBI_ARCHITECTURE/current/images/netboot/debian-installer/$DEBI_ARCHITECTURE - if command_exists update-grub; then - $sudo update-grub - DEBI_GRUB_CONFIG=/boot/grub/grub.cfg - else - DEBI_GRUB_CONFIG=/boot/grub2/grub.cfg - $sudo grub2-mkconfig -o "$DEBI_GRUB_CONFIG" - fi - $sudo rm -rf "$DEBI_WORKDIR" - $sudo mkdir -p "$DEBI_WORKDIR" - cd "$DEBI_WORKDIR" - $sudo rm -f preseed.cfg - echo="$sudo tee -a preseed.cfg" + + DEBI_NEW="debian-$DEBI_SUITE" + DEBI_NEW_DIR="/boot/$DEBI_NEW" + + rm -rf "$DEBI_NEW_DIR" + mkdir -p "$DEBI_NEW_DIR" + save_preseed="tee -a $DEBI_NEW_DIR/preseed.cfg" fi -$echo << EOF +$save_preseed << EOF # Localization d-i debian-installer/locale string en_US.UTF-8 @@ -245,51 +206,57 @@ d-i keyboard-configuration/xkb-keymap select us d-i netcfg/choose_interface select auto EOF +DEBI_NS=${DEBI_NS:-1.1.1.1 1.0.0.1} + if [ -n "$DEBI_IP" ]; then - echo "d-i netcfg/disable_autoconfig boolean true" | $echo - echo "d-i netcfg/get_ipaddress string $DEBI_IP" | $echo - if [ -n "$DEBI_NETMASK" ]; then - echo "d-i netcfg/get_netmask string $DEBI_NETMASK" | $echo - fi - if [ -n "$DEBI_GATEWAY" ]; then - echo "d-i netcfg/get_gateway string $DEBI_GATEWAY" | $echo - fi - if [ -n "$DEBI_DNS" ]; then - echo "d-i netcfg/get_nameservers string $DEBI_DNS" | $echo - fi - echo "d-i netcfg/confirm_static boolean true" | $echo + echo 'd-i netcfg/disable_autoconfig boolean true' | $save_preseed + echo "d-i netcfg/get_ipaddress string $DEBI_IP" | $save_preseed + if [ -n "$DEBI_NETMASK" ]; then + echo "d-i netcfg/get_netmask string $DEBI_NETMASK" | $save_preseed + fi + if [ -n "$DEBI_GATEWAY" ]; then + echo "d-i netcfg/get_gateway string $DEBI_GATEWAY" | $save_preseed + fi + if [ -n "$DEBI_NS" ]; then + echo "d-i netcfg/get_nameservers string $DEBI_NS" | $save_preseed + fi + echo 'd-i netcfg/confirm_static boolean true' | $save_preseed fi -$echo << EOF +$save_preseed << EOF d-i netcfg/get_hostname string debian d-i netcfg/get_domain string EOF if [ -n "$DEBI_HOSTNAME" ]; then - echo "d-i netcfg/hostname string $DEBI_HOSTNAME" | $echo + echo "d-i netcfg/hostname string $DEBI_HOSTNAME" | $save_preseed fi -echo "d-i hw-detect/load_firmware boolean true" | $echo +echo 'd-i hw-detect/load_firmware boolean true' | $save_preseed if [ "$DEBI_SSH" = true ]; then - $echo << EOF + $save_preseed << EOF # Network console d-i anna/choose_modules string network-console d-i preseed/early_command string anna-install network-console EOF - if [ -n "$DEBI_SSH_PASSWORD" ]; then - echo "d-i network-console/password password $DEBI_SSH_PASSWORD" | $echo - echo "d-i network-console/password-again password $DEBI_SSH_PASSWORD" | $echo - fi - if [ -n "$DEBI_SSH_KEYS" ]; then - echo "d-i network-console/authorized_keys_url string $DEBI_SSH_KEYS" | $echo - fi - echo "d-i network-console/start select Continue" | $echo + if [ -n "$DEBI_SSH_PASSWORD" ]; then + echo "d-i network-console/password password $DEBI_SSH_PASSWORD" | $save_preseed + echo "d-i network-console/password-again password $DEBI_SSH_PASSWORD" | $save_preseed + fi + if [ -n "$DEBI_SSH_KEYS" ]; then + echo "d-i network-console/authorized_keys_url string $DEBI_SSH_KEYS" | $save_preseed + fi + echo 'd-i network-console/start select Continue' | $save_preseed fi -$echo << EOF +DEBI_PROTOCOL=${DEBI_PROTOCOL:-http} +DEBI_MIRROR=${DEBI_MIRROR:-deb.debian.org} +DEBI_DIRECTORY=${DEBI_DIRECTORY:-/debian} + +$save_preseed << EOF # Mirror settings @@ -300,70 +267,155 @@ d-i mirror/$DEBI_PROTOCOL/directory string $DEBI_DIRECTORY d-i mirror/$DEBI_PROTOCOL/proxy string d-i mirror/suite string $DEBI_SUITE d-i mirror/udeb/suite string $DEBI_SUITE +EOF + +if [ "$DEBI_SKIP_USER" != true ]; then + DEBI_USERNAME=${DEBI_USERNAME:-debian} + + if command_exists mkpasswd; then + if [ -z "$DEBI_PASSWORD" ]; then + DEBI_PASSWORD="$(mkpasswd -m sha-512)" + else + DEBI_PASSWORD="$(mkpasswd -m sha-512 "$DEBI_PASSWORD")" + fi + elif command_exists python3; then + if [ -z "$DEBI_PASSWORD" ]; then + DEBI_PASSWORD="$(python3 -c 'import crypt, getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))')" + else + DEBI_PASSWORD="$(python3 -c "import crypt; print(crypt.crypt(\"$DEBI_PASSWORD\", crypt.mksalt(crypt.METHOD_SHA512)))")" + fi + else + DEBI_CLEARTEXT=true + if [ -z "$DEBI_PASSWORD" ]; then + printf 'Password: ' + read_secret DEBI_PASSWORD + fi + fi + + $save_preseed << EOF + +# Account setup + +EOF + + if [ "$DEBI_USERNAME" = root ]; then + echo 'd-i passwd/make-user boolean false' | $save_preseed + if [ "$DEBI_CLEARTEXT" = true ]; then + $save_preseed << EOF +d-i passwd/root-password password $DEBI_PASSWORD +d-i passwd/root-password-again password $DEBI_PASSWORD +EOF + else + echo "d-i passwd/root-password-crypted password $DEBI_PASSWORD" | $save_preseed + fi + else + $save_preseed << EOF +d-i passwd/root-login boolean false +d-i passwd/user-fullname string +d-i passwd/username string $DEBI_USERNAME +EOF + if [ "$DEBI_CLEARTEXT" = true ]; then + $save_preseed << EOF +d-i passwd/user-password password $DEBI_PASSWORD +d-i passwd/user-password-again password $DEBI_PASSWORD +EOF + else + echo "d-i passwd/user-password-crypted password $DEBI_PASSWORD" + fi + fi +fi + +DEBI_TIMEZONE=${DEBI_TIMEZONE:-UTC} +DEBI_NTP=${DEBI_NTP:-pool.ntp.org} + +$save_preseed << EOF # Clock and time zone setup d-i clock-setup/utc boolean true d-i time/zone string $DEBI_TIMEZONE d-i clock-setup/ntp boolean true -d-i clock-setup/ntp-server string $DEBI_NTP_SERVER +d-i clock-setup/ntp-server string $DEBI_NTP EOF -if [ "$DEBI_MANUAL" != true ]; then - $echo << EOF +if [ "$DEBI_SKIP_PART" != true ]; then + DEBI_FS=${DEBI_FS:-ext4} + DEBI_PART=${DEBI_PART:-regular} -# Account setup - -d-i passwd/root-login boolean false -d-i passwd/user-fullname string -d-i passwd/username string $DEBI_USERNAME -d-i passwd/user-password-crypted password $DEBI_PASSWORD + $save_preseed << EOF # Partitioning -d-i partman/default_filesystem string $DEBI_FILESYSTEM -d-i partman-auto/method string $DEBI_DISK_ENCRYPTION +EOF + + if [ -n "$DEBI_DISK" ]; then + echo "d-i partman-auto/disk string $DEBI_DISK" | $save_preseed + fi + + $save_preseed << EOF +d-i partman-auto/method string $DEBI_PART d-i partman-lvm/device_remove_lvm boolean true d-i partman-md/device_remove_md boolean true d-i partman-lvm/confirm boolean true d-i partman-lvm/confirm_nooverwrite boolean true EOF - if [ "$DEBI_DISK_ENCRYPTION" = "regular" ]; then - $echo << EOF + if [ "$DEBI_PART" = "regular" ]; then + $save_preseed << EOF +d-i partman/default_filesystem string $DEBI_FS d-i partman-auto/expert_recipe string naive :: 0 1 -1 \$default_filesystem \$primary{ } \$bootable{ } method{ format } format{ } use_filesystem{ } \$default_filesystem{ } mountpoint{ / } . d-i partman-auto/choose_recipe select naive d-i partman-basicfilesystems/no_swap boolean false EOF - fi + fi - $echo << EOF + $save_preseed << EOF d-i partman-partitioning/confirm_write_new_label boolean true d-i partman/choose_partition select finish d-i partman/confirm boolean true d-i partman/confirm_nooverwrite boolean true d-i partman/mount_style select uuid +EOF +fi + +$save_preseed << EOF # Base system installation d-i base-installer/install-recommends boolean false +EOF + +if [ -z "$DEBI_SECURITY" ]; then + DEBI_SECURITY=http://security.debian.org/debian-security +else + if [ "$DEBI_SECURITY" = true ]; then + DEBI_SECURITY=$DEBI_PROTOCOL://$DEBI_MIRROR${DEBI_DIRECTORY%/*}/debian-security + fi +fi + +$save_preseed << EOF # Apt setup d-i apt-setup/services-select multiselect updates, backports -d-i apt-setup/local0/repository string $DEBI_SECURITY_MIRROR $DEBI_SUITE/updates main +d-i apt-setup/local0/repository string $DEBI_SECURITY $DEBI_SUITE/updates main d-i apt-setup/local0/source boolean true +EOF + +DEBI_UPGRADE=${DEBI_UPGRADE:-full-upgrade} + +$save_preseed << EOF # Package selection tasksel tasksel/first multiselect ssh-server EOF - if [ -n "$DEBI_INCLUDE" ]; then - echo "d-i pkgsel/include string $DEBI_INCLUDE" | $echo - fi +if [ -n "$DEBI_INSTALL" ]; then + echo "d-i pkgsel/include string $DEBI_INSTALL" | $save_preseed +fi - $echo << EOF +$save_preseed << EOF d-i pkgsel/upgrade select $DEBI_UPGRADE popularity-contest popularity-contest/participate boolean false @@ -377,34 +429,64 @@ d-i grub-installer/bootdev string default d-i finish-install/reboot_in_progress note EOF - if [ "$DEBI_POWEROFF" = true ]; then - echo 'd-i debian-installer/exit/poweroff boolean true' | $echo - fi +if [ "$DEBI_POWEROFF" = true ]; then + echo 'd-i debian-installer/exit/poweroff boolean true' | $save_preseed fi -echo2='cat' +save_grubcfg=cat if [ "$DEBI_DRY_RUN" != true ]; then - if command_exists wget; then - $sudo wget "$DEBI_BASE_URL/linux" "$DEBI_BASE_URL/initrd.gz" - elif command_exists curl; then - $sudo curl -O "$DEBI_BASE_URL/linux" -O "$DEBI_BASE_URL/initrd.gz" - else - echo_stderr 'wget/curl not found' - exit 1 - fi - - $sudo gunzip initrd.gz - echo preseed.cfg | $sudo cpio -H newc -o -A -F initrd - $sudo gzip initrd - echo2="$sudo tee -a $DEBI_GRUB_CONFIG" + if [ -z "$DEBI_ARCH" ]; then + if command_exists dpkg; then + DEBI_ARCH="$(dpkg --print-architecture)" + else + DEBI_ARCH=amd64 + fi + fi + + DEBI_BASE_URL="$DEBI_PROTOCOL://$DEBI_MIRROR$DEBI_DIRECTORY/dists/$DEBI_SUITE/main/installer-$DEBI_ARCH/current/images/netboot/debian-installer/$DEBI_ARCH" + + if command_exists wget; then + wget -P "$DEBI_NEW_DIR" "$DEBI_BASE_URL/linux" "$DEBI_BASE_URL/initrd.gz" + elif command_exists curl; then + curl "$DEBI_BASE_URL/linux" -o "$DEBI_NEW_DIR/linux" "$DEBI_BASE_URL/initrd.gz" -o "$DEBI_NEW_DIR/initrd.gz" + else + echo_stderr 'Error: wget/curl not found.' + exit 1 + fi + + gunzip initrd.gz + echo preseed.cfg | cpio -H newc -o -A -F initrd + gzip initrd + + if command_exists update-grub; then + DEBI_GRUBCFG=/boot/grub/grub.cfg + update-grub + elif command_exists grub2-mkconfig; then + DEBI_GRUBCFG=/boot/grub2/grub.cfg + grub2-mkconfig -o "$DEBI_GRUBCFG" + else + echo_stderr 'Error: Command update-grub/grub2-mkconfig not found.' + exit 1 + fi + + save_grubcfg="tee -a $DEBI_GRUBCFG" +fi + +if [ "$DEBI_BOOT_PARTITION" = true ]; then + DEBI_BOOT_DIR=/ +else + DEBI_BOOT_DIR=/boot/ fi -$echo2 << EOF +DEBI_NEW_DIR="$DEBI_BOOT_DIR$DEBI_NEW" +DEBI_PARTITION_TYPE=${DEBI_PARTITION_TYPE:-msdos} + +$save_grubcfg << EOF menuentry 'Debian Installer' --id debi { -insmod part_msdos +insmod part_$DEBI_PARTITION_TYPE insmod ext2 -set root='(hd0,msdos1)' -linux $DEBI_TARGET_PATH/linux -initrd $DEBI_TARGET_PATH/initrd.gz +set root='(hd0,${DEBI_PARTITION_TYPE}1)' +linux $DEBI_NEW_DIR/linux +initrd $DEBI_NEW_DIR/initrd.gz } EOF