316 lines
7.6 KiB
Bash
316 lines
7.6 KiB
Bash
#!/usr/bin/env zsh
|
|
# Copyright (c) 2016 Dyne.org Foundation
|
|
# libdevuansdk is maintained by Ivan J. <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 my life easier
|
|
|
|
build_image_dist() {
|
|
fn build_image_dist
|
|
req=(arch size parted_type)
|
|
if [[ $parted_type = gpt ]]; then
|
|
req+=(gpt_boot gpt_root)
|
|
elif [[ $parted_type = dos ]]; then
|
|
req+=(parted_root parted_boot)
|
|
fi
|
|
req+=(workdir strapdir image_name)
|
|
ckreq || return 1
|
|
|
|
notice "building complete dist image"
|
|
act "$image_name"
|
|
|
|
## TODO: add blend_prebuild; blend_midbuild; blend_postbuild
|
|
|
|
bootstrap_complete_base || zerr
|
|
[[ $BLEND = 1 ]] && blend_preinst || zerr
|
|
image_prepare_raw || zerr
|
|
image_partition_raw_${parted_type} || zerr
|
|
build_kernel_${arch} || zerr
|
|
[[ $BLEND = 1 ]] && blend_postinst || zerr
|
|
rsync_to_raw_image || zerr
|
|
image_pack_dist || zerr
|
|
}
|
|
|
|
build_iso_dist() {
|
|
fn build_iso_dist
|
|
req=(workdir strapdir os arch)
|
|
ckreq || return 1
|
|
|
|
notice "building complete iso image"
|
|
|
|
bootstrap_complete_base || zerr
|
|
[[ $BLEND = 1 ]] && blend_preinst || zerr
|
|
iso_prepare_strap || zerr
|
|
build_kernel_${arch} || zerr
|
|
iso_setup_isolinux || zerr
|
|
iso_write_isolinux_cfg || zerr
|
|
[[ $INSTALLER = 1 ]] && iso_setup_installer
|
|
[[ $BLEND = 1 ]] && blend_postinst || zerr
|
|
iso_squash_strap || zerr
|
|
iso_xorriso_build || zerr
|
|
}
|
|
|
|
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 devpts" && \
|
|
return 0
|
|
elif [[ $watdo = umount ]]; then
|
|
sudo umount $werdo/dev/pts && act "umounted devpts" && sleep 1 && \
|
|
sudo umount $werdo/dev && act "umounted dev" && sleep 1 && \
|
|
sudo umount $werdo/proc && act "umounted proc" && sleep 1 && \
|
|
sudo umount $werdo/sys && act "umounted sys" && sleep 1 && \
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
findloopmapp() {
|
|
fn findloopmapp
|
|
req=(workdir image_name)
|
|
ckreq || return 1
|
|
|
|
notice "finding a free loopdevice"
|
|
|
|
loopdevice=$(sudo losetup -f --show $workdir/${image_name}.img)
|
|
mappdevice=$(sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | sed 1q)
|
|
func "loopdevice: $loopdevice"
|
|
func "mappdevice: $mappdevice"
|
|
|
|
silly sleep 4
|
|
}
|
|
|
|
qemu_install_user() {
|
|
fn qemu_install_user
|
|
req=(qemu_bin strapdir)
|
|
ckreq || return 1
|
|
|
|
notice "installing qemu-user-static"
|
|
sudo cp $qemu_bin $strapdir/usr/bin
|
|
}
|
|
|
|
dpkgdivert() {
|
|
fn dpkgdivert $@
|
|
req=(watdo werdo)
|
|
local watdo="$1"
|
|
local werdo="$2"
|
|
ckreq || return 1
|
|
|
|
if [[ $watdo = on ]]; then
|
|
cat <<EOF | sudo tee ${werdo}/dpkgdivert
|
|
#!/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
|
|
rm -f /dpkgdivert
|
|
EOF
|
|
elif [[ $watdo = off ]]; then
|
|
cat <<EOF | sudo tee ${werdo}/dpkgdivert
|
|
#!/bin/sh
|
|
rm -f /usr/sbin/policy-rc.d
|
|
rm -f /usr/sbin/invoke-rc.d
|
|
dpkg-divert --remove --rename /usr/sbin/invoke-rc.d
|
|
rm -f /dpkgdivert
|
|
EOF
|
|
fi
|
|
|
|
chroot-script dpkgdivert || zerr
|
|
}
|
|
|
|
enableserv() {
|
|
fn enableserv "$@"
|
|
local service="$1"
|
|
req=(service strapdir)
|
|
ckreq || return 1
|
|
|
|
cat <<EOF | sudo tee -a ${strapdir}/enserv
|
|
#!/bin/sh
|
|
update-rc.d ${service} enable
|
|
EOF
|
|
|
|
notice "enabling $service service"
|
|
chroot-script enserv
|
|
}
|
|
|
|
disableserv() {
|
|
fn disableserv "$@"
|
|
local service="$1"
|
|
req=(service strapdir)
|
|
ckreq || return 1
|
|
|
|
cat <<EOF | sudo tee -a ${strapdir}/disserv
|
|
#!/bin/sh
|
|
update-rc.d ${service} disable
|
|
EOF
|
|
|
|
notice "disabling $service service"
|
|
chroot-script disserv
|
|
}
|
|
|
|
enablessh() {
|
|
fn enablessh
|
|
req=(strapdir)
|
|
ckreq || return 1
|
|
|
|
cat <<EOF | sudo tee -a ${strapdir}/enssh
|
|
#!/bin/sh
|
|
sed -i -e 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
|
|
update-rc.d ssh enable
|
|
update-rc.d regensshkeys defaults
|
|
update-rc.d regensshkeys enable
|
|
rm -f /enssh
|
|
EOF
|
|
|
|
cat <<EOF | sudo tee ${strapdir}/etc/init.d/regensshkeys
|
|
#!/bin/sh
|
|
#
|
|
### BEGIN INIT INFO
|
|
# Provides: something
|
|
# Required-Start: \$syslog
|
|
# Required-Stop: \$syslog
|
|
# Default-Start: 2 3 4 5
|
|
# Default-Stop: 0 1 6
|
|
# Short-Description: Regenerate openssh-server keys
|
|
# Description: Regenerate openssh-server keys
|
|
### END INIT INFO
|
|
#
|
|
set -e
|
|
set -u
|
|
|
|
genkeys() {
|
|
/usr/sbin/service ssh stop
|
|
/usr/sbin/dpkg-reconfigure openssh-server
|
|
/usr/sbin/service ssh start
|
|
/usr/sbin/update-rc.d regensshkeys disable
|
|
}
|
|
|
|
case "\$1" in
|
|
start)
|
|
genkeys;;
|
|
stop)
|
|
;;
|
|
*)
|
|
echo "usage: \$(basename \$0) {start}"
|
|
;;
|
|
esac
|
|
EOF
|
|
|
|
sudo chmod +x $strapdir/etc/init.d/regensshkeys
|
|
|
|
chroot-script -d enssh
|
|
}
|
|
|
|
install-custdebs() {
|
|
fn install-custdebs
|
|
req=(R strapdir)
|
|
ckreq || return 1
|
|
|
|
sudo mkdir -p $strapdir/debs
|
|
sudo cp $CPVERBOSE -f $R/extra/custom-packages/*.deb $strapdir/debs/
|
|
|
|
cat <<EOF | sudo tee ${strapdir}/install-debs
|
|
#!/bin/sh
|
|
for deb in /debs/*.deb; do
|
|
dpkg -i \$deb
|
|
apt-get --yes --force-yes -f install
|
|
done
|
|
apt-get autoremove
|
|
apt-get clean
|
|
rm -rf /debs install-debs
|
|
EOF
|
|
chroot-script install-debs
|
|
}
|
|
|
|
chroot-script() {
|
|
fn chroot-script "$@"
|
|
|
|
case "x$1" in
|
|
x-d)
|
|
shift 1
|
|
local scripts="$@"
|
|
|
|
dpkgdivert on $strapdir
|
|
for i in $scripts; do
|
|
notice "chrooting to execute $i..."
|
|
sudo chmod +x $strapdir/$i
|
|
sudo -E chroot $strapdir /$i
|
|
done
|
|
dpkgdivert off $strapdir
|
|
;;
|
|
*)
|
|
local scripts="$@"
|
|
|
|
for i in $scripts; do
|
|
notice "chrooting to execute $i..."
|
|
sudo chmod +x $strapdir/$i
|
|
sudo -E chroot $strapdir /$i
|
|
done
|
|
;;
|
|
esac
|
|
}
|
|
|
|
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"
|
|
"god is porco"
|
|
"A million hamsters are spinning their wheels right now"
|
|
)
|
|
local rnd=$(shuf -i1-30 -n 1)
|
|
act "${funneh[$rnd]}" ; [[ $arg1 = sleep ]] && sleep $arg2
|
|
}
|