base system bootstrap

This commit is contained in:
parazyd 2016-06-08 15:33:54 +02:00
parent afa49d23ce
commit 70568c2357
No known key found for this signature in database
GPG Key ID: F0CB28FCF78637DE
7 changed files with 438 additions and 17 deletions

54
config Normal file
View File

@ -0,0 +1,54 @@
#!/usr/bin/env zsh
#
# Copyright (c) 2016 Dyne.org Foundation
# libdevuansdk is written and maintained by
# Jaromil <jaromil@dyne.org>
# KatolaZ <katolaz@freaknet.org>
# parazyd <parazyd@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/>.
## Distro-specific settings
# os name
os="devuan"
# release name
release="jessie"
# release version
version="1.0.0-beta2"
# mirror url
mirror="http://packages.devuan.org/merged"
# mirror repo section
section="main"
# core packages for the system
core_packages=(devuan-keyring debian-keyring)
core_packages+=(git-core binutils ca-certificates curl)
core_packages+=(locales console-common less nano vim)
# base packages for the system
base_packages=(bzip2 dialog apt-utils fakeroot e2fsprogs parted)
# other system packages
system_packages=(sysvinit ssh)
## libdevuansdk-specific settings
workdir="$R/workdir"
strapdir="${workdir}/strapdir"

View File

@ -0,0 +1,7 @@
libdevuansdk configuration
--------------------------
## Variables
### `strapdir`
Path to your bootstrap directory (rootfs)

View File

@ -1,6 +1,23 @@
libdevuansdk functions
----------------------
# zlibs/debootstrap
## bootstrap()
Stages 1, 2, and 3 of debootstrap.
## config_cleanup()
Final cleanup of the rootfs.
## config_thirdstage()
Shell script for the system's third debootstrap stage.
## tar_bootstrap()
Make a tarball of a base working system, ready to be worked on later.
## tar_unpack()
Unpack the tarball of a base working system to the strapdir.
# zlibs/helpers
## escalate()
@ -41,6 +58,9 @@ Prints default `/etc/hosts`
## conf_print_networkifaces()
Prints the `/etc/network/interfaces` file
## conf_print_resolvconf()
Prints the `/etc/resolv.conf` file.
## conf_print_sourceslist()
Prints default `/etc/apt/sources.list`

View File

@ -1,32 +1,34 @@
#!/usr/bin/env zsh
#
# Copyright (C) 2012-2016 Dyne.org Foundation
# Copyright (c) 2016 Dyne.org Foundation
# libdevuansdk is written and maintained by
# Jaromil <jaromil@dyne.org>
# KatolaZ <katolaz@freaknet.org>
# parazyd <parazyd@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 Public License
# as published by the Free Software Foundation; either
# version 3 of the License, or (at your option) any later
# version.
# 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 source code 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. Please refer to the GNU Public License for more
# details.
# 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 Public License
# along with this source code; if not, write to: Free
# Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
# 02139, USA.
# 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/>.
devuan_sdk_version=0.1
# export DOWSE_PREFIX and DOWSE_HOME to override
R=${SDK_PREFIX:-/usr/local/devuan-sdk}
H=${SDK_HOME:-$HOME/.devuan-sdk}
E=${SDK_CONF:-/etc/devuan-sdk}
R=`pwd` # NOTE: for development
[[ -r $R ]] || {
print "Devuan SDK is not installed in: $R"
print "export SDK_PREFIX if installed on a different path"
@ -48,13 +50,17 @@ LOG=${LOG:-""}
vars+=(R H E)
# source $R/zlibs/library
source $R/config
source $R/zlibs/debootstrap
source $R/zlibs/helpers
source $R/zlibs/sysconf
# conclude initialization
if [[ -r $R/zuper/zuper.init ]]; then
source $R/zuper/zuper.init
else source ./zuper/zuper.init; fi
# add all other dowse binaries to the path
# add all other binaries to the path
path+=($R/bin)
rehash

145
zlibs/debootstrap Normal file
View File

@ -0,0 +1,145 @@
#!/usr/bin/env zsh
#
# Copyright (c) 2016 Dyne.org Foundation
# libdevuansdk is written and maintained by
# Jaromil <jaromil@dyne.org>
# KatolaZ <katolaz@freaknet.org>
# parazyd <parazyd@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/>.
## Debootstrap things
bootstrap() {
fn bootstrap $@
arch="$1"
req=(os strapdir workdir arch release mirror)
ckreq || return 1
notice "Bootstrapping ${os} base"
mkdir -p ${strapdir}
if [[ -f $R/tmp/${os}-${arch}.tgz ]]; then
tar_unpack ${strapdir}
else
# Debootstrap stage 1
escalate "root" "debootstrap --foreign --arch ${arch} ${release} ${strapdir} ${mirror}"
# Debootstrap stage 2
escalate "root" "chroot ${strapdir} /debootstrap/debootstrap --second-stage"
# write all system configuration
conf_print_debconf | escalate "root" "tee ${strapdir}/debconf.set"
conf_print_fstab | escalate "root" "tee ${strapdir}/etc/fstab"
conf_print_hostname | escalate "root" "tee ${strapdir}/etc/hostname"
conf_print_hosts | escalate "root" "tee ${strapdir}/etc/hosts"
conf_print_networkifaces | escalate "root" "tee ${strapdir}/etc/network/interfaces"
conf_print_resolvconf | escalate "root" "tee ${strapdir}/etc/resolv.conf"
conf_print_sourceslist | escalate "root" "tee ${strapdir}/etc/apt/sources.list"
# write third-stage for chroot
config_thirdstage | escalate "root" "tee ${strapdir}/thirdstage.sh"
config_cleanup | escalate "root" "tee ${strapdir}/cleanup.sh"
escalate "root" "chmod +x ${strapdir}/thirdstage.sh"
escalate "root" "chmod +x ${strapdir}/cleanup.sh"
# chroot into it and configure further
# Debootstrap stage 3
export LC_ALL=C
export DEBIAN_FRONTEND=noninteractive
mountdevproc ${strapdir}
escalate "root" "chroot ${strapdir} /thirdstage.sh"
umountdevproc ${strapdir}
tar_bootstrap
fi
}
config_cleanup() {
fn config_cleanup
cat << EOF
#!/bin/sh
rm -f /debconf.set
rm -f /thirdstage.sh
EOF
}
config_thirdstage() {
fn 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:devuan" | 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}
apt-get --yes --force-yes install ${system_packages}
apt-get --yes --force-yes dist-upgrade
apt-get --yes --force-yes autoremove
rm -f /usr/sbin/policy-rc.d
rm -f /usr/sbin/invoke-rc.d
dpkg-divert --remove --rename /usr/sbin/invoke-rc.d
EOF
}
tar_bootstrap() {
fn tar_bootstrap
if [[ -f $R/tmp/${os}-${arch}.tgz ]]; then
return 0
else
pushd ${strapdir}
tar czf ${os}-${arch}.tgz ./*
mkdir -p $R/tmp
mv ${os}-${arch}.tgz $R/tmp/
popd
fi
}
tar_unpack() {
fn tar_unpack $@
local unpath="$1"
req=(unpath)
ckreq || return 1
tar xf $R/tmp/${os}-${arch}.tgz -C ${unpath}
}

60
zlibs/helpers Normal file
View File

@ -0,0 +1,60 @@
#!/usr/bin/env zsh
#
# Copyright (c) 2016 Dyne.org Foundation
# libdevuansdk is written and maintained by
# Jaromil <jaromil@dyne.org>
# KatolaZ <katolaz@freaknet.org>
# parazyd <parazyd@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
escalate() {
fn escalate $@
local user="$1"
local cmnd="$2"
req=(user cmnd)
ckreq || return 1
if [[ `command -v sudo` ]]; then
sudo -E -u ${user} ${cmnd}
else
su -c ${cmnd} ${user}
fi
}
mountdevproc() {
fn mountdevproc $@
strapdir="$1"
req=(strapdir)
ckreq || return 1
escalate "root" "mount -t proc proc ${strapdir}/proc" && act "mounted /proc"
escalate "root" "mount -o bind /dev ${strapdir}/dev" && act "mounted /dev"
escalate "root" "mount -o bind /dev/pts ${strapdir}/dev/pts" && act "mounted /dev/pts"
}
umountdevproc() {
fn umountdevproc $@
strapdir="$1"
req=(strapdir)
ckreq || return 1
escalate "root" "umount ${strapdir}/dev/pts" && act "unmounted /dev/pts" && sleep 2
escalate "root" "umount ${strapdir}/dev" && act "unmounted /dev" && sleep 2
escalate "root" "umount ${strapdir}/proc" && act "unmounted /proc" && sleep 2
}

129
zlibs/sysconf Normal file
View File

@ -0,0 +1,129 @@
#!/usr/bin/env zsh
#
# Copyright (c) 2016 Dyne.org Foundation
# libdevuansdk is written and maintained by
# Jaromil <jaromil@dyne.org>
# KatolaZ <katolaz@freaknet.org>
# parazyd <parazyd@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 configuration
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
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
deb ${mirror} ${release} ${section}
deb ${mirror} ${release}-updates ${section}
deb ${mirror} ${release}-security ${section}
deb-src ${mirror} ${release} ${section}
deb-src ${mirror} ${release}-updates ${section}
deb-src ${mirror} ${release}-security ${section}
EOF
}