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