tbase system bootstrap - libdevuansdk - common library for devuan's simple distro kits
 (HTM) git clone https://git.parazyd.org/libdevuansdk
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 70568c2357bf4324c870422b9c21a0e7f72a7717
 (DIR) parent afa49d23cea1f8536e73eee0189c62da36face6f
 (HTM) Author: parazyd <parazyd@dyne.org>
       Date:   Wed,  8 Jun 2016 15:33:54 +0200
       
       base system bootstrap
       
       Diffstat:
         A config                              |      54 +++++++++++++++++++++++++++++++
         M doc/README-configuration.md         |       7 +++++++
         M doc/README-functions.md             |      20 ++++++++++++++++++++
         M libdevuansdk                        |      40 ++++++++++++++++++-------------
         A zlibs/debootstrap                   |     145 +++++++++++++++++++++++++++++++
         A zlibs/helpers                       |      60 +++++++++++++++++++++++++++++++
         A zlibs/sysconf                       |     129 +++++++++++++++++++++++++++++++
       
       7 files changed, 438 insertions(+), 17 deletions(-)
       ---
 (DIR) diff --git a/config b/config
       t@@ -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"
 (DIR) diff --git a/doc/README-configuration.md b/doc/README-configuration.md
       t@@ -0,0 +1,7 @@
       +libdevuansdk configuration
       +--------------------------
       +
       +## Variables
       +
       +### `strapdir`
       +Path to your bootstrap directory (rootfs)
 (DIR) diff --git a/doc/README-functions.md b/doc/README-functions.md
       t@@ -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()
       t@@ -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`
        
 (DIR) diff --git a/libdevuansdk b/libdevuansdk
       t@@ -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"
       t@@ -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
        
 (DIR) diff --git a/zlibs/debootstrap b/zlibs/debootstrap
       t@@ -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}
       +}
 (DIR) diff --git a/zlibs/helpers b/zlibs/helpers
       t@@ -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
       +}
 (DIR) diff --git a/zlibs/sysconf b/zlibs/sysconf
       t@@ -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
       +}