add bootstrap functions
This commit is contained in:
parent
a52e018a44
commit
406ad45004
|
|
@ -0,0 +1,59 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2016 Dyne.org Foundation
|
||||||
|
# libdevuansdk is written and maintained by Ivan J. <parazyd@dyne.org>
|
||||||
|
# with code contributions from KatolaZ <katolaz@freaknet.org>
|
||||||
|
# and Jaromil <jaromil@dyne.org>
|
||||||
|
#
|
||||||
|
# This file is part of libdevuansdk
|
||||||
|
#
|
||||||
|
# This source code is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This software is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this source code. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
## libdevuansdk configuration
|
||||||
|
|
||||||
|
vars+=(release version mirror section)
|
||||||
|
arrs+=(core_packages base_packages system_packages)
|
||||||
|
|
||||||
|
os="devuan"
|
||||||
|
release="jessie"
|
||||||
|
version="1.0.0-beta"
|
||||||
|
mirror="http://packages.devuan.org/merged"
|
||||||
|
section="main"
|
||||||
|
|
||||||
|
core_packages=(
|
||||||
|
devuan_keyring
|
||||||
|
debian_keyring
|
||||||
|
initramfs-tools
|
||||||
|
binutils
|
||||||
|
ca-certificates
|
||||||
|
curl
|
||||||
|
console-common
|
||||||
|
less
|
||||||
|
nano
|
||||||
|
vi
|
||||||
|
)
|
||||||
|
|
||||||
|
base_packages=(
|
||||||
|
bzip2
|
||||||
|
dialog
|
||||||
|
apt-utils
|
||||||
|
fakeroot
|
||||||
|
e2fsprogs
|
||||||
|
parted
|
||||||
|
)
|
||||||
|
|
||||||
|
system_packages=(
|
||||||
|
sysvinit
|
||||||
|
ssh
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2016 Dyne.org Foundation
|
||||||
|
# libdevuansdk is written and maintained by Ivan J. <parazyd@dyne.org>
|
||||||
|
# with code contributions from KatolaZ <katolaz@freaknet.org>
|
||||||
|
# and Jaromil <jaromil@dyne.org>
|
||||||
|
#
|
||||||
|
# This file is part of libdevuansdk
|
||||||
|
#
|
||||||
|
# This source code is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This software is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this source code. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
libdevuansdk_version="0.2-dev"
|
||||||
|
LIBPATH=${LIBPATH:-`dirname $0`}
|
||||||
|
|
||||||
|
source $LIBPATH/config
|
||||||
|
source $LIBPATH/zlibs/bootstrap
|
||||||
|
source $LIBPATH/zlibs/helpers
|
||||||
|
source $LIBPATH/zlibs/sysconf
|
||||||
|
|
||||||
|
vars+=(libdevuansdk_version)
|
||||||
|
vars+=(LIBPATH)
|
||||||
|
|
||||||
|
notice "libdevuansdk-v$libdevuansdk_version loaded"
|
||||||
|
|
@ -0,0 +1,181 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2016 Dyne.org Foundation
|
||||||
|
# libdevuansdk is written and maintained by Ivan J. <parazyd@dyne.org>
|
||||||
|
# with code contributions from KatolaZ <katolaz@freaknet.org>
|
||||||
|
# and Jaromil <jaromil@dyne.org>
|
||||||
|
#
|
||||||
|
# This file is part of libdevuansdk
|
||||||
|
#
|
||||||
|
# This source code is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This software is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this source code. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
vars+=(bootstrap_tgz)
|
||||||
|
|
||||||
|
bootstrap() {
|
||||||
|
fn bootstrap "$@"
|
||||||
|
req=(arch)
|
||||||
|
ckreq || return 1
|
||||||
|
|
||||||
|
notice "bootstrapping $os $arch base"
|
||||||
|
|
||||||
|
bootstrap_tgz="$R/tmp/bootstrap-${os}-${arch}.tgz"
|
||||||
|
|
||||||
|
[[ -f $bootstrap_tgz ]] && {
|
||||||
|
notice "using the existing bootstrap tarball found in $R/tmp"
|
||||||
|
bootstrap_tar_unpack $strapdir || { die "failed to extract"; zerr }
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
notice "running debootstrap stage 1"
|
||||||
|
## deboostrap stage 1
|
||||||
|
sudo debootstrap \
|
||||||
|
--foreign \
|
||||||
|
--arch $arch $release $strapdir $mirror || zerr
|
||||||
|
|
||||||
|
[[ $arch =~ "^arm.." ]] && qemu_install_user
|
||||||
|
|
||||||
|
## debootstrap stage 2
|
||||||
|
notice "running debootstrap stage 2"
|
||||||
|
sudo chroot $strapdir \
|
||||||
|
/debootstrap/debootstrap --second-stage || zerr
|
||||||
|
|
||||||
|
## write all system configuration
|
||||||
|
notice "writing system configuration"
|
||||||
|
conf_print_debconf | sudo tee $strapdir/debconf.set
|
||||||
|
conf_print_fstab | sudo tee $strapdir/etc/fstab
|
||||||
|
conf_print_hostname | sudo tee $strapdir/etc/hostname
|
||||||
|
conf_print_hosts | sudo tee $strapdir/etc/hosts
|
||||||
|
conf_print_networkifaces | sudo tee $strapdir/etc/network/interfaces
|
||||||
|
conf_print_resolvconf | sudo tee $strapdir/etc/resolv.conf
|
||||||
|
conf_print_sourceslist | sudo tee $strapdir/etc/apt/sources.list
|
||||||
|
|
||||||
|
## write third-stage for chroot
|
||||||
|
bootstrap_config_thirdstage | sudo tee $strapdir/thirdstage
|
||||||
|
bootstrap_config_cleanup | sudo tee $strapdir/cleanup
|
||||||
|
sudo chmod +x $strapdir/thirdstage
|
||||||
|
sudo chmod +x $strapdir/cleanup
|
||||||
|
|
||||||
|
## chroot into it and configure further
|
||||||
|
## debootstrap stage 3
|
||||||
|
notice "running debootstrap stage 3"
|
||||||
|
export LANG=C
|
||||||
|
export LC_ALL=C
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
devprocsys mount $strapdir || zerr
|
||||||
|
|
||||||
|
sudo chroot $strapdir /thirdstage || zerr
|
||||||
|
sudo chroot $strapdir /cleanup || zerr
|
||||||
|
|
||||||
|
sleep 1 && devprocsys umount $strapdir || zerr
|
||||||
|
|
||||||
|
bootstrap_tar_pack || zerr
|
||||||
|
}
|
||||||
|
|
||||||
|
bootstrap_config_cleanup() {
|
||||||
|
fn config_cleanup
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
#!/bin/sh
|
||||||
|
rm -f /debconf.set
|
||||||
|
rm -f /thirdstage
|
||||||
|
rm -f /etc/ssh/*_key
|
||||||
|
rm -f /etc/ssh/*.pub
|
||||||
|
rm -f /root/.bash_history
|
||||||
|
## our file for which we check the bootstrap is complete
|
||||||
|
echo "1" > .done
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
bootstrap_config_thirdstage() {
|
||||||
|
fn bootstrap_config_thirdstage
|
||||||
|
req=(core_packages base_packages system_packages)
|
||||||
|
ckreq || return 1
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
#!/bin/sh
|
||||||
|
dpkg-divert --add --local \
|
||||||
|
--divert /usr/sbin/invoke-rc.d.chroot --rename /usr/sbin/invoke-rc.d
|
||||||
|
cp /bin/true /usr/sbin/invoke-rc.d
|
||||||
|
echo -e "#!/bin/sh\nexit 101" > /usr/sbin/policy-rc.d
|
||||||
|
chmod +x /usr/sbin/policy-rc.d
|
||||||
|
|
||||||
|
apt-get update
|
||||||
|
apt-get --yes --force-yes install locales-all
|
||||||
|
debconf-set-selections /debconf.set
|
||||||
|
|
||||||
|
apt-get update
|
||||||
|
apt-get -y install ${core_packages}
|
||||||
|
|
||||||
|
echo "root:${os}" | chpasswd
|
||||||
|
sed -i -e 's/KERNEL\!=\"eth\*|/KERNEL\!=\"/' \
|
||||||
|
/lib/udev/rules.d/75-persistent-net-generator.rules
|
||||||
|
rm -f /etc/udev/rules.d/70-persistent-net.rules
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
apt-get --yes --force-yes install \
|
||||||
|
${base_packages} \
|
||||||
|
${system_packages} \
|
||||||
|
${extra_packages}
|
||||||
|
apt-get --yes --force-yes dist-upgrade
|
||||||
|
apt-get --yes --force-yes autoremove
|
||||||
|
|
||||||
|
apt-get clean
|
||||||
|
|
||||||
|
rm -f /usr/sbin/policy-rc.d
|
||||||
|
rm -f /usr/sbin/invoke-rc.d
|
||||||
|
dpkg-divert --remove --rename /usr/sbin/invoke-rc.d
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
bootstrap_tar_pack() {
|
||||||
|
fn bootstrap_tar_pack
|
||||||
|
req=(bootstrap_tgz)
|
||||||
|
ckreq || return 1
|
||||||
|
|
||||||
|
local _dest=`dirname $bootstrap_tgz`
|
||||||
|
|
||||||
|
if [[ -f $bootstrap_tgz ]]; then
|
||||||
|
act "tarball found already in $_dest"
|
||||||
|
else
|
||||||
|
notice "Creating boostrap tarball in $bootstrap_tgz"
|
||||||
|
silly
|
||||||
|
|
||||||
|
pushd ${strapdir}
|
||||||
|
|
||||||
|
mkdir -p ${_dest}
|
||||||
|
silly
|
||||||
|
sudo tar czf $bootstrap_tgz \
|
||||||
|
--exclude={./boot,./dev,./sys,./proc} \
|
||||||
|
./
|
||||||
|
|
||||||
|
popd
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
bootstrap_tar_unpack() {
|
||||||
|
fn bootstrap_tar_unpack $@
|
||||||
|
local unpath="$1"
|
||||||
|
req=(unpath bootstrap_tgz)
|
||||||
|
ckreq || return 1
|
||||||
|
|
||||||
|
[[ -f ${unpath}/.done ]] && {
|
||||||
|
warning "bootstrap already unpacked in $unpath"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
mkdir -p ${unpath}
|
||||||
|
silly
|
||||||
|
sudo tar xf $bootstrap_tgz -C ${unpath}
|
||||||
|
sudo mkdir -p ${unpath}/{boot,dev,sys,proc}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,83 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2016 Dyne.org Foundation
|
||||||
|
# libdevuansdk is written and maintained by Ivan J. <parazyd@dyne.org>
|
||||||
|
# with code contributions from KatolaZ <katolaz@freaknet.org>
|
||||||
|
# and Jaromil <jaromil@dyne.org>
|
||||||
|
#
|
||||||
|
# This file is part of libdevuansdk
|
||||||
|
#
|
||||||
|
# This source code is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This software is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this source code. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
## helper functions that make your life easier
|
||||||
|
|
||||||
|
devprocsys() {
|
||||||
|
fn devprocsys "$@"
|
||||||
|
local watdo="$1"
|
||||||
|
local werdo="$2"
|
||||||
|
req=(watdo werdo)
|
||||||
|
ckreq || return 1
|
||||||
|
|
||||||
|
if [[ $watdo = mount ]]; then
|
||||||
|
sudo mount -o bind /sys $werdo/sys && act "mounted sys"
|
||||||
|
sudo mount -t proc proc $werdo/proc && act "mounted proc"
|
||||||
|
sudo mount -o bind /dev $werdo/dev && act "mounted dev"
|
||||||
|
sudo mount -o bind /dev/pts $werdo/dev/pts && act "mounted dev/pts"
|
||||||
|
elif [[ $watdo = umount ]]; then
|
||||||
|
sudo umount $werdo/dev/pts && act "umounted dev/pts" && sleep 2
|
||||||
|
sudo umount $werdo/dev && act "umounted dev" && sleep 2
|
||||||
|
sudo umount $werdo/proc && act "umounted proc" && sleep 2
|
||||||
|
sudo umount $werdo/sys && act "umounted sys" && sleep 2
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
silly() {
|
||||||
|
fn silly "$@"
|
||||||
|
local arg1="$1"
|
||||||
|
local arg2="$2"
|
||||||
|
## cheers mailpile!
|
||||||
|
funneh=("do not think of purple hippos"
|
||||||
|
"increasing entropy & scrambling bits"
|
||||||
|
"indexing kittens..."
|
||||||
|
"patching bugs..."
|
||||||
|
"spinning violently around the y-axis"
|
||||||
|
"warming up particle accelerator"
|
||||||
|
"this server is powered by a lemon and two electrodes"
|
||||||
|
"becoming self-aware"
|
||||||
|
"BCC-ing ALL THE SPIES!"
|
||||||
|
"all of your config settings & passwords are encrypted with AES256"
|
||||||
|
"the most common password is 123456, hopefully yours is different"
|
||||||
|
"good things come to those who wait"
|
||||||
|
"Make Free Software and be happy"
|
||||||
|
"We like volcanos, do you like volcanos?"
|
||||||
|
"Crossing out swear words..."
|
||||||
|
"Informing David Cameron of suspicious ac^H^H^H ... naaah :)"
|
||||||
|
"Abandon all hope, ye who enter here"
|
||||||
|
"Compiling bullshit bingo grid..."
|
||||||
|
"Estimating chance of asteroid hitting Earth"
|
||||||
|
"Applying coupons..."
|
||||||
|
"Backing up the entire Internet..."
|
||||||
|
"Making you wait for no reason"
|
||||||
|
"Doing nothing"
|
||||||
|
"Pay no attention to the man behind the curtain"
|
||||||
|
"You are great just the way you are"
|
||||||
|
"Supplying monkeys with typewriters"
|
||||||
|
"Swapping time and space"
|
||||||
|
"Self potato"
|
||||||
|
"it's all lies"
|
||||||
|
"A million hamsters are spinning their wheels right now"
|
||||||
|
)
|
||||||
|
local rnd=$(shuf -i1-30 -n 1)
|
||||||
|
act "${funneh[$rnd]}" ; [[ $arg1 = sleep ]] && sleep $arg2
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,131 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2016 Dyne.org Foundation
|
||||||
|
# libdevuansdk is written and maintained by Ivan J. <parazyd@dyne.org>
|
||||||
|
# with code contributions from KatolaZ <katolaz@freaknet.org>
|
||||||
|
# and Jaromil <jaromil@dyne.org>
|
||||||
|
#
|
||||||
|
# This file is part of libdevuansdk
|
||||||
|
#
|
||||||
|
# This source code is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This software is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this source code. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
## default system configurations
|
||||||
|
|
||||||
|
conf_print_debconf() {
|
||||||
|
fn conf_print_debconf
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
console-common console-data/keymap/policy select Select keymap from full list
|
||||||
|
console-common console-data/keymap/full select en-latin1-nodeadkeys
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
conf_print_fstab() {
|
||||||
|
fn conf_print_fstab
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
#<file system> <mount point> <type> <options> <dump> <pass>
|
||||||
|
proc /proc proc nodev,noexec,nosuid 0 0
|
||||||
|
|
||||||
|
# rootfs
|
||||||
|
/dev/sda2 / ext4 errors=remount-ro 0 1
|
||||||
|
|
||||||
|
# boot
|
||||||
|
/dev/sda1 /boot ext2 noauto 0 0
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
conf_print_hostname() {
|
||||||
|
fn conf_print_hostname
|
||||||
|
req=(os)
|
||||||
|
ckreq || return 1
|
||||||
|
|
||||||
|
print $os
|
||||||
|
}
|
||||||
|
|
||||||
|
conf_print_hosts() {
|
||||||
|
fn conf_print_hosts
|
||||||
|
req=(os)
|
||||||
|
ckreq || return 1
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
127.0.0.1 ${os} localhost
|
||||||
|
::1 localhost ip6-localhost ip6-loopback
|
||||||
|
fe00::0 ip6-localnet
|
||||||
|
fe00::0 ip6-mcastprefix
|
||||||
|
fe02::1 ip6-allnodes
|
||||||
|
fe02::1 ip6-allrouters
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
conf_print_networkifaces() {
|
||||||
|
fn conf_print_networkifaces
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
# interfaces(5) file used by ifup(8) and ifdown(8)
|
||||||
|
|
||||||
|
# Please note that this file is written to be used with dhcpcd
|
||||||
|
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
|
||||||
|
|
||||||
|
# Include files from /etc/network/interfaces.d:
|
||||||
|
source-directory /etc/network/interfaces.d
|
||||||
|
|
||||||
|
auto lo
|
||||||
|
iface lo inet loopback
|
||||||
|
|
||||||
|
auto eth0
|
||||||
|
iface eth0 inet dhcp
|
||||||
|
|
||||||
|
# auto eth0
|
||||||
|
# iface eth0 inet static
|
||||||
|
# address 10.0.1.10
|
||||||
|
# netmask 255.255.255.0
|
||||||
|
|
||||||
|
# allow-hotplug wlan0
|
||||||
|
# iface wlan0 inet manual
|
||||||
|
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
|
||||||
|
|
||||||
|
# allow-hotplug wlan1
|
||||||
|
# iface wlan1 inet manual
|
||||||
|
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
conf_print_resolvconf() {
|
||||||
|
fn conf_print_resolvconf
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
## google's nameservers
|
||||||
|
nameserver 8.8.8.8
|
||||||
|
nameserver 8.8.4.4
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
conf_print_sourceslist() {
|
||||||
|
fn conf_print_sourceslist
|
||||||
|
req=(mirror release section)
|
||||||
|
ckreq || return 1
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
## package repositories
|
||||||
|
deb ${mirror} ${release} ${section}
|
||||||
|
deb ${mirror} ${release}-updates ${section}
|
||||||
|
deb ${mirror} ${release}-security ${section}
|
||||||
|
|
||||||
|
## source repositories
|
||||||
|
# deb-src ${mirror} ${release} ${section}
|
||||||
|
# deb-src ${mirror} ${release}-updates ${section}
|
||||||
|
# deb-src ${mirror} ${release}-security ${section}
|
||||||
|
EOF
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue