Merge pull request #51 from CanonicalLtd/switch-to-packages
Switch to packages
This commit is contained in:
commit
d4aad9fab0
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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 {}
|
|
@ -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'
|
||||
|
|
Loading…
Reference in New Issue