Merge pull request #51 from CanonicalLtd/switch-to-packages

Switch to packages
This commit is contained in:
Adam Stokes 2015-09-28 14:04:48 -04:00
commit d4aad9fab0
5 changed files with 101 additions and 69 deletions

View File

@ -32,10 +32,15 @@ grub2-common
shim
shim-signed
grub-efi-amd64-signed
probert
"
# "URL" "GPGKEY"
# ppa:foo/bar ""
PPAS=(
"https://raharper:Q9F9bRlSxg70BGv8m6dc@private-ppa.launchpad.net/subiquity/subiquity-dev/ubuntu" "3D2F6C3B"
)
SRC_DEPS=(
"bzr" "lp:curtin" "curtin"
"git" "git@github.com:CanonicalLtd/probert.git" "probert"
)
INSTALLER_DEPS=(
"petname"
@ -44,6 +49,7 @@ INSTALLER_DEPS=(
"python3-netifaces"
"python-urwid"
"python3-tornado"
"probert"
)
CACHEDIR=""
GRUB_MODS="configfile fat part_gpt part_msdos cat echo test search search_label search_fs_uuid boot chain linux reboot halt normal efi_gop efi_uga font gfxterm gfxterm_menu gfxterm_background gfxmenu serial"
@ -133,6 +139,31 @@ Example usage:
EOF
}
install_ppas() {
while [ $# -gt 0 ]; do
local url=${1}; shift
local gpgkey=${1}; shift;
if [ -n ${gpgkey} ]; then
echo sudo apt-key adv --keyserver keyserver.ubuntu.com --recv ${gpgkey}
fi
echo sudo apt-add-repository -y ${url}
done
return 0
}
remove_ppas() {
while [ $# -gt 0 ]; do
local url=${1}; shift
local gpgkey=${1}; shift;
if [ -n ${gpgkey} ]; then
echo sudo apt-key del ${gpgkey}
fi
echo sudo apt-add-repository --remove ${url}
done
return 0
}
install_deps() {
local packages="$1"
local to_install=""
@ -365,19 +396,6 @@ generate_seed() {
log "Failed to subiquity into $seed";
return 1;
}
log "Writing seed user-data (probert)"
local probert_tar=$dldir/probert.tar
(cd ${dldir}/probert &&
tar -cpf $probert_tar bin probert) || {
log "ERROR: Failed to package probert installer";
return 1;
}
userdata_write_file "/tmp/probert.tar" \
"root:root" "0644" "b64" \
"$probert_tar" >> $seed/user-data || {
log "Failed to subiquity into $seed";
return 1;
}
return 0
}
@ -393,7 +411,7 @@ generate_img() {
local bootloader=${3};
local offline=${4};
local extlinux_conf=${TOPDIR}/resources/menu/extlinux-menu.conf
local apparmor_path=${TOPDIR}/resources/apparmor
local overlay_path=${TOPDIR}/resources/overlay
local grub_efi_core=${TOPDIR}/resources/grub/bootx64.efi # FIXME, ARCH
local grub_conf=${TOPDIR}/resources/grub/grub.cfg
local embed_conf=${TOPDIR}/resources/grub/embed_efi.cfg
@ -526,12 +544,29 @@ generate_img() {
done
sudo mv ${resolvconf} ${resolvconf}.old &&
sudo cp /etc/resolv.conf ${resolvconf} &&
log "Installing ppas in rootfs"
# export existing install_ppa and run it in the chroot
install_ppas_cmds="$(install_ppas ${PPAS[@]})"
sudo chroot ${mnt} /bin/bash -c "${install_ppas_cmds}" || {
log "Failed to add installer ppas to chroot";
return 1;
}
log "Installing on rootfs: $packages"
sudo chroot ${mnt} apt-get update &&
sudo chroot ${mnt} apt-get -y install $packages || {
log "Failed to install packages on rootfs";
return 1;
}
log "Removing ppas in rootfs"
remove_ppas_cmds="$(remove_ppas ${PPAS[@]})"
sudo chroot ${mnt} /bin/bash -c "${remove_ppas_cmds}" || {
log "Failed to remove installer ppas from chroot";
return 1;
}
sudo rm ${resolvconf}
sudo mv ${resolvconf}.old ${resolvconf}
set +x
@ -548,10 +583,10 @@ generate_img() {
cat ${grub_conf} | sudo tee ${efimnt}/boot/grub/grub.cfg && true
fi
# update apparmor policy for dhclient
log "Updating apparmor policies"
sudo rsync -avP ${apparmor_path}/apparmor.d/ ${mnt}/etc/apparmor.d/ || {
log "Failed to sync local apparmor updates";
# syncing overlay
log "Injecting installer configuration/scripts"
sudo rsync -avP ${overlay_path}/ ${mnt}/ || {
log "Failed to sync local installer configuration/scripts";
return 1;
}

View File

@ -0,0 +1,39 @@
#!/bin/bash
LASTCON=$(cat /proc/cmdline | fmt -w 1 | grep ^console= | tail -n 1)
case $LASTCON in
console=ttyS[0-9])
SERIAL="-o --serial"
systemctl stop serial-getty@ttyS0.service
;;
console=tty[0-9])
SERIAL=""
chvt 1
systemctl stop getty@tty1.service;
;;
esac
# generate service file
cat <<EOF >/lib/systemd/system/subiquity.service
[Unit]
Description=Ubuntu Servier Installer Service
After=getty@tty1.service
[Service]
Environment=PYTHONPATH=/usr/local
ExecStart=-/sbin/agetty -n --noclear -l /usr/local/bin/subiquity ${SERIAL} console vt100
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
KillMode=process
Type=idle
Restart=always
StandardInput=tty-force
StandardOutput=tty
StandardError=tty
TTYPath=/dev/console
[Install]
WantedBy=default.target
EOF
systemctl enable subiquity.service
systemctl start subiquity

View File

@ -0,0 +1,6 @@
#!/bin/bash -x
rm -f /etc/network/interfaces
echo -e "auto lo\niface lo inet loopback\n" > /etc/network/interfaces
/bin/ls -1 /sys/class/net | grep -v ^lo$ | xargs -i bash -c 'D={}; echo -e "auto $D\niface $D inet dhcp"' | tee /etc/network/interfaces
/bin/ls -1 /sys/class/net | grep -v ^lo$ | xargs -i ifup {}

View File

@ -1,61 +1,13 @@
#cloud-config
#http_proxy: http://my-proxy:3129/
bootcmd:
- rm -f /etc/network/interfaces
- echo -e "auto lo\niface lo inet loopback\n" > /etc/network/interfaces
- /bin/ls -1 /sys/class/net | grep -v ^lo$ | xargs -i bash -c 'D={}; echo -e "auto $D\niface $D inet dhcp"' | tee /etc/network/interfaces
- /bin/ls -1 /sys/class/net | grep -v ^lo$ | xargs -i ifup {}
- tee -a /etc/modprobe.d/blacklist.conf <<<"blacklist floppy"
- /subiquity/network_up.sh
password: passw0rd
chpasswd: { expire: False }
output: {all: '| tee -a /var/log/cloud-init-output.log'}
#packages
runcmd:
- tar -C /usr/local -xf /tmp/subiquity.tar
- tar -C /usr/local -xf /tmp/probert.tar
- (cd /usr/local && bin/curtin-archive extract --no-execute)
- /tmp/installer.sh
- /subiquity/installer.sh
write_files:
- content: |
#!/bin/bash
LASTCON=$(cat /proc/cmdline | fmt -w 1 | grep ^console= | tail -n 1)
case $LASTCON in
console=ttyS[0-9])
SERIAL="-o --serial"
systemctl stop serial-getty@ttyS0.service
;;
console=tty[0-9])
SERIAL=""
chvt 1
systemctl stop getty@tty1.service;
;;
esac
# generate service file
cat <<EOF >/lib/systemd/system/subiquity.service
[Unit]
Description=Ubuntu Servier Installer Service
After=getty@tty1.service
[Service]
Environment=PYTHONPATH=/usr/local
ExecStart=-/sbin/agetty -n --noclear -l /usr/local/bin/subiquity ${SERIAL} console vt100
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
KillMode=process
Type=idle
Restart=always
StandardInput=tty-force
StandardOutput=tty
StandardError=tty
TTYPath=/dev/console
[Install]
WantedBy=default.target
EOF
systemctl enable subiquity.service
systemctl start subiquity
path: /tmp/installer.sh
owner: root:root
permissions: '0755'