Add support for plugins, move all distribution-specific code there
While at it, also change name of local repo to pkgs-for-tmplate (was yum_repo_qubes).
This commit is contained in:
parent
518b0a39da
commit
3092bb2d71
6
.gitignore
vendored
6
.gitignore
vendored
@ -1,11 +1,7 @@
|
||||
*~
|
||||
appmenus
|
||||
build_timestamp_*
|
||||
cache_*
|
||||
mnt_*
|
||||
*.iso
|
||||
*.fs
|
||||
*.img
|
||||
install-templates.sh
|
||||
yum_repo_qubes/*
|
||||
scripts_fedora/base_rpms_fc21/*
|
||||
pkgs-for-template/*
|
||||
|
24
Makefile
24
Makefile
@ -3,24 +3,21 @@ $(error "You must set DIST variable, e.g. DIST=fc14")
|
||||
endif
|
||||
export DIST
|
||||
|
||||
dist_ver := $(shell DIST=$(DIST) ./builder_setup)
|
||||
DISTRIBUTION := $(word 1,$(dist_ver))
|
||||
DIST_VERSION := $(word 2,$(dist_ver))
|
||||
TEMPLATE_NAME := $(word 3,$(dist_ver))
|
||||
TEMPLATE_BUILDER = 1
|
||||
-include $(addsuffix /Makefile.builder,$(BUILDER_PLUGINS_DIRS))
|
||||
|
||||
ifeq (,$(TEMPLATE_NAME))
|
||||
TEMPLATE_NAME := $(DISTRIBUTION)-$(DIST_VERSION)-x64
|
||||
TEMPLATE_NAME := $(DIST)
|
||||
ifdef TEMPLATE_FLAVOR
|
||||
TEMPLATE_NAME := $(TEMPLATE_NAME)-$(TEMPLATE_FLAVOR)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Make sure names are < 32 characters, process aliases
|
||||
fix_up := $(shell TEMPLATE_NAME=$(TEMPLATE_NAME) ./builder_fix_filenames)
|
||||
TEMPLATE_NAME := $(word 1,$(fix_up))
|
||||
|
||||
export DISTRIBUTION
|
||||
export TEMPLATE_NAME
|
||||
export TEMPLATE_SCRIPTS
|
||||
export DISTRIBUTION
|
||||
|
||||
VERSION := $(shell cat version)
|
||||
TIMESTAMP := $(shell date -u +%Y%m%d%H%M)
|
||||
@ -32,7 +29,7 @@ help:
|
||||
|
||||
|
||||
prepare:
|
||||
@echo $(TIMESTAMP) > build_timestamp_$(DIST)
|
||||
@echo $(TIMESTAMP) > build_timestamp_$(TEMPLATE_NAME)
|
||||
|
||||
rpms: prepare rootimg-build
|
||||
@echo "Building template: $(TEMPLATE_NAME)"
|
||||
@ -40,7 +37,10 @@ rpms: prepare rootimg-build
|
||||
./create_template_list.sh || :
|
||||
|
||||
rootimg-build:
|
||||
sudo -E ./prepare_image prepared_images/$(TEMPLATE_NAME).img && \
|
||||
ifeq (,$(TEMPLATE_SCRIPTS))
|
||||
$(error Building template $(DIST) not supported by any of configured plugins)
|
||||
endif
|
||||
sudo -E ./prepare_image prepared_images/$(TEMPLATE_NAME).img
|
||||
sudo -E ./qubeize_image prepared_images/$(TEMPLATE_NAME).img $(TEMPLATE_NAME)
|
||||
|
||||
update-repo-installer:
|
||||
@ -48,8 +48,8 @@ update-repo-installer:
|
||||
ln -f rpm/noarch/qubes-template-$(TEMPLATE_NAME)-$(VERSION)-$(shell cat build_timestamp_$(DIST))*.noarch.rpm $$UPDATE_REPO/rpm
|
||||
|
||||
prepare-repo-template:
|
||||
rm -rf yum_repo_qubes/$(DIST)
|
||||
mkdir -p yum_repo_qubes/$(DIST)/rpm yum_repo_qubes/$(DIST)/repodata
|
||||
rm -rf pkgs-for-template/$(DIST)
|
||||
mkdir -p pkgs-for-template/$(DIST)
|
||||
|
||||
clean:
|
||||
sudo rm -fr qubeized_images/root.img.*
|
||||
|
@ -1 +0,0 @@
|
||||
gnome-terminal.desktop
|
@ -1,5 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
nautilus.desktop
|
||||
firefox.desktop
|
||||
mozilla-thunderbird.desktop
|
||||
libreoffice-startcenter.desktop
|
@ -1,6 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-prefs.desktop
|
||||
gpk-update-viewer.desktop
|
||||
system-config-date.desktop
|
||||
system-config-printer.desktop
|
@ -1 +0,0 @@
|
||||
gnome-terminal.desktop
|
@ -1,5 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
nautilus.desktop
|
||||
firefox.desktop
|
||||
mozilla-thunderbird.desktop
|
||||
libreoffice-startcenter.desktop
|
@ -1,6 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-prefs.desktop
|
||||
gpk-update-viewer.desktop
|
||||
system-config-date.desktop
|
||||
system-config-printer.desktop
|
@ -1 +0,0 @@
|
||||
gnome-terminal.desktop
|
@ -1,3 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
nautilus.desktop
|
||||
firefox.desktop
|
@ -1,5 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-prefs.desktop
|
||||
system-config-date.desktop
|
||||
system-config-printer.desktop
|
@ -1 +0,0 @@
|
||||
xterm.desktop
|
@ -1 +0,0 @@
|
||||
xterm.desktop
|
@ -1 +0,0 @@
|
||||
xterm.desktop
|
@ -1 +0,0 @@
|
||||
gnome-terminal.desktop
|
@ -1,3 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
nautilus.desktop
|
||||
firefox.desktop
|
@ -1,5 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-prefs.desktop
|
||||
system-config-date.desktop
|
||||
system-config-printer.desktop
|
@ -1 +0,0 @@
|
||||
xterm.desktop
|
@ -1 +0,0 @@
|
||||
xterm.desktop
|
@ -1 +0,0 @@
|
||||
xterm.desktop
|
@ -1 +0,0 @@
|
||||
gnome-terminal.desktop
|
@ -1,5 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
org.gnome.Nautilus.desktop
|
||||
iceweasel.desktop
|
||||
icedove.desktop
|
||||
yelp.desktop
|
@ -1,6 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-update-viewer.desktop
|
||||
gpk-prefs.desktop
|
||||
gpk-log.desktop
|
||||
yelp.desktop
|
@ -1 +0,0 @@
|
||||
gnome-terminal.desktop
|
@ -1,16 +0,0 @@
|
||||
evolution.desktop
|
||||
gimp.desktop
|
||||
yelp.desktop
|
||||
iceweasel.desktop
|
||||
eog.desktop
|
||||
rhythmbox.desktop
|
||||
gnome-system-log.desktop
|
||||
gnome-terminal.desktop
|
||||
gnome-calculator.desktop
|
||||
org.gnome.Cheese.desktop
|
||||
org.gnome.Nautilus.desktop
|
||||
org.gnome.gedit.desktop
|
||||
shotwell.desktop
|
||||
org.gnome.Totem.desktop
|
||||
libreoffice-startcenter.desktop
|
||||
session-properties.desktop
|
@ -1,10 +0,0 @@
|
||||
gdebi.desktop
|
||||
yelp.desktop
|
||||
gpk-log.desktop
|
||||
gpk-prefs.desktop
|
||||
gpk-update-viewer.desktop
|
||||
gpk-application.desktop
|
||||
gnome-printers-panel.desktop
|
||||
tracker-preferences.desktop
|
||||
gnome-system-log.desktop
|
||||
gnome-terminal.desktop
|
@ -1 +0,0 @@
|
||||
gnome-terminal.desktop
|
@ -1,5 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
firefox.desktop
|
||||
thunderbird.desktop
|
||||
nautilus.desktop
|
||||
yelp.desktop
|
@ -1,6 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-update-viewer.desktop
|
||||
gpk-prefs.desktop
|
||||
gpk-log.desktop
|
||||
yelp.desktop
|
@ -1 +0,0 @@
|
||||
gnome-terminal.desktop
|
@ -1,5 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
firefox.desktop
|
||||
thunderbird.desktop
|
||||
nautilus.desktop
|
||||
yelp.desktop
|
@ -1,6 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-update-viewer.desktop
|
||||
gpk-prefs.desktop
|
||||
gpk-log.desktop
|
||||
yelp.desktop
|
@ -1 +0,0 @@
|
||||
gnome-terminal.desktop
|
@ -1,5 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
firefox.desktop
|
||||
thunderbird.desktop
|
||||
nautilus.desktop
|
||||
yelp.desktop
|
@ -1,6 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-update-viewer.desktop
|
||||
gpk-prefs.desktop
|
||||
gpk-log.desktop
|
||||
yelp.desktop
|
@ -1 +0,0 @@
|
||||
gnome-terminal.desktop
|
@ -1,5 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
firefox.desktop
|
||||
thunderbird.desktop
|
||||
nautilus.desktop
|
||||
yelp.desktop
|
@ -1,6 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-update-viewer.desktop
|
||||
gpk-prefs.desktop
|
||||
gpk-log.desktop
|
||||
yelp.desktop
|
@ -1 +0,0 @@
|
||||
gnome-terminal.desktop
|
@ -1,5 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
firefox.desktop
|
||||
thunderbird.desktop
|
||||
nautilus.desktop
|
||||
yelp.desktop
|
@ -1,6 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-update-viewer.desktop
|
||||
gpk-prefs.desktop
|
||||
gpk-log.desktop
|
||||
yelp.desktop
|
@ -1 +0,0 @@
|
||||
gnome-terminal.desktop
|
@ -1,5 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
firefox.desktop
|
||||
thunderbird.desktop
|
||||
nautilus.desktop
|
||||
yelp.desktop
|
@ -1,6 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-update-viewer.desktop
|
||||
gpk-prefs.desktop
|
||||
gpk-log.desktop
|
||||
yelp.desktop
|
@ -1 +0,0 @@
|
||||
gnome-terminal.desktop
|
@ -1,5 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
iceweasel.desktop
|
||||
icedove.desktop
|
||||
nautilus.desktop
|
||||
yelp.desktop
|
@ -1,6 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-update-viewer.desktop
|
||||
gpk-prefs.desktop
|
||||
gpk-log.desktop
|
||||
yelp.desktop
|
@ -1 +0,0 @@
|
||||
gnome-terminal.desktop
|
@ -1,15 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gcalctool.desktop
|
||||
evolution.desktop
|
||||
nautilus.desktop
|
||||
iceweasel.desktop
|
||||
libreoffice-startcenter.desktop
|
||||
gedit.desktop
|
||||
gimp.desktop
|
||||
eog.desktop
|
||||
totem.desktop
|
||||
rhythmbox.desktop
|
||||
gnome-system-log.desktop
|
||||
cheese.desktop
|
||||
session-properties.desktop
|
||||
yelp.desktop
|
@ -1,11 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-update-viewer.desktop
|
||||
gpk-prefs.desktop
|
||||
gpk-log.desktop
|
||||
gnome-panel.desktop
|
||||
gnome-printers-panel.desktop
|
||||
gnome-system-log.desktop
|
||||
gdebi.desktop
|
||||
tracker-preferences.desktop
|
||||
yelp.desktop
|
@ -1,16 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-update-viewer.desktop
|
||||
gpk-prefs.desktop
|
||||
gpk-log.desktop
|
||||
yelp.desktop
|
||||
gateway-firewall30default.desktop
|
||||
gateway-firewall50user.desktop
|
||||
gateway-torrc.desktop
|
||||
gateway-torrcexamples.desktop
|
||||
gateway-firewall30default.desktop
|
||||
gateway-firewall50user.desktop
|
||||
gateway-firsttimesetup.desktop
|
||||
gateway-torrc.desktop
|
||||
gateway-torrcexamples.desktop
|
||||
whonix_repository.desktop
|
@ -1,10 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
nautilus.desktop
|
||||
yelp.desktop
|
||||
gateway-arm.desktop
|
||||
gateway-reloadfirewall.desktop
|
||||
gateway-reloadtor.desktop
|
||||
gateway-restarttor.desktop
|
||||
gateway-stoptor.desktop
|
||||
timesync.desktop
|
||||
whonixcheck.desktop
|
@ -1,16 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-update-viewer.desktop
|
||||
gpk-prefs.desktop
|
||||
gpk-log.desktop
|
||||
yelp.desktop
|
||||
gateway-firewall30default.desktop
|
||||
gateway-firewall50user.desktop
|
||||
gateway-torrc.desktop
|
||||
gateway-torrcexamples.desktop
|
||||
gateway-firewall30default.desktop
|
||||
gateway-firewall50user.desktop
|
||||
gateway-firsttimesetup.desktop
|
||||
gateway-torrc.desktop
|
||||
gateway-torrcexamples.desktop
|
||||
whonix_repository.desktop
|
@ -1 +0,0 @@
|
||||
gnome-terminal.desktop
|
@ -1,14 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
nautilus.desktop
|
||||
yelp.desktop
|
||||
anondist-torbrowser.desktop
|
||||
timesync.desktop
|
||||
whonixcheck.desktop
|
||||
whonix-contribute.desktop
|
||||
whonix-documentation.desktop
|
||||
whonix-donate.desktop
|
||||
whonix-featureblog.desktop
|
||||
whonix-forum.desktop
|
||||
whonix-importantblog.desktop
|
||||
whonix-irc-chat-support.desktop
|
||||
whonix-mailinglist.desktop
|
@ -1,12 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-update-viewer.desktop
|
||||
gpk-prefs.desktop
|
||||
gpk-log.desktop
|
||||
yelp.desktop
|
||||
gnome-panel.desktop
|
||||
gnome-printers-panel.desktop
|
||||
gnome-system-log.desktop
|
||||
tracker-preferences.desktop
|
||||
anondist-torbrowser_update.desktop
|
||||
whonix_repository.desktop
|
@ -1 +0,0 @@
|
||||
gnome-terminal.desktop
|
@ -1,22 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
nautilus.desktop
|
||||
gcalctool.desktop
|
||||
evolution.desktop
|
||||
libreoffice-startcenter.desktop
|
||||
gimp.desktop
|
||||
eog.desktop
|
||||
totem.desktop
|
||||
shotwell.desktop
|
||||
rhythmbox.desktop
|
||||
anondist-torbrowser.desktop
|
||||
timesync.desktop
|
||||
whonixcheck.desktop
|
||||
whonix-contribute.desktop
|
||||
whonix-documentation.desktop
|
||||
whonix-donate.desktop
|
||||
whonix-featureblog.desktop
|
||||
whonix-forum.desktop
|
||||
whonix-importantblog.desktop
|
||||
whonix-irc-chat-support.desktop
|
||||
whonix-mailinglist.desktop
|
||||
yelp.desktop
|
@ -1,14 +0,0 @@
|
||||
gnome-terminal.desktop
|
||||
gpk-application.desktop
|
||||
gpk-update-viewer.desktop
|
||||
gpk-prefs.desktop
|
||||
gpk-log.desktop
|
||||
gpk-application.desktop
|
||||
gpk-update-viewer.desktop
|
||||
gpk-prefs.desktop
|
||||
gnome-panel.desktop
|
||||
gnome-printers-panel.desktop
|
||||
gnome-system-log.desktop
|
||||
tracker-preferences.desktop
|
||||
anondist-torbrowser_update.desktop
|
||||
yelp.desktop
|
@ -11,8 +11,6 @@ fi
|
||||
rpmbuild --target noarch \
|
||||
--define "template_name $NAME" \
|
||||
--define "DIST $DIST" \
|
||||
--define "DISTRIBUTION $DISTRIBUTION" \
|
||||
--define "VERSION $VERSION" \
|
||||
--define "_topdir $PWD/rpmbuild" \
|
||||
--define "_tmppath $PWD/rpmbuild/tmp" \
|
||||
-bb templates.spec
|
||||
|
@ -2,44 +2,14 @@
|
||||
|
||||
# Setup env variables
|
||||
|
||||
case "$DIST" in
|
||||
fc*)
|
||||
DISTRIBUTION=fedora
|
||||
VERSION=${DIST/fc/}
|
||||
;;
|
||||
wheezy)
|
||||
DISTRIBUTION=debian
|
||||
VERSION=7
|
||||
;;
|
||||
jessie)
|
||||
DISTRIBUTION=debian
|
||||
VERSION=8
|
||||
;;
|
||||
trusty)
|
||||
DISTRIBUTION=qubuntu
|
||||
VERSION=14.04
|
||||
;;
|
||||
utopic)
|
||||
DISTRIBUTION=qubuntu
|
||||
VERSION=14.10
|
||||
;;
|
||||
vivid)
|
||||
DISTRIBUTION=qubuntu
|
||||
VERSION=15.04
|
||||
;;
|
||||
*)
|
||||
DISTRIBUTION="$DIST"
|
||||
VERSION=
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -d "scripts_$DIST" ]; then
|
||||
SCRIPTSDIR="scripts_$DIST"
|
||||
else
|
||||
SCRIPTSDIR="scripts_$DISTRIBUTION"
|
||||
SCRIPTSDIR=$TEMPLATE_SCRIPTS
|
||||
if [ ! -d "$SCRIPTSDIR" ]; then
|
||||
echo "Scripts directory $SCRIPTSDIR does not exists"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
CACHEDIR=cache_$DIST
|
||||
if [ -z "$CACHEDIR" ]; then
|
||||
CACHEDIR=cache_$DIST
|
||||
fi
|
||||
|
||||
export SCRIPTSDIR CACHEDIR
|
||||
echo $DISTRIBUTION $VERSION
|
||||
|
Binary file not shown.
@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">
|
||||
<comps>
|
||||
<group>
|
||||
<id>qubes-vm</id>
|
||||
<name>Qubes Environment</name>
|
||||
<default>true</default>
|
||||
<packagelist>
|
||||
<packagereq type="mandatory">qubes-core-vm-systemd</packagereq>
|
||||
<packagereq type="mandatory">qubes-core-vm</packagereq>
|
||||
<packagereq type="mandatory">qubes-gui-vm</packagereq>
|
||||
<packagereq type="mandatory">xen-libs</packagereq>
|
||||
<packagereq type="mandatory">xen-qubes-vm-essentials</packagereq>
|
||||
<packagereq type="default">qubes-doc-vm</packagereq>
|
||||
<packagereq type="optional">thunderbird-qubes</packagereq>
|
||||
<packagereq type="optional">qubes-pdf-converter</packagereq>
|
||||
<packagereq type="optional">qubes-gpg-split</packagereq>
|
||||
</packagelist>
|
||||
</group>
|
||||
</comps>
|
@ -10,15 +10,15 @@ RETCODE=0
|
||||
|
||||
: ${DIST=fc14}
|
||||
|
||||
. ./builder_setup >/dev/null
|
||||
. ./umount_kill.sh >/dev/null
|
||||
|
||||
if [ "${VERBOSE}" -ge 2 -o "${DEBUG}" == "1" ]; then
|
||||
set -x
|
||||
else
|
||||
set -e
|
||||
fi
|
||||
|
||||
. ./builder_setup >/dev/null
|
||||
. ./umount_kill.sh >/dev/null
|
||||
|
||||
if ! [ $# -eq 1 ]; then
|
||||
echo "usage ${0} <img_file_name>"
|
||||
exit
|
||||
|
@ -78,10 +78,12 @@ export INSTALLDIR=mnt
|
||||
# ------------------------------------------------------------------------------
|
||||
echo "--> Choosing appmenus whitelists..."
|
||||
rm -f appmenus
|
||||
if [ -d "appmenus_${DIST}_${TEMPLATE_FLAVOR}" ]; then
|
||||
ln -s "appmenus_${DIST}_${TEMPLATE_FLAVOR}" appmenus
|
||||
elif [ -d "appmenus_$DIST" ]; then
|
||||
ln -s "appmenus_$DIST" appmenus
|
||||
if [ -d "${SCRIPTSDIR}/appmenus_${DIST}_${TEMPLATE_FLAVOR}" ]; then
|
||||
ln -s "${SCRIPTSDIR}/appmenus_${DIST}_${TEMPLATE_FLAVOR}" appmenus
|
||||
elif [ -d "${SCRIPTSDIR}/appmenus_$DIST" ]; then
|
||||
ln -s "${SCRIPTSDIR}/appmenus_$DIST" appmenus
|
||||
elif [ -d "${SCRIPTSDIR}/appmenus" ]; then
|
||||
ln -s "${SCRIPTSDIR}/appmenus" appmenus
|
||||
else
|
||||
ln -s "appmenus_generic" appmenus
|
||||
fi
|
||||
@ -91,17 +93,12 @@ fi
|
||||
# ------------------------------------------------------------------------------
|
||||
echo "--> Linking /home to /rw/home..."
|
||||
mv mnt/home mnt/home.orig
|
||||
ln -sf /rw/home mnt/home
|
||||
mkdir mnt/home
|
||||
|
||||
echo "--> Linking /usr/local to /rw/usrlocal..."
|
||||
mv mnt/usr/local mnt/usr/local.orig
|
||||
ln -sf /rw/usrlocal mnt/usr/local
|
||||
|
||||
if [ -e mnt/etc/sysconfig/i18n ]; then
|
||||
echo "--> Setting up default locale..."
|
||||
echo LC_CTYPE=en_US.UTF-8 > mnt/etc/sysconfig/i18n
|
||||
fi
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Finsh - unmount image
|
||||
# ------------------------------------------------------------------------------
|
||||
@ -112,3 +109,4 @@ echo "Qubeized image stored at: $IMG"
|
||||
|
||||
echo "Reducing image size (calling cleanup_image)..."
|
||||
./cleanup_image "$IMG"
|
||||
chown -R --reference=. qubeized_images/$NAME
|
||||
|
1
qubeized_images/.gitignore
vendored
1
qubeized_images/.gitignore
vendored
@ -1 +0,0 @@
|
||||
*
|
@ -1,25 +0,0 @@
|
||||
#!/bin/sh
|
||||
ISO_VERSION=`date +%Y.%m`.01
|
||||
|
||||
mkdir -p $CACHEDIR
|
||||
|
||||
echo "Downloading Archlinux dvd..."
|
||||
wget -N -P $CACHEDIR "http://mir.archlinux.fr/iso/$ISO_VERSION/archlinux-$ISO_VERSION-dual.iso"
|
||||
wget -N -P $CACHEDIR "http://mir.archlinux.fr/iso/$ISO_VERSION/archlinux-$ISO_VERSION-dual.iso.sig"
|
||||
|
||||
echo "Verifying dvd..."
|
||||
gpg --import "$SCRIPTSDIR/archlinux-master-keys.asc"
|
||||
|
||||
gpg --verify "$CACHEDIR/archlinux-$ISO_VERSION-dual.iso.sig" "$CACHEDIR/archlinux-$ISO_VERSION-dual.iso" || exit
|
||||
|
||||
if [ "$CACHEDIR/archlinux-$ISO_VERSION-dual.iso" -nt $CACHEDIR/root-image.fs ]; then
|
||||
echo "Extracting squash filesystem from DVD..."
|
||||
mkdir mnt_archlinux_dvd
|
||||
mount -o loop "$CACHEDIR/archlinux-$ISO_VERSION-dual.iso" mnt_archlinux_dvd || echo "!!Error mounting iso to mnt_archlinux_dvd"
|
||||
cp mnt_archlinux_dvd/arch/x86_64/airootfs.sfs $CACHEDIR/ || echo "!!Error copying root sfs file to \$CACHEDIR"
|
||||
umount mnt_archlinux_dvd
|
||||
mount -o loop $CACHEDIR/airootfs.sfs mnt_archlinux_dvd || echo "!!Error mounting root sfs"
|
||||
cp mnt_archlinux_dvd/airootfs.img $CACHEDIR/ || echo "!!Error copying root fs file"
|
||||
umount mnt_archlinux_dvd
|
||||
rm $CACHEDIR/airootfs.sfs
|
||||
fi
|
@ -1,38 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
echo "Mounting archlinux install system into mnt_archlinux_dvd..."
|
||||
mkdir -p mnt_archlinux_dvd
|
||||
mount $CACHEDIR/airootfs.img mnt_archlinux_dvd
|
||||
|
||||
echo "Fix bug intruduced in arch-chroot causing arguments not to be passed"
|
||||
sed "s/unshare --fork --pid//" -i mnt_archlinux_dvd/usr/bin/arch-chroot
|
||||
|
||||
echo "Fix chroot cannot be umounted because of gpg-agent started by pacman"
|
||||
sed "/chroot_umount() {/a pkill gpg-agent" -i mnt_archlinux_dvd/usr/bin/arch-chroot
|
||||
cat mnt_archlinux_dvd/usr/bin/arch-chroot
|
||||
|
||||
echo "Creating chroot bootstrap environment"
|
||||
|
||||
mount --bind $INSTALLDIR mnt_archlinux_dvd/mnt
|
||||
cp /etc/resolv.conf mnt_archlinux_dvd/etc
|
||||
|
||||
echo "-> Initializing pacman keychain"
|
||||
# Note: pacman-key starts gpg-agent automatically, which locks /dev
|
||||
./mnt_archlinux_dvd/usr/bin/arch-chroot mnt_archlinux_dvd/ pacman-key --init
|
||||
./mnt_archlinux_dvd/usr/bin/arch-chroot mnt_archlinux_dvd/ pacman-key --populate
|
||||
|
||||
echo "-> Installing core pacman packages..."
|
||||
./mnt_archlinux_dvd/usr/bin/arch-chroot mnt_archlinux_dvd/ sh -c 'pacstrap /mnt base'
|
||||
|
||||
echo "--> Removing non required linux kernel (can be added manually through a package)"
|
||||
./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Rsc linux
|
||||
|
||||
echo "-> Cleaning up bootstrap environment"
|
||||
|
||||
umount mnt_archlinux_dvd/mnt
|
||||
|
||||
umount mnt_archlinux_dvd
|
||||
|
||||
cp $SCRIPTSDIR/resolv.conf $INSTALLDIR/etc
|
@ -1,27 +0,0 @@
|
||||
#!/bin/sh
|
||||
if [ -n "${TEMPLATE_FLAVOR}" ]; then
|
||||
PKGLISTFILE="$SCRIPTSDIR/packages_${TEMPLATE_FLAVOR}.list"
|
||||
if ! [ -r "${PKGLISTFILE}" ]; then
|
||||
echo "ERROR: ${PKGLISTFILE} does not exists!"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
PKGLISTFILE="$SCRIPTSDIR/packages.list"
|
||||
fi
|
||||
|
||||
set -e
|
||||
|
||||
echo "Mounting archlinux install system into mnt_archlinux_dvd..."
|
||||
mount $CACHEDIR/airootfs.img mnt_archlinux_dvd
|
||||
|
||||
echo "Fix bug intruduced in arch-chroot causing arguments not to be passed"
|
||||
sed "s/unshare --fork --pid//" -i mnt_archlinux_dvd/usr/bin/arch-chroot
|
||||
|
||||
PKGGROUPS=`cat $PKGLISTFILE`
|
||||
|
||||
echo "-> Installing archlinux package groups..."
|
||||
echo "-> Selected packages:"
|
||||
echo "$PKGGROUPS"
|
||||
./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --needed --noconfirm -S $PKGGROUPS
|
||||
|
||||
umount mnt_archlinux_dvd
|
@ -1,77 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
echo "Mounting archlinux install system into mnt_archlinux_dvd..."
|
||||
mkdir -p mnt_archlinux_dvd
|
||||
mount $CACHEDIR/airootfs.img mnt_archlinux_dvd
|
||||
|
||||
echo "Fix bug intruduced in arch-chroot causing arguments not to be passed"
|
||||
sed "s/unshare --fork --pid//" -i mnt_archlinux_dvd/usr/bin/arch-chroot
|
||||
|
||||
# Note: Enable x86 repos
|
||||
su -c "echo '[multilib]' >> $INSTALLDIR/etc/pacman.conf"
|
||||
su -c "echo 'SigLevel = PackageRequired' >> $INSTALLDIR/etc/pacman.conf"
|
||||
su -c "echo 'Include = /etc/pacman.d/mirrorlist' >> $INSTALLDIR/etc/pacman.conf"
|
||||
|
||||
echo "--> Registering Qubes custom repository"
|
||||
|
||||
cat >> $INSTALLDIR/etc/pacman.conf <<EOF
|
||||
[qubes] # QubesTMP
|
||||
SigLevel = Optional TrustAll # QubesTMP
|
||||
Server = file:///mnt/qubes-rpms-mirror-repo/pkgs # QubesTMP
|
||||
EOF
|
||||
|
||||
export CUSTOMREPO=$PWD/yum_repo_qubes/archlinux
|
||||
mkdir -p $INSTALLDIR/mnt/qubes-rpms-mirror-repo
|
||||
mount --bind $CUSTOMREPO $INSTALLDIR/mnt/qubes-rpms-mirror-repo
|
||||
|
||||
./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "cd /mnt/qubes-rpms-mirror-repo/;repo-add pkgs/qubes.db.tar.gz pkgs/*.pkg.tar.xz"
|
||||
|
||||
chown -R --reference=$CUSTOMREPO $CUSTOMREPO
|
||||
|
||||
./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "pacman -Sy"
|
||||
|
||||
echo "--> Installing qubes-packages..."
|
||||
./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "pacman -S --noconfirm qubes-vm-xen"
|
||||
./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "pacman -S --noconfirm qubes-vm-core"
|
||||
./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "pacman -S --noconfirm qubes-vm-gui"
|
||||
|
||||
echo "--> Updating template fstab file..."
|
||||
cat >> $INSTALLDIR/etc/fstab <<EOF
|
||||
/dev/mapper/dmroot / ext4 defaults,noatime 1 1
|
||||
/dev/xvdb /rw ext4 defaults,noatime 1 2
|
||||
/dev/xvdc1 swap swap defaults 0 0
|
||||
/rw/home /home none noauto,bind,defaults 0 0
|
||||
EOF
|
||||
|
||||
echo "--> Configuring system to our preferences"
|
||||
# Name network devices using simple names (ethX)
|
||||
ln -s /dev/null $INSTALLDIR/etc/udev/rules.d/80-net-name-slot.rules
|
||||
# Initialize encoding to qubes standards
|
||||
ln -s /etc/sysconfig/i18n $INSTALLDIR/etc/locale.conf
|
||||
# Enable some locales (incl. UTF-8
|
||||
sed 's/#en_US/en_US/g' -i $INSTALLDIR/etc/locale.gen
|
||||
./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "locale-gen"
|
||||
|
||||
# Creating a random file in /lib/modules to ensure that the directory in never deleted when packages are removed
|
||||
mkdir -p $INSTALLDIR/lib/modules
|
||||
touch $INSTALLDIR/lib/modules/QUBES
|
||||
|
||||
# Ensure os-release is setup correctly or Fedora dracut will fail when displaying the OS
|
||||
# also ensure that the path is relative, because root is in /newroot before dracut switch root
|
||||
ln -s ../usr/lib/os-release $INSTALLDIR/etc/os-release
|
||||
|
||||
# Disable qubes local repository
|
||||
sed '/QubesTMP/d' -i $INSTALLDIR/etc/pacman.conf
|
||||
|
||||
# Reregistering qubes repository to the remote version
|
||||
echo "--> Registering Qubes remote repository"
|
||||
cat >> $INSTALLDIR/etc/pacman.conf <<EOF
|
||||
[qubes]
|
||||
Server = http://olivier.medoc.free.fr/archlinux/pkgs/
|
||||
EOF
|
||||
|
||||
echo "--> Cleaning up..."
|
||||
umount $INSTALLDIR/mnt/qubes-rpms-mirror-repo
|
||||
umount mnt_archlinux_dvd
|
@ -1,37 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
echo "Mounting archlinux install system into mnt_archlinux_dvd..."
|
||||
mount $CACHEDIR/airootfs.img mnt_archlinux_dvd
|
||||
|
||||
echo "Fix bug intruduced in arch-chroot causing arguments not to be passed"
|
||||
sed "s/unshare --fork --pid//" -i mnt_archlinux_dvd/usr/bin/arch-chroot
|
||||
|
||||
echo "--> Starting cleanup actions"
|
||||
# Remove unused packages and their dependencies (make dependencies)
|
||||
cleanuppkgs=`./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman -Qdt | grep -v kernel | cut -d " " -f 1`
|
||||
echo "--> Packages that can be cleaned up: $cleanuppkgs"
|
||||
if [ -n "$cleanuppkgs" ] ; then
|
||||
./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Rsc $cleanuppkgs
|
||||
fi
|
||||
|
||||
# Remove video plugins
|
||||
echo "--> Removing video plugins"
|
||||
VIDEOPKGS=`./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman -Qs -q xf86-video`
|
||||
echo $VIDEOPKGS | ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Rsc -
|
||||
|
||||
# Remove other font package
|
||||
./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Rsc xorg-fonts-100dpi xorg-fonts-75dpi
|
||||
|
||||
# Clean pacman cache
|
||||
./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Scc
|
||||
|
||||
umount mnt_archlinux_dvd
|
||||
|
||||
#rm -f $INSTALLDIR/var/lib/rpm/__db.00* $INSTALLDIR/var/lib/rpm/.rpm.lock
|
||||
#yum -c $PWD/yum.conf $YUM_OPTS clean packages --installroot=$INSTALLDIR
|
||||
|
||||
# Make sure that rpm database has right format (for rpm version in template, not host)
|
||||
#echo "--> Rebuilding rpm database..."
|
||||
#chroot `pwd`/mnt /bin/rpm --rebuilddb 2> /dev/null
|
@ -1,411 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.13 (GNU/Linux)
|
||||
|
||||
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
|
||||
k+m723VE00SsX6k2+K4kMloWiALRvwFBEiXalOjQ8JJZ5Qom/eudwxGLtwoQn+g0
|
||||
lD5FppMPILTIG///////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////
|
||||
////////////iQIcBBABAgAGBQJO3LhzAAoJELod+2T/+XnnaQgQALWwLfHCi/9Q
|
||||
FLHXgQ5+QYnpoJoxvsgC0iosmgjmB1MMXK+rwMqAZtgr3cajBJ+XNq7XZriFliFV
|
||||
4oXHiFdR3zjjuvvIJhYn51079YKhZV2tQqZt9NO+rvns2fMwx2iXMou1+g7byOUp
|
||||
inIkNXtTi3i3HxX+4nKjL3Hk42Qdf+wRFLSl3+DpIx9qrB5ReL8XYhMvlCodjNWP
|
||||
UNi3LcsLEl47+m4qBSBmQb0mvy1oobaNLXT8+0cT5UHQAqQkB1LIWcC8Hek0iJ4o
|
||||
TjwpmU/36NH71fif6ypDWU28pbuRxHvXjrYuSi4C++110ShQdTEMe2wt9MpRIkp3
|
||||
0aIfWUCq6uCmUR5DO8QJM3CPtwlpEzXIXojp4ALfKOYx5xg1UOGxILErCE4O4EYz
|
||||
QM7pLBqFvMg3rdEu7vrnRrilzHZVWPeeXbJG+uzYbhicydh4UULF2Hz6L/vMEJ/i
|
||||
rxdELV/h8fykJKE5wFigxZL1VgmWMIAISGZ+N4Npr19u1UmT3GyM4q+ImLOubWHU
|
||||
3VqVGs5alZQWZvi72sYEKUBqUY7/wfIvFPdXJ4BCPJZqxSCuLy5mpLEeaGpnhFSB
|
||||
gZHzBwwPyvl3Zc9P21rJD0p8NbMp+shCteWfadMnmBfLGkHUhP6rGZk7g2cjuFas
|
||||
Tndpuv8+lS9NipNt6uejrg/G+NWFAEH5uQENBE2heeUBCADDxPCizcrOhH12RbIk
|
||||
8enSsrbATbQnSgpU3DHF76j2gVItsBzpfjYgQCeD5KasXuFmFFph2pY73qCuoDQx
|
||||
FTo4gJNZt90/oV7C/vPEwMY5MkHdK2bB3BlZznshkpHNmWRBKvCrHJ09jZxmCICe
|
||||
NymhMyAYBGWM7MTCzEsKk9CuplxF5QApCbWwtlZVpgxra90MzBVlQT+ErXiLlXt8
|
||||
RG673RlGeFpOdxWK4USbr1AvqYxMV6Y4s/mKpcAJQBdL5IeRT8BnaG5mVjS0UgN8
|
||||
MeN6c+NlvfnFBZF9XFZXfFJ1QrDaneyT181guKB4apxmvtyXxD9OYdW/EXGbGpdb
|
||||
F3OxABEBAAGJAR8EGAECAAkFAk2heeUCGwwACgkQfy1DS5dB6Ky85gf9HtPMsnJI
|
||||
qizJd5s2oRkpYxPiyLKpq+0lH2R+yPo1Qyt7zpR1SV8iSVDaTiaxfF4BwZQz0Qt0
|
||||
FnIprzWuIw2FjElE/tVFH+Fw9SW5t31ly+v/jXa+iGcMXIblDX5I0gqffXVJRGzZ
|
||||
zPQDV0Yv4zyP/2Hsv0F250N2N8/cZqPaX5J0dKrOhDmi5yc5WoYJzzZVzXRuXwzC
|
||||
ncn0ymZteOGwcaW4kmaTQPb33idmTE89pXnskgQFpftAdvPw9Qf/zjVhTtFX95wt
|
||||
oNPcYOtMIARp/OejazBHaRW+NIWyCvj78MRoy9s0TOAzwcyOCWpjzHuPvslg/U0H
|
||||
ErbDGhNsa8/dnA==
|
||||
=TmI0
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
@ -1 +0,0 @@
|
||||
NETWORKING=yes
|
@ -1,25 +0,0 @@
|
||||
xorg
|
||||
xterm
|
||||
python2
|
||||
artwiz-fonts
|
||||
ethtool
|
||||
font-bitstream-speedo
|
||||
net-tools
|
||||
sudo
|
||||
ttf-dejavu
|
||||
ttf-freefont
|
||||
wget
|
||||
zsh
|
||||
networkmanager
|
||||
network-manager-applet
|
||||
linux-firmware
|
||||
gnome-settings-daemon
|
||||
gvfs
|
||||
lxappearance
|
||||
gtk-engines
|
||||
firefox
|
||||
thunderbird
|
||||
xfce4-terminal
|
||||
leafpad
|
||||
thunar
|
||||
thunar-volman
|
@ -1,8 +0,0 @@
|
||||
xorg
|
||||
xterm
|
||||
python2
|
||||
sudo
|
||||
wget
|
||||
zsh
|
||||
ethtool
|
||||
net-tools
|
Binary file not shown.
@ -1 +0,0 @@
|
||||
# This file intentionally left blank
|
@ -1,82 +0,0 @@
|
||||
#!/bin/bash -e
|
||||
# vim: set ts=4 sw=4 sts=4 et :
|
||||
|
||||
# Source external scripts
|
||||
source "${SCRIPTSDIR}/vars.sh"
|
||||
source "${SCRIPTSDIR}/distribution.sh"
|
||||
|
||||
INSTALLDIR="$(readlink -m mnt)"
|
||||
|
||||
# Make sure ${INSTALLDIR} is not mounted
|
||||
umount_all "${INSTALLDIR}" || true
|
||||
|
||||
# ==============================================================================
|
||||
# Execute any template flavor or sub flavor 'pre' scripts
|
||||
# ==============================================================================
|
||||
buildStep "${0}" "pre"
|
||||
|
||||
# ==============================================================================
|
||||
# Use a snapshot of the debootstraped debian image
|
||||
# ==============================================================================
|
||||
manage_snapshot() {
|
||||
local snapshot="${1}"
|
||||
|
||||
umount_kill "${INSTALLDIR}" || true
|
||||
mount -o loop "${IMG}" "${INSTALLDIR}" || exit 1
|
||||
|
||||
# Remove old snapshots if groups completed
|
||||
if [ -e "${INSTALLDIR}/${TMPDIR}/.prepared_groups" ]; then
|
||||
outputc stout "Removing stale snapshots"
|
||||
umount_kill "${INSTALLDIR}" || true
|
||||
rm -rf "${debootstrap_snapshot}"
|
||||
rm -rf "${packages_snapshot}"
|
||||
return
|
||||
fi
|
||||
|
||||
outputc stout "Replacing ${IMG} with snapshot ${snapshot}"
|
||||
umount_kill "${INSTALLDIR}" || true
|
||||
cp -f "${snapshot}" "${IMG}"
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Determine if a snapshot should be used, reuse an existing image or
|
||||
# delete the existing image to start fresh based on configuration options
|
||||
#
|
||||
# SNAPSHOT=1 - Use snapshots; Will remove after successful build
|
||||
# If debootstrap did not complete, the existing image will be deleted
|
||||
# ==============================================================================
|
||||
splitPath "${IMG}" path_parts
|
||||
packages_snapshot="${path_parts[dir]}${path_parts[base]}-packages${path_parts[dotext]}"
|
||||
debootstrap_snapshot="${path_parts[dir]}${path_parts[base]}-debootstrap${path_parts[dotext]}"
|
||||
|
||||
if [ -f "${IMG}" ]; then
|
||||
if [ -f "${packages_snapshot}" -a "${SNAPSHOT}" == "1" ]; then
|
||||
# Use 'packages' snapshot
|
||||
manage_snapshot "${packages_snapshot}"
|
||||
|
||||
elif [ -f "${debootstrap_snapshot}" -a "${SNAPSHOT}" == "1" ]; then
|
||||
# Use 'debootstrap' snapshot
|
||||
manage_snapshot "${debootstrap_snapshot}"
|
||||
|
||||
else
|
||||
# Use '$IMG' if debootstrap did not fail
|
||||
mount -o loop "${IMG}" "${INSTALLDIR}" || exit 1
|
||||
|
||||
# Assume a failed debootstrap installation if .prepared_debootstrap does not exist
|
||||
if [ -e "${INSTALLDIR}/${TMPDIR}/.prepared_debootstrap" ]; then
|
||||
debug "Reusing existing image ${IMG}"
|
||||
else
|
||||
outputc stout "Removing stale or incomplete ${IMG}"
|
||||
umount_kill "${INSTALLDIR}" || true
|
||||
rm -f "${IMG}"
|
||||
fi
|
||||
|
||||
# Umount image; don't fail if its already umounted
|
||||
umount_kill "${INSTALLDIR}" || true
|
||||
fi
|
||||
fi
|
||||
|
||||
# ==============================================================================
|
||||
# Execute any template flavor or sub flavor 'post' scripts
|
||||
# ==============================================================================
|
||||
buildStep "${0}" "post"
|
@ -1,61 +0,0 @@
|
||||
#!/bin/bash -e
|
||||
# vim: set ts=4 sw=4 sts=4 et :
|
||||
|
||||
# Source external scripts
|
||||
source "${SCRIPTSDIR}/vars.sh"
|
||||
source "${SCRIPTSDIR}/distribution.sh"
|
||||
|
||||
##### '-------------------------------------------------------------------------
|
||||
debug ' Installing base system using debootstrap'
|
||||
##### '-------------------------------------------------------------------------
|
||||
|
||||
# ==============================================================================
|
||||
# Execute any template flavor or sub flavor 'pre' scripts
|
||||
# ==============================================================================
|
||||
buildStep "${0}" "pre"
|
||||
|
||||
if ! [ -f "${INSTALLDIR}/${TMPDIR}/.prepared_debootstrap" ]; then
|
||||
#### "------------------------------------------------------------------
|
||||
info " $(templateName): Installing base '${DISTRIBUTION}-${DIST}' system"
|
||||
#### "------------------------------------------------------------------
|
||||
COMPONENTS="" debootstrap \
|
||||
--arch=amd64 \
|
||||
--include="ncurses-term locales tasksel" \
|
||||
--components=main \
|
||||
--keyring="${SCRIPTSDIR}/keys/${DIST}-${DISTRIBUTION}-archive-keyring.gpg" \
|
||||
"${DIST}" "${INSTALLDIR}" "${DEBIAN_MIRROR}" || {
|
||||
error "Debootstrap failed!";
|
||||
exit 1;
|
||||
}
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Configure keyboard'
|
||||
#### '----------------------------------------------------------------------
|
||||
configureKeyboard
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Update locales'
|
||||
#### '----------------------------------------------------------------------
|
||||
updateLocale
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info 'Link mtab'
|
||||
#### '----------------------------------------------------------------------
|
||||
chroot rm -f /etc/mtab
|
||||
chroot ln -s /proc/self/mounts /etc/mtab
|
||||
|
||||
# TMPDIR is set in vars. /tmp should not be used since it will be cleared
|
||||
# if building template with LXC contaniners on a reboot
|
||||
mkdir -p "${INSTALLDIR}/${TMPDIR}"
|
||||
|
||||
# Mark section as complete
|
||||
touch "${INSTALLDIR}/${TMPDIR}/.prepared_debootstrap"
|
||||
|
||||
# If SNAPSHOT=1, Create a snapshot of the already debootstraped image
|
||||
createSnapshot "debootstrap"
|
||||
fi
|
||||
|
||||
# ==============================================================================
|
||||
# Execute any template flavor or sub flavor 'post' scripts
|
||||
# ==============================================================================
|
||||
buildStep "${0}" "post"
|
@ -1,84 +0,0 @@
|
||||
#!/bin/bash -e
|
||||
# vim: set ts=4 sw=4 sts=4 et :
|
||||
|
||||
source "${SCRIPTSDIR}/vars.sh"
|
||||
source "${SCRIPTSDIR}/distribution.sh"
|
||||
|
||||
##### "=========================================================================
|
||||
debug " Configuring and Installing packages for ${DIST}"
|
||||
##### "=========================================================================
|
||||
|
||||
# If .prepared_debootstrap has not been completed, don't continue
|
||||
exitOnNoFile "${INSTALLDIR}/${TMPDIR}/.prepared_debootstrap" "prepared_debootstrap installataion has not completed!... Exiting"
|
||||
|
||||
# Create system mount points
|
||||
prepareChroot
|
||||
|
||||
# Make sure there is a resolv.conf with network of this AppVM for building
|
||||
createResolvConf
|
||||
|
||||
# ==============================================================================
|
||||
# Execute any template flavor or sub flavor 'pre' scripts
|
||||
# ==============================================================================
|
||||
buildStep "${0}" "pre"
|
||||
|
||||
# ==============================================================================
|
||||
# Configure base system and install any adddtional packages which could
|
||||
# include +TEMPLATE_FLAVOR such as gnome as set in configuration file
|
||||
# ==============================================================================
|
||||
if ! [ -f "${INSTALLDIR}/${TMPDIR}/.prepared_groups" ]; then
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Trap ERR and EXIT signals and cleanup (umount)'
|
||||
#### '----------------------------------------------------------------------
|
||||
trap cleanup ERR
|
||||
trap cleanup EXIT
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info 'Install standard Debian packages'
|
||||
#### '----------------------------------------------------------------------
|
||||
if ! [ -f "${INSTALLDIR}/${TMPDIR}/.debian_packages" ]; then
|
||||
packages="$(chroot tasksel --new-install --task-packages standard)"
|
||||
aptInstall ${packages}
|
||||
touch "${INSTALLDIR}/${TMPDIR}/.debian_packages"
|
||||
fi
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Distribution specific steps (install systemd, add sources, etc)'
|
||||
#### '----------------------------------------------------------------------
|
||||
buildStep "$0" "${DIST}"
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info " Installing extra packages in script_${DIST}/packages.list file"
|
||||
#### '----------------------------------------------------------------------
|
||||
installPackages
|
||||
createSnapshot "packages"
|
||||
touch "${INSTALLDIR}/${TMPDIR}/.prepared_packages"
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Execute any template flavor or sub flavor scripts after packages are installed'
|
||||
#### '----------------------------------------------------------------------
|
||||
buildStep "$0" "packages_installed"
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' apt-get dist-upgrade'
|
||||
#### '----------------------------------------------------------------------
|
||||
aptDistUpgrade
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Cleanup'
|
||||
#### '----------------------------------------------------------------------
|
||||
touch "${INSTALLDIR}/${TMPDIR}/.prepared_groups"
|
||||
trap - ERR EXIT
|
||||
trap
|
||||
fi
|
||||
|
||||
# ==============================================================================
|
||||
# Execute any template flavor or sub flavor 'post' scripts
|
||||
# ==============================================================================
|
||||
buildStep "${0}" "post"
|
||||
|
||||
# ==============================================================================
|
||||
# Kill all processes and umount all mounts within ${INSTALLDIR}, but not
|
||||
# ${INSTALLDIR} itself (extra '/' prevents ${INSTALLDIR} from being umounted)
|
||||
# ==============================================================================
|
||||
umount_all "${INSTALLDIR}/" || true
|
@ -1,36 +0,0 @@
|
||||
#!/bin/bash -e
|
||||
# vim: set ts=4 sw=4 sts=4 et :
|
||||
|
||||
source "${SCRIPTSDIR}/vars.sh"
|
||||
source "${SCRIPTSDIR}/distribution.sh"
|
||||
|
||||
##### "=========================================================================
|
||||
debug " Installing custom packages and customizing ${DIST}"
|
||||
##### "=========================================================================
|
||||
|
||||
#### '--------------------------------------------------------------------------
|
||||
info ' Adding contrib, non-free and Debian security to repository.'
|
||||
#### '--------------------------------------------------------------------------
|
||||
updateDebianSourceList
|
||||
aptUpdate
|
||||
|
||||
##### '=========================================================================
|
||||
debug ' Replacing sysvinit with systemd'
|
||||
##### '=========================================================================
|
||||
|
||||
#### '--------------------------------------------------------------------------
|
||||
info ' Remove sysvinit'
|
||||
#### '--------------------------------------------------------------------------
|
||||
aptRemove sysvinit
|
||||
|
||||
#### '--------------------------------------------------------------------------
|
||||
info ' Install Systemd'
|
||||
#### '--------------------------------------------------------------------------
|
||||
aptUpdate
|
||||
aptInstall systemd-sysv
|
||||
|
||||
#### '--------------------------------------------------------------------------
|
||||
info ' Set multu-user.target as the default target (runlevel 3)'
|
||||
#### '--------------------------------------------------------------------------
|
||||
chroot rm -f /etc/systemd/system/default.target
|
||||
chroot ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
|
@ -1,89 +0,0 @@
|
||||
#!/bin/bash -e
|
||||
# vim: set ts=4 sw=4 sts=4 et :
|
||||
|
||||
source "${SCRIPTSDIR}/vars.sh"
|
||||
source "${SCRIPTSDIR}/distribution.sh"
|
||||
|
||||
##### "=========================================================================
|
||||
debug " Installing custom packages and customizing ${DIST}"
|
||||
##### "=========================================================================
|
||||
|
||||
#### '--------------------------------------------------------------------------
|
||||
info ' Adding contrib, non-free and Debian security to repository.'
|
||||
#### '--------------------------------------------------------------------------
|
||||
updateDebianSourceList
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Adding wheezy backports repository.'
|
||||
#### '----------------------------------------------------------------------
|
||||
source="deb ${DEBIAN_MIRROR} wheezy-backports main"
|
||||
if ! grep -r -q "$source" "${INSTALLDIR}/etc/apt/sources.list"*; then
|
||||
touch "${INSTALLDIR}/etc/apt/sources.list"
|
||||
echo "$source" >> "${INSTALLDIR}/etc/apt/sources.list"
|
||||
fi
|
||||
aptUpdate
|
||||
|
||||
##### '=========================================================================
|
||||
debug ' Replace sysvinit with systemd'
|
||||
##### '=========================================================================
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Remove sysvinit'
|
||||
#### '----------------------------------------------------------------------
|
||||
echo 'Yes, do as I say!' | aptRemove sysvinit
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Preventing sysvinit re-installation'
|
||||
#### '----------------------------------------------------------------------
|
||||
chroot apt-mark hold sysvinit
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Pin sysvinit to prevent being re-installed'
|
||||
#### '----------------------------------------------------------------------
|
||||
cat > "${INSTALLDIR}/etc/apt/preferences.d/qubes_sysvinit" <<EOF
|
||||
Package: sysvinit
|
||||
Pin: version *
|
||||
Pin-Priority: -100
|
||||
EOF
|
||||
chmod 0644 "${INSTALLDIR}/etc/apt/preferences.d/qubes_sysvinit"
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Install Systemd'
|
||||
#### '----------------------------------------------------------------------
|
||||
aptUpdate
|
||||
aptInstall systemd-sysv
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Set multu-user.target as the default target (runlevel 3)'
|
||||
#### '----------------------------------------------------------------------
|
||||
chroot rm -f /etc/systemd/system/default.target
|
||||
chroot ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
|
||||
|
||||
|
||||
# ==============================================================================
|
||||
# Install backports
|
||||
#
|
||||
# NOTE: This needs to be done after systemd has been installed or risk backport
|
||||
# being un-installed
|
||||
# ==============================================================================
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Installing init-system-helpers'
|
||||
#### '----------------------------------------------------------------------
|
||||
aptUpdate
|
||||
DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \
|
||||
chroot apt-get ${APT_GET_OPTIONS} -t wheezy-backports install init-system-helpers
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Installing pulseaudo backport'
|
||||
#### '----------------------------------------------------------------------
|
||||
|
||||
# /usr/lib/pulse-4.0/modules/
|
||||
# start-pulseaudio-with-vchan
|
||||
|
||||
#DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \
|
||||
# chroot apt-get ${APT_GET_OPTIONS} -t wheezy-backports install pulseaudio \
|
||||
# libpulse0 \
|
||||
# pulseaudio-utils \
|
||||
# libpulse-mainloop-glib0 \
|
||||
# pulseaudio-module-x11
|
@ -1,61 +0,0 @@
|
||||
#!/bin/bash -e
|
||||
# vim: set ts=4 sw=4 sts=4 et :
|
||||
|
||||
source "${SCRIPTSDIR}/vars.sh"
|
||||
source "${SCRIPTSDIR}/distribution.sh"
|
||||
|
||||
##### '-------------------------------------------------------------------------
|
||||
debug ' Installing Qubes packages'
|
||||
##### '-------------------------------------------------------------------------
|
||||
|
||||
# If .prepared_debootstrap has not been completed, don't continue
|
||||
exitOnNoFile "${INSTALLDIR}/${TMPDIR}/.prepared_groups" "prepared_groups installataion has not completed!... Exiting"
|
||||
|
||||
# Create system mount points
|
||||
prepareChroot
|
||||
|
||||
# ==============================================================================
|
||||
# Execute any template flavor or sub flavor 'pre' scripts
|
||||
# ==============================================================================
|
||||
buildStep "${0}" "pre"
|
||||
|
||||
if ! [ -f "${INSTALLDIR}/${TMPDIR}/.prepared_qubes" ]; then
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Trap ERR and EXIT signals and cleanup (umount)'
|
||||
#### '----------------------------------------------------------------------
|
||||
trap cleanup ERR
|
||||
trap cleanup EXIT
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Install Qubes packages listed in packages_qubes.list file(s)'
|
||||
#### '----------------------------------------------------------------------
|
||||
installQubesRepo
|
||||
aptUpdate
|
||||
installPackages packages_qubes.list
|
||||
uninstallQubesRepo
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Re-update locales'
|
||||
# Locales get reset during package installation sometimes
|
||||
#### '----------------------------------------------------------------------
|
||||
updateLocale
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Cleanup'
|
||||
#### '----------------------------------------------------------------------
|
||||
umount_all "${INSTALLDIR}/" || true
|
||||
touch "${INSTALLDIR}/${TMPDIR}/.prepared_qubes"
|
||||
trap - ERR EXIT
|
||||
trap
|
||||
fi
|
||||
|
||||
# ==============================================================================
|
||||
# Execute any template flavor or sub flavor 'post' scripts
|
||||
# ==============================================================================
|
||||
buildStep "${0}" "post"
|
||||
|
||||
# ==============================================================================
|
||||
# Kill all processes and umount all mounts within ${INSTALLDIR}, but not
|
||||
# ${INSTALLDIR} itself (extra '/' prevents ${INSTALLDIR} from being umounted)
|
||||
# ==============================================================================
|
||||
umount_all "${INSTALLDIR}/" || true
|
@ -1,27 +0,0 @@
|
||||
#!/bin/bash -e
|
||||
# vim: set ts=4 sw=4 sts=4 et :
|
||||
|
||||
source "${SCRIPTSDIR}/vars.sh"
|
||||
source "${SCRIPTSDIR}/distribution.sh"
|
||||
|
||||
##### '=========================================================================
|
||||
debug ' Cleaning up...'
|
||||
##### '=========================================================================
|
||||
|
||||
# ==============================================================================
|
||||
# Execute any template flavor or sub flavor 'pre' scripts
|
||||
# ==============================================================================
|
||||
buildStep "${0}" "pre"
|
||||
|
||||
#### '-------------------------------------------------------------------------
|
||||
info ' Cleaning up any left over files from installation'
|
||||
#### '-------------------------------------------------------------------------
|
||||
rm -rf "${INSTALLDIR}/var/cache/apt/archives"
|
||||
rm -f "${INSTALLDIR}/etc/apt/sources.list.d/qubes-builder.list"
|
||||
rm -f "${INSTALLDIR}/etc/apt/trusted.gpg.d/qubes-builder.gpg"
|
||||
rm -rf "${INSTALLDIR}/${TMPDIR}"
|
||||
|
||||
# ==============================================================================
|
||||
# Execute any template flavor or sub flavor 'post' scripts
|
||||
# ==============================================================================
|
||||
buildStep "${0}" "post"
|
@ -1,75 +0,0 @@
|
||||
issues
|
||||
------
|
||||
Think it makes most sense to run whonix setup right after qubes, then whonix can install qubes-whonix last.
|
||||
hook into bfore qubes removes its links to repo
|
||||
|
||||
|
||||
installing whonix after qubes-whonix; wq thinks its a template; tries to use proxy. Need to add
|
||||
a chroot option maybe' touch /var/run/qubes/qubes-service/choot and ignore everything; maybe even
|
||||
in postinit? -- gotta be sure IP addresses don't get changed
|
||||
|
||||
tests
|
||||
-----
|
||||
|
||||
test all the vms listed below plus make sure each works with:
|
||||
|
||||
- netvm
|
||||
- proxyvm
|
||||
- sound
|
||||
- notifications
|
||||
|
||||
NOTE: Backup EXISTING jessie-gnome; its what I use for web access!
|
||||
Make a special version name; test with that and copy my root.img to it after test as my future template to keep
|
||||
wheezy
|
||||
wheezy+gnome
|
||||
jessie
|
||||
jessie+gnome
|
||||
whonix-gateway
|
||||
whonix-workstation
|
||||
|
||||
# Before building ubuntu again; combine code base again
|
||||
trusty
|
||||
trusty+gnome
|
||||
utopic
|
||||
utopic+gnome
|
||||
|
||||
test qubes-whonix package update... at first just add a local file base repo in appvm
|
||||
|
||||
|
||||
ubuntu fixups
|
||||
-------------
|
||||
network manager
|
||||
application menus
|
||||
- can I convert the hvm? -- or install real ubuntu from live but automated?
|
||||
- combine codebase of ubuntu / debian
|
||||
|
||||
whonix fixups
|
||||
-------------
|
||||
move code to qhonix-qubes that can go there
|
||||
see if I can get rid of grub yet with new APT-opts command
|
||||
review all snapshot code; remove remerences to /run; swap with tmp
|
||||
|
||||
todo
|
||||
----
|
||||
add firfox, etc to installed apps like fedora has - gnome only build; keep minimum debian builds
|
||||
flashplayer
|
||||
mirror list
|
||||
automated test? build, deploy to dom0, install guest + appvm, run some tests in appvm
|
||||
|
||||
add in qubes-apps-linux-* during qubes-setup; maybe need to remove thunderbird?
|
||||
duplicate 01proxy
|
||||
fix the gui-linux commmit
|
||||
restore dash -- fix any qubes scripts to use dash or indicated they need bash
|
||||
fix any qubes scripts that use sysconfig; since we dont
|
||||
|
||||
|
||||
condsider
|
||||
---------
|
||||
salt module; maybe can use for tests
|
||||
|
||||
|
||||
merge
|
||||
-----
|
||||
merge to debian first
|
||||
then from debian to master
|
||||
then from master to ubuntu -- rebase whonix again
|
@ -1,385 +0,0 @@
|
||||
#!/bin/bash -e
|
||||
# vim: set ts=4 sw=4 sts=4 et :
|
||||
|
||||
source ./functions.sh >/dev/null
|
||||
source ./umount_kill.sh >/dev/null
|
||||
|
||||
setVerboseMode
|
||||
output "${bold}${under}INFO: ${SCRIPTSDIR}/distribution.sh imported by: ${0}${reset}"
|
||||
|
||||
# ==============================================================================
|
||||
# Cleanup function
|
||||
# ==============================================================================
|
||||
function cleanup() {
|
||||
errval=$?
|
||||
trap - ERR EXIT
|
||||
trap
|
||||
error "${1:-"${0}: Error. Cleaning up and un-mounting any existing mounts"}"
|
||||
umount_all || true
|
||||
|
||||
# Return xtrace to original state
|
||||
[[ -n "${XTRACE}" ]] && [[ "${XTRACE}" -eq 0 ]] && set -x || set +x
|
||||
|
||||
exit $errval
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# If .prepared_debootstrap has not been completed, don't continue
|
||||
# ==============================================================================
|
||||
function exitOnNoFile() {
|
||||
file="${1}"
|
||||
message="${2}"
|
||||
|
||||
if ! [ -f "${file}" ]; then
|
||||
error "${message}"
|
||||
umount_all || true
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Umount everthing within INSTALLDIR or $1 but kill all processes within first
|
||||
# ==============================================================================
|
||||
function umount_all() {
|
||||
directory="${1:-"${INSTALLDIR}"}"
|
||||
|
||||
# Only remove dirvert policies, etc if base INSTALLDIR mount is being umounted
|
||||
if [ "${directory}" == "${INSTALLDIR}" -o "${directory}" == "${INSTALLDIR}/" ]; then
|
||||
if [ -n "$(mountPoints)" ]; then
|
||||
removeDbusUuid
|
||||
removeDivertPolicy
|
||||
fi
|
||||
fi
|
||||
|
||||
umount_kill "${directory}" || true
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Create snapshot
|
||||
# ==============================================================================
|
||||
function createSnapshot() {
|
||||
snapshot_name="${1}"
|
||||
|
||||
if [ "${SNAPSHOT}" == "1" ]; then
|
||||
splitPath "${IMG}" path_parts
|
||||
snapshot_path="${path_parts[dir]}${path_parts[base]}-${snapshot_name}${path_parts[dotext]}"
|
||||
|
||||
# create snapshot
|
||||
info "Creating snapshot of ${IMG} to ${snapshot_path}"
|
||||
sync
|
||||
cp -f "${IMG}" "${snapshot_path}"
|
||||
fi
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Create DBUS uuid
|
||||
# ==============================================================================
|
||||
function createDbusUuid() {
|
||||
outputc green "Creating DBUS uuid..."
|
||||
removeDbusUuid
|
||||
if [ -e "${INSTALLDIR}/bin/dbus-uuidgen" ]; then
|
||||
chroot dbus-uuidgen --ensure 1>/dev/null 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Remove DBUS uuid
|
||||
# ==============================================================================
|
||||
function removeDbusUuid() {
|
||||
if [ -e "${INSTALLDIR}"/var/lib/dbus/machine-id ]; then
|
||||
outputc red "Removing generated machine uuid..."
|
||||
rm -f "${INSTALLDIR}/var/lib/dbus/machine-id"
|
||||
fi
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Set up a temporary dpkg-divert policy to prevent apt from starting services
|
||||
# on package installation
|
||||
# ==============================================================================
|
||||
function addDivertPolicy() {
|
||||
outputc green "Deactivating initctl..."
|
||||
chroot dpkg-divert --local --rename --add /sbin/initctl || true
|
||||
|
||||
# utopic systemd install still broken...
|
||||
outputc green "Hacking invoke-rc.d to ignore missing init scripts..."
|
||||
chroot sed -i -e "s/exit 100/exit 0 #exit 100/" /usr/sbin/invoke-rc.d
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Remove temporary dpkg-divert policy
|
||||
# ==============================================================================
|
||||
function removeDivertPolicy() {
|
||||
outputc red "Reactivating initctl..."
|
||||
chroot dpkg-divert --local --rename --remove /sbin/initctl || true
|
||||
|
||||
outputc red "Restoring invoke-rc.d..."
|
||||
chroot sed -i -e "s/exit 0 #exit 100/exit 100/" /usr/sbin/invoke-rc.d
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Create system mount points
|
||||
# ==============================================================================
|
||||
function prepareChroot() {
|
||||
# Make sure nothing is mounted within $INSTALLDIR
|
||||
umount_kill "${INSTALLDIR}/"
|
||||
|
||||
mount -t tmpfs none "${INSTALLDIR}/run"
|
||||
if [ "${SYSTEMD_NSPAWN_ENABLE}" != "1" ]; then
|
||||
mount -t proc proc "${INSTALLDIR}/proc"
|
||||
mount -t sysfs sys "${INSTALLDIR}/sys"
|
||||
fi
|
||||
createDbusUuid
|
||||
addDivertPolicy
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# apt-get upgrade
|
||||
# ==============================================================================
|
||||
function aptUpgrade() {
|
||||
aptUpdate
|
||||
DEBIAN_FRONTEND="noninteractive" DEBIAN_PRIORITY="critical" DEBCONF_NOWARNINGS="yes" \
|
||||
chroot env APT_LISTCHANGES_FRONTEND=none apt-get dist-upgrade -u -y --force-yes
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# apt-get dist-upgrade
|
||||
# ==============================================================================
|
||||
function aptDistUpgrade() {
|
||||
aptUpdate
|
||||
DEBIAN_FRONTEND="noninteractive" DEBIAN_PRIORITY="critical" DEBCONF_NOWARNINGS="yes" \
|
||||
chroot env APT_LISTCHANGES_FRONTEND=none apt-get dist-upgrade -u -y --force-yes
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# apt-get update
|
||||
# ==============================================================================
|
||||
function aptUpdate() {
|
||||
debug "Updating system"
|
||||
DEBIAN_FRONTEND="noninteractive" DEBIAN_PRIORITY="critical" DEBCONF_NOWARNINGS="yes" \
|
||||
chroot apt-get update
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# apt-get remove
|
||||
# ==============================================================================
|
||||
function aptRemove() {
|
||||
files="$@"
|
||||
DEBIAN_FRONTEND="noninteractive" DEBIAN_PRIORITY="critical" DEBCONF_NOWARNINGS="yes" \
|
||||
chroot apt-get ${APT_GET_OPTIONS} remove ${files[@]}
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# apt-get install
|
||||
# ==============================================================================
|
||||
function aptInstall() {
|
||||
files="$@"
|
||||
DEBIAN_FRONTEND="noninteractive" DEBIAN_PRIORITY="critical" DEBCONF_NOWARNINGS="yes" \
|
||||
chroot apt-get ${APT_GET_OPTIONS} install ${files[@]}
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Install extra packages in script_${DIST}/packages.list file
|
||||
# -and / or- TEMPLATE_FLAVOR directories
|
||||
# ==============================================================================
|
||||
function installPackages() {
|
||||
if [ -n "${1}" ]; then
|
||||
# Locate packages within sub dirs
|
||||
if [ ${#@} == "1" ]; then
|
||||
getFileLocations packages_list "${1}" ""
|
||||
else
|
||||
packages_list="$@"
|
||||
fi
|
||||
else
|
||||
getFileLocations packages_list "packages.list" "${DIST}"
|
||||
if [ -z "${packages_list}" ]; then
|
||||
error "Can not locate a package.list file!"
|
||||
umount_all || true
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
for package_list in ${packages_list[@]}; do
|
||||
debug "Installing extra packages from: ${package_list}"
|
||||
declare -a packages
|
||||
readarray -t packages < "${package_list}"
|
||||
|
||||
info "Packages: "${packages[@]}""
|
||||
aptInstall "${packages[@]}" || return $?
|
||||
done
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Install Systemd
|
||||
# ==============================================================================
|
||||
function installSystemd() {
|
||||
buildStep "$0" "pre-systemd"
|
||||
chroot apt-get update
|
||||
|
||||
aptInstall systemd
|
||||
createDbusUuid
|
||||
|
||||
# Set multi-user.target as default target
|
||||
chroot rm -f /etc/systemd/system/default.target
|
||||
chroot ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
|
||||
|
||||
# XXX: TEMP lets see how stuff work with upstart in control for now
|
||||
# Boot using systemd
|
||||
chroot rm -f /sbin/init
|
||||
chroot ln -sf /lib/systemd/systemd /sbin/init
|
||||
|
||||
buildStep "$0" "post-systemd"
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# ------------------------------------------------------------------------------
|
||||
# C O N F I G U R A T I O N R E L A T E D
|
||||
# ------------------------------------------------------------------------------
|
||||
# ==============================================================================
|
||||
|
||||
# ==============================================================================
|
||||
# Add universe to sources.list
|
||||
# ==============================================================================
|
||||
function updateDebianSourceList() {
|
||||
# Add contrib and non-free component to repository
|
||||
touch "${INSTALLDIR}/etc/apt/sources.list"
|
||||
sed -i "s/${DIST} main$/${DIST} main contrib non-free/g" "${INSTALLDIR}/etc/apt/sources.list"
|
||||
|
||||
# Add Debian security repositories
|
||||
source="deb http://security.debian.org ${DEBIANVERSION}/updates main"
|
||||
if ! grep -r -q "$source" "${INSTALLDIR}/etc/apt/sources.list"*; then
|
||||
touch "${INSTALLDIR}/etc/apt/sources.list"
|
||||
echo "$source" >> "${INSTALLDIR}/etc/apt/sources.list"
|
||||
fi
|
||||
source="deb-src http://security.debian.org ${DEBIANVERSION}/updates main"
|
||||
if ! grep -r -q "$source" "${INSTALLDIR}/etc/apt/sources.list"*; then
|
||||
touch "${INSTALLDIR}/etc/apt/sources.list"
|
||||
echo "$source" >> "${INSTALLDIR}/etc/apt/sources.list"
|
||||
fi
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Add universe to sources.list
|
||||
# ==============================================================================
|
||||
function updateQubuntuSourceList() {
|
||||
sed -i "s/${DIST} main$/${DIST} main universe multiverse restricted/g" "${INSTALLDIR}/etc/apt/sources.list"
|
||||
source="deb http://archive.canonical.com/ubuntu ${DIST} partner"
|
||||
if ! grep -r -q "$source" "${INSTALLDIR}/etc/apt/sources.list"*; then
|
||||
touch "${INSTALLDIR}/etc/apt/sources.list"
|
||||
echo "$source" >> "${INSTALLDIR}/etc/apt/sources.list"
|
||||
fi
|
||||
source="deb-src http://archive.canonical.com/ubuntu ${DIST} partner"
|
||||
if ! grep -r -q "$source" "${INSTALLDIR}/etc/apt/sources.list"*; then
|
||||
touch "${INSTALLDIR}/etc/apt/sources.list"
|
||||
echo "$source" >> "${INSTALLDIR}/etc/apt/sources.list"
|
||||
fi
|
||||
chroot apt-get update
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Make sure there is a resolv.conf with network of this AppVM for building
|
||||
# ==============================================================================
|
||||
function createResolvConf() {
|
||||
rm -f "${INSTALLDIR}/etc/resolv.conf"
|
||||
cp /etc/resolv.conf "${INSTALLDIR}/etc/resolv.conf"
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Ensure umask set in /etc/login.defs is used (022)
|
||||
# ==============================================================================
|
||||
function configureUmask() {
|
||||
echo "session optional pam_umask.so" >> "${INSTALLDIR}/etc/pam.d/common-session"
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Configure keyboard
|
||||
# ==============================================================================
|
||||
function configureKeyboard() {
|
||||
debug "Setting keyboard layout"
|
||||
cat > "${INSTALLDIR}/tmp/keyboard.conf" <<'EOF'
|
||||
keyboard-configuration keyboard-configuration/variant select English (US)
|
||||
keyboard-configuration keyboard-configuration/layout select English (US)
|
||||
keyboard-configuration keyboard-configuration/model select Generic 105-key (Intl) PC
|
||||
keyboard-configuration keyboard-configuration/modelcode string pc105
|
||||
keyboard-configuration keyboard-configuration/layoutcode string us
|
||||
keyboard-configuration keyboard-configuration/variantcode string
|
||||
keyboard-configuration keyboard-configuration/optionscode string
|
||||
EOF
|
||||
chroot debconf-set-selections /tmp/keyboard.conf
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Update locale
|
||||
# ==============================================================================
|
||||
function updateLocale() {
|
||||
debug "Updating locales"
|
||||
chroot localedef -f UTF-8 -i en_US -c en_US.UTF-8
|
||||
chroot update-locale LC_ALL=en_US.UTF-8
|
||||
}
|
||||
|
||||
|
||||
# ==============================================================================
|
||||
# ------------------------------------------------------------------------------
|
||||
# Q U B E S S P E C I F I C F U N C T I O N S
|
||||
# ------------------------------------------------------------------------------
|
||||
# ==============================================================================
|
||||
|
||||
|
||||
# ==============================================================================
|
||||
# Install Keyrings
|
||||
# ==============================================================================
|
||||
function installKeyrings() {
|
||||
if ! [ -e "${CACHEDIR}/repo-secring.gpg" ]; then
|
||||
mkdir -p "${CACHEDIR}"
|
||||
gpg --gen-key --batch <<EOF
|
||||
Key-Type: RSA
|
||||
Key-Length: 1024
|
||||
Key-Usage: sign
|
||||
Name-Real: Qubes builder
|
||||
Expire-Date: 0
|
||||
%pubring ${CACHEDIR}/repo-pubring.gpg
|
||||
%secring ${CACHEDIR}/repo-secring.gpg
|
||||
%commit
|
||||
EOF
|
||||
fi
|
||||
|
||||
if [ ! -e "${CUSTOMREPO}/dists/${DIST}/Release.gpg" ]; then
|
||||
gpg -abs --no-default-keyring \
|
||||
--secret-keyring "${CACHEDIR}/repo-secring.gpg" \
|
||||
--keyring "${CACHEDIR}/repo-pubring.gpg" \
|
||||
-o "${CUSTOMREPO}/dists/${DIST}/Release.gpg" \
|
||||
"${CUSTOMREPO}/dists/${DIST}/Release"
|
||||
cp "${CACHEDIR}/repo-pubring.gpg" "${INSTALLDIR}/etc/apt/trusted.gpg.d/qubes-builder.gpg"
|
||||
fi
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Install Qubes Repo
|
||||
# ==============================================================================
|
||||
installQubesRepo() {
|
||||
info " Defining Qubes CUSTOMREPO Location: ${PWD}/yum_repo_qubes/${DIST}"
|
||||
export CUSTOMREPO="${PWD}/yum_repo_qubes/${DIST}"
|
||||
|
||||
info "Mounting local qubes_repo"
|
||||
mkdir -p "${INSTALLDIR}/tmp/qubes_repo"
|
||||
mount --bind "${CUSTOMREPO}" "${INSTALLDIR}/tmp/qubes_repo"
|
||||
|
||||
cat > "${INSTALLDIR}/etc/apt/sources.list.d/qubes-builder.list" <<EOF
|
||||
deb file:/tmp/qubes_repo ${DIST} main
|
||||
EOF
|
||||
|
||||
# XXX: Moved keyring install last in process; not sure if mount was ready
|
||||
# all the time in its previous place
|
||||
info ' Installing keyrings' # Relies on $CUSTOMREPO
|
||||
installKeyrings
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Uninstall Qubes Repo
|
||||
# ==============================================================================
|
||||
uninstallQubesRepo() {
|
||||
info ' Removing Quebes build repo from sources.list.d'
|
||||
|
||||
# Lets not umount; we do that anyway when 04 exits
|
||||
umount_kill "${INSTALLDIR}/tmp/qubes_repo"
|
||||
rm -f "${INSTALLDIR}/etc/apt/sources.list.d/qubes-builder.list"
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
#!/bin/bash -e
|
||||
# vim: set ts=4 sw=4 sts=4 et :
|
||||
|
||||
source "${SCRIPTSDIR}/vars.sh"
|
||||
source "${SCRIPTSDIR}/distribution.sh"
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Installing flash plugin'
|
||||
#### '----------------------------------------------------------------------
|
||||
aptInstall flashplugin-nonfree
|
@ -1,13 +0,0 @@
|
||||
#!/bin/bash -e
|
||||
# vim: set ts=4 sw=4 sts=4 et :
|
||||
|
||||
source "${SCRIPTSDIR}/vars.sh"
|
||||
source "${SCRIPTSDIR}/distribution.sh"
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Installing Gnome'
|
||||
#### '----------------------------------------------------------------------
|
||||
#packages="$(chroot tasksel --new-install --task-packages desktop)"
|
||||
#packages+=" $(chroot tasksel --new-install --task-packages gnome-desktop)"
|
||||
packages="$(chroot tasksel --new-install --task-packages gnome-desktop)"
|
||||
aptInstall ${packages}
|
Binary file not shown.
Binary file not shown.
@ -1,22 +0,0 @@
|
||||
ncurses-term
|
||||
aptitude
|
||||
tasksel
|
||||
sudo
|
||||
locales
|
||||
dmsetup
|
||||
psmisc
|
||||
emacs
|
||||
vim-nox
|
||||
gnupg
|
||||
iceweasel
|
||||
icedove
|
||||
keepassx
|
||||
git
|
||||
gnome-terminal
|
||||
xterm
|
||||
libfile-mimeinfo-perl
|
||||
libglib2.0-bin
|
||||
ltrace
|
||||
strace
|
||||
haveged
|
||||
firmware-linux
|
@ -1,15 +0,0 @@
|
||||
qubes-core-agent
|
||||
qubes-gui-agent
|
||||
xdg-user-dirs
|
||||
gnome-themes-standard
|
||||
xsettingsd
|
||||
gnome-packagekit
|
||||
chrony
|
||||
ntpdate
|
||||
|
||||
libxvmc1
|
||||
x11-session-utils
|
||||
xfonts-100dpi
|
||||
xfonts-75dpi
|
||||
xfonts-scalable
|
||||
|
@ -1,22 +0,0 @@
|
||||
ncurses-term
|
||||
aptitude
|
||||
tasksel
|
||||
sudo
|
||||
locales
|
||||
dmsetup
|
||||
psmisc
|
||||
emacs
|
||||
vim-nox
|
||||
gnupg
|
||||
iceweasel
|
||||
icedove
|
||||
keepassx
|
||||
git
|
||||
gnome-terminal
|
||||
xterm
|
||||
libfile-mimeinfo-perl
|
||||
libglib2.0-bin
|
||||
ltrace
|
||||
strace
|
||||
haveged
|
||||
firmware-linux
|
@ -1,36 +0,0 @@
|
||||
#!/bin/bash -e
|
||||
# vim: set ts=4 sw=4 sts=4 et :
|
||||
|
||||
source ./functions.sh
|
||||
|
||||
# ==============================================================================
|
||||
# Global variables and functions
|
||||
# ==============================================================================
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Temp directory to place installation files and progress markers
|
||||
# (Do not use /tmp since if built in a real VM, /tmp will be empty on a reboot)
|
||||
# ------------------------------------------------------------------------------
|
||||
TMPDIR="/var/lib/qubes-whonix/install"
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# The codename of the debian version to install.
|
||||
# jessie = testing, wheezy = stable
|
||||
# ------------------------------------------------------------------------------
|
||||
DEBIANVERSION=${DIST}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Location to grab Debian packages
|
||||
# ------------------------------------------------------------------------------
|
||||
DEBIAN_MIRROR=http://ftp.us.debian.org/debian
|
||||
|
||||
# TODO: Not yet implemented
|
||||
DEBIAN_MIRRORS=('http://ftp.us.debian.org/debian',
|
||||
'http://http.debian.net/debian,
|
||||
'http://ftp.ca.debian.org/debian,
|
||||
)
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# apt-get configuration options
|
||||
# ------------------------------------------------------------------------------
|
||||
APT_GET_OPTIONS="-o Dpkg::Options::="--force-confnew" --force-yes --yes"
|
@ -1,246 +0,0 @@
|
||||
#!/bin/bash -e
|
||||
# vim: set ts=4 sw=4 sts=4 et :
|
||||
|
||||
source "${SCRIPTSDIR}/vars.sh"
|
||||
source "${SCRIPTSDIR}/distribution.sh"
|
||||
|
||||
##### '-------------------------------------------------------------------------
|
||||
debug ' Installing and building Whonix'
|
||||
##### '-------------------------------------------------------------------------
|
||||
|
||||
|
||||
#### '--------------------------------------------------------------------------
|
||||
info ' Trap ERR and EXIT signals and cleanup (umount)'
|
||||
#### '--------------------------------------------------------------------------
|
||||
trap cleanup ERR
|
||||
trap cleanup EXIT
|
||||
|
||||
if ! [ -f "${INSTALLDIR}/${TMPDIR}/.whonix_prepared_groups" ]; then
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Installing extra packages in packages_whonix.list file'
|
||||
#### '----------------------------------------------------------------------
|
||||
installPackages packages_whonix.list
|
||||
touch "${INSTALLDIR}/${TMPDIR}/.whonix_prepared_groups"
|
||||
fi
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# chroot Whonix build script
|
||||
# ------------------------------------------------------------------------------
|
||||
read -r -d '' WHONIX_BUILD_SCRIPT <<'EOF' || true
|
||||
################################################################################
|
||||
# Pre Fixups
|
||||
sudo mkdir -p /boot/grub2
|
||||
sudo touch /boot/grub2/grub.cfg
|
||||
sudo mkdir -p /boot/grub
|
||||
sudo touch /boot/grub/grub.cfg
|
||||
sudo mkdir --parents --mode=g+rw "/tmp/uwt"
|
||||
|
||||
# Whonix seems to re-install sysvinit even though there is a hold
|
||||
# on the package. Things seem to work anyway. BUT hopfully the
|
||||
# hold on grub* don't get removed
|
||||
sudo apt-mark hold sysvinit
|
||||
sudo apt-mark hold grub-pc grub-pc-bin grub-common grub2-common
|
||||
|
||||
# Whonix expects haveged to be started
|
||||
sudo /etc/init.d/haveged start
|
||||
################################################################################
|
||||
# Whonix installation
|
||||
export WHONIX_BUILD_UNATTENDED_PKG_INSTALL="1"
|
||||
|
||||
pushd ~/Whonix
|
||||
sudo ~/Whonix/whonix_build \
|
||||
--build $1 \
|
||||
--64bit-linux \
|
||||
--current-sources \
|
||||
--enable-whonix-apt-repository \
|
||||
--whonix-apt-repository-distribution $2 \
|
||||
--install-to-root \
|
||||
--skip-verifiable \
|
||||
--minimal-report \
|
||||
--skip-sanity-tests || { exit 1; }
|
||||
popd
|
||||
EOF
|
||||
|
||||
|
||||
##### '-------------------------------------------------------------------------
|
||||
debug ' Preparing Whonix for installation'
|
||||
##### '-------------------------------------------------------------------------
|
||||
if [ -f "${INSTALLDIR}/${TMPDIR}/.whonix_prepared_groups" ] && ! [ -f "${INSTALLDIR}/${TMPDIR}/.whonix_prepared" ]; then
|
||||
info "Preparing Whonix system"
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Initializing Whonix submodules'
|
||||
#### '----------------------------------------------------------------------
|
||||
pushd "${WHONIX_DIR}"
|
||||
{
|
||||
git add Makefile || true
|
||||
git commit Makefile -m 'Added Makefile' || true
|
||||
su $(logname) -c "git submodule update --init --recursive";
|
||||
}
|
||||
popd
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Faking grub installation since Whonix has depends on grub-pc'
|
||||
#### '----------------------------------------------------------------------
|
||||
mkdir -p "${INSTALLDIR}/boot/grub"
|
||||
cp "${INSTALLDIR}/usr/lib/grub/i386-pc/"* "${INSTALLDIR}/boot/grub"
|
||||
rm -f "${INSTALLDIR}/usr/sbin/update-grub"
|
||||
chroot ln -s /bin/true /usr/sbin/update-grub
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Adding a user account for Whonix to build with'
|
||||
#### '----------------------------------------------------------------------
|
||||
chroot id -u 'user' >/dev/null 2>&1 || \
|
||||
{
|
||||
# UID needs match host user to have access to Whonix sources
|
||||
chroot groupadd -f user
|
||||
[ -n "$SUDO_UID" ] && USER_OPTS="-u $SUDO_UID"
|
||||
chroot useradd -g user $USER_OPTS -G sudo,audio -m -s /bin/bash user
|
||||
if [ `chroot id -u user` != 1000 ]; then
|
||||
chroot useradd -g user -u 1000 -M -s /bin/bash user-placeholder
|
||||
fi
|
||||
}
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Installing Whonix build scripts'
|
||||
#### '----------------------------------------------------------------------
|
||||
echo "${WHONIX_BUILD_SCRIPT}" > "${INSTALLDIR}/home/user/whonix_build.sh"
|
||||
chmod 0755 "${INSTALLDIR}/home/user/whonix_build.sh"
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Removing apt-listchanges if it exists,so no prompts appear'
|
||||
#### '----------------------------------------------------------------------
|
||||
# Whonix does not handle this properly, but aptInstall packages will
|
||||
aptRemove apt-listchanges || true
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Copying additional files required for build'
|
||||
#### '----------------------------------------------------------------------
|
||||
copyTree "files"
|
||||
|
||||
touch "${INSTALLDIR}/${TMPDIR}/.whonix_prepared"
|
||||
fi
|
||||
|
||||
|
||||
##### '-------------------------------------------------------------------------
|
||||
debug ' Installing Whonix code base'
|
||||
##### '-------------------------------------------------------------------------
|
||||
if [ -f "${INSTALLDIR}/${TMPDIR}/.whonix_prepared" ] && ! [ -f "${INSTALLDIR}/${TMPDIR}/.whonix_installed" ]; then
|
||||
if ! [ -d "${INSTALLDIR}/home/user/Whonix" ]; then
|
||||
chroot su user -c 'mkdir /home/user/Whonix'
|
||||
fi
|
||||
|
||||
mount --bind "../Whonix" "${INSTALLDIR}/home/user/Whonix"
|
||||
|
||||
if [ "${TEMPLATE_FLAVOR}" == "whonix-gateway" ]; then
|
||||
BUILD_TYPE="--torgateway"
|
||||
elif [ "${TEMPLATE_FLAVOR}" == "whonix-workstation" ]; then
|
||||
BUILD_TYPE="--torworkstation"
|
||||
else
|
||||
error "Incorrent Whonix type \"${TEMPLATE_FLAVOR}\" selected. Not building Whonix modules"
|
||||
error "You need to set TEMPLATE_FLAVOR environment variable to either"
|
||||
error "whonix-gateway OR whonix-workstation"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Whonix needs /dev/pts mounted during build
|
||||
mount --bind /dev "${INSTALLDIR}/dev"
|
||||
mount --bind /dev/pts "${INSTALLDIR}/dev/pts"
|
||||
|
||||
chroot su user -c "cd ~; ./whonix_build.sh ${BUILD_TYPE} ${DIST}" || { exit 1; }
|
||||
|
||||
touch "${INSTALLDIR}/${TMPDIR}/.whonix_installed"
|
||||
fi
|
||||
|
||||
|
||||
##### '-------------------------------------------------------------------------
|
||||
debug ' Whonix Post Installation Configurations'
|
||||
##### '-------------------------------------------------------------------------
|
||||
if [ -f "${INSTALLDIR}/${TMPDIR}/.whonix_installed" ] && ! [ -f "${INSTALLDIR}/${TMPDIR}/.whonix_post" ]; then
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Restoring original network interfaces'
|
||||
#### '----------------------------------------------------------------------
|
||||
pushd "${INSTALLDIR}/etc/network"
|
||||
{
|
||||
rm -f interfaces;
|
||||
ln -s interfaces.backup interfaces;
|
||||
}
|
||||
popd
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Temporarily retore original resolv.conf for remainder of install process'
|
||||
info ' (Will be restored back in wheezy+whonix/04_qubes_install_post.sh)'
|
||||
#### '----------------------------------------------------------------------
|
||||
pushd "${INSTALLDIR}/etc"
|
||||
{
|
||||
rm -f resolv.conf;
|
||||
cp -p resolv.conf.backup resolv.conf;
|
||||
}
|
||||
popd
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Temporarily retore original hosts for remainder of install process'
|
||||
info ' (Will be restored on initial boot)'
|
||||
#### '----------------------------------------------------------------------
|
||||
pushd "${INSTALLDIR}/etc"
|
||||
{
|
||||
rm -f hosts;
|
||||
cp -p hosts.anondist-orig hosts;
|
||||
}
|
||||
popd
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Restore default user UID set to so same in all builds regardless of build host'
|
||||
#### '----------------------------------------------------------------------
|
||||
if [ -n "`chroot id -u user-placeholder`" ]; then
|
||||
chroot userdel user-placeholder
|
||||
chroot usermod -u 1000 user
|
||||
fi
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Enable some aliases in .bashrc'
|
||||
#### '----------------------------------------------------------------------
|
||||
sed -i "s/^# export/export/g" "${INSTALLDIR}/root/.bashrc"
|
||||
sed -i "s/^# eval/eval/g" "${INSTALLDIR}/root/.bashrc"
|
||||
sed -i "s/^# alias/alias/g" "${INSTALLDIR}/root/.bashrc"
|
||||
sed -i "s/^#force_color_prompt/force_color_prompt/g" "${INSTALLDIR}/home/user/.bashrc"
|
||||
sed -i "s/#alias/alias/g" "${INSTALLDIR}/home/user/.bashrc"
|
||||
sed -i "s/alias l='ls -CF'/alias l='ls -l'/g" "${INSTALLDIR}/home/user/.bashrc"
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Remove apt-cacher-ng'
|
||||
#### '----------------------------------------------------------------------
|
||||
chroot service apt-cacher-ng stop || :
|
||||
chroot update-rc.d apt-cacher-ng disable || :
|
||||
DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \
|
||||
chroot apt-get.anondist-orig -y --force-yes remove --purge apt-cacher-ng
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Remove original sources.list (Whonix copied them to .../debian.list)'
|
||||
#### '----------------------------------------------------------------------
|
||||
rm -f "${INSTALLDIR}/etc/apt/sources.list"
|
||||
|
||||
DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \
|
||||
chroot apt-get.anondist-orig update
|
||||
|
||||
touch "${INSTALLDIR}/${TMPDIR}/.whonix_post"
|
||||
fi
|
||||
|
||||
|
||||
##### '-------------------------------------------------------------------------
|
||||
debug ' Temporarily retore original apt-get for remainder of install process'
|
||||
##### '-------------------------------------------------------------------------
|
||||
pushd "${INSTALLDIR}/usr/bin"
|
||||
{
|
||||
rm -f apt-get;
|
||||
cp -p apt-get.anondist-orig apt-get;
|
||||
}
|
||||
popd
|
||||
|
||||
#### '----------------------------------------------------------------------
|
||||
info ' Cleanup'
|
||||
#### '----------------------------------------------------------------------
|
||||
trap - ERR EXIT
|
||||
trap
|
@ -1,40 +0,0 @@
|
||||
#!/bin/bash -e
|
||||
# vim: set ts=4 sw=4 sts=4 et :
|
||||
|
||||
source "${SCRIPTSDIR}/vars.sh"
|
||||
source "${SCRIPTSDIR}/distribution.sh"
|
||||
|
||||
##### '-------------------------------------------------------------------------
|
||||
debug ' Installing qubes-whonix package(s)'
|
||||
##### '-------------------------------------------------------------------------
|
||||
|
||||
|
||||
# If .prepared_debootstrap has not been completed, don't continue
|
||||
exitOnNoFile "${INSTALLDIR}/${TMPDIR}/.prepared_qubes" "prepared_qubes installataion has not completed!... Exiting"
|
||||
|
||||
# Create system mount points.
|
||||
prepareChroot
|
||||
|
||||
|
||||
#### '--------------------------------------------------------------------------
|
||||
info ' Trap ERR and EXIT signals and cleanup (umount)'
|
||||
#### '--------------------------------------------------------------------------
|
||||
trap cleanup ERR
|
||||
trap cleanup EXIT
|
||||
|
||||
#### '--------------------------------------------------------------------------
|
||||
info ' Installing qubes-whonix and other required packages'
|
||||
#### '--------------------------------------------------------------------------
|
||||
# whonix-setup-wizard expects '/usr/local/share/applications' directory to exist
|
||||
chroot mkdir -p '/usr/local/share/applications' # whonix-setup-wizard needs this
|
||||
|
||||
installQubesRepo
|
||||
aptInstall python-guimessages whonix-setup-wizard qubes-whonix
|
||||
uninstallQubesRepo
|
||||
|
||||
#### '--------------------------------------------------------------------------
|
||||
info ' Cleanup'
|
||||
#### '--------------------------------------------------------------------------
|
||||
umount_all "${INSTALLDIR}/" || true
|
||||
trap - ERR EXIT
|
||||
trap
|
@ -1,40 +0,0 @@
|
||||
#!/bin/bash -e
|
||||
# vim: set ts=4 sw=4 sts=4 et :
|
||||
|
||||
source "${SCRIPTSDIR}/vars.sh"
|
||||
source "${SCRIPTSDIR}/distribution.sh"
|
||||
|
||||
##### '-------------------------------------------------------------------------
|
||||
debug ' Whonix post installation cleanup'
|
||||
##### '-------------------------------------------------------------------------
|
||||
|
||||
|
||||
#### '--------------------------------------------------------------------------
|
||||
info ' Restoring Whonix apt-get'
|
||||
#### '--------------------------------------------------------------------------
|
||||
pushd "${INSTALLDIR}/usr/bin"
|
||||
{
|
||||
rm -f apt-get;
|
||||
cp -p apt-get.anondist apt-get;
|
||||
}
|
||||
popd
|
||||
|
||||
#### '--------------------------------------------------------------------------
|
||||
info ' Restoring Whonix resolv.conf'
|
||||
#### '--------------------------------------------------------------------------
|
||||
pushd "${INSTALLDIR}/etc"
|
||||
{
|
||||
rm -f resolv.conf;
|
||||
cp -p resolv.conf.anondist resolv.conf;
|
||||
}
|
||||
popd
|
||||
|
||||
#### '--------------------------------------------------------------------------
|
||||
info ' Removing files created during installation that are no longer required'
|
||||
#### '--------------------------------------------------------------------------
|
||||
rm -rf "${INSTALLDIR}/home.orig/user/Whonix"
|
||||
rm -rf "${INSTALLDIR}/home.orig/user/whonix_binary"
|
||||
rm -f "${INSTALLDIR}/home.orig/user/whonix_fix"
|
||||
rm -f "${INSTALLDIR}/home.orig/user/whonix_build.sh"
|
||||
rm -f "${INSTALLDIR}/etc/sudoers.d/whonix-build"
|
||||
rm -f "${TMPDIR}/etc/sudoers.d/whonix-build"
|
@ -1,21 +0,0 @@
|
||||
# file: etc/hostname
|
||||
# owner: root
|
||||
# group: root
|
||||
user::rw-
|
||||
group::r--
|
||||
other::r--
|
||||
|
||||
# file: etc/sudoers.d
|
||||
# owner: root
|
||||
# group: root
|
||||
user::rwx
|
||||
group::--x
|
||||
other::---
|
||||
|
||||
# file: etc/sudoers.d/whonix-build
|
||||
# owner: root
|
||||
# group: root
|
||||
user::r--
|
||||
group::r--
|
||||
other::---
|
||||
|
@ -1 +0,0 @@
|
||||
host
|
@ -1 +0,0 @@
|
||||
user ALL=(ALL) NOPASSWD: ALL
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user