From 7e178473778b8e448ff4c528abf6253661c552e4 Mon Sep 17 00:00:00 2001 From: Olivier Medoc Date: Fri, 25 Jan 2013 09:03:51 +0100 Subject: [PATCH 01/29] template_builder: made make scripts OS independent. An important note is that each OS script need to setup itself its own chroot environment (like creating /proc...). --- .gitignore | 2 + Makefile | 2 +- build_template_rpm | 1 + cleanup_image | 10 ++--- fedorize_image | 40 ++++++------------ qubeize_image | 22 ++++------ .../clean-volatile.img.tar | Bin {clean_images => scripts_fc17}/network | 0 {clean_images => scripts_fc17}/packages.list | 0 {clean_images => scripts_fc17}/part.bin | Bin {clean_images => scripts_fc17}/resolv.conf | 0 templates.spec | 2 +- yum_repo_qubes/.gitignore | 1 + 13 files changed, 31 insertions(+), 49 deletions(-) rename {clean_images => scripts_fc17}/clean-volatile.img.tar (100%) rename {clean_images => scripts_fc17}/network (100%) rename {clean_images => scripts_fc17}/packages.list (100%) rename {clean_images => scripts_fc17}/part.bin (100%) rename {clean_images => scripts_fc17}/resolv.conf (100%) diff --git a/.gitignore b/.gitignore index 1284d5f..7fad1ab 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ base_rpms keys appmenus build_timestamp +*.iso +*.fs diff --git a/Makefile b/Makefile index b373ba6..ffee2c0 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ rpms: @echo $(TIMESTAMP) > build_timestamp @echo "Building template: $(TEMPLATE_NAME)" @createrepo -q -g $$PWD/comps-qubes-template.xml yum_repo_qubes/$(DIST) -o yum_repo_qubes/$(DIST) && \ - sudo -E ./fedorize_image fedorized_images/$(TEMPLATE_NAME).img clean_images/packages.list && \ + sudo -E ./fedorize_image fedorized_images/$(TEMPLATE_NAME).img && \ sudo -E ./qubeize_image fedorized_images/$(TEMPLATE_NAME).img $(TEMPLATE_NAME) && \ ./build_template_rpm $(TEMPLATE_NAME) || exit 1; \ diff --git a/build_template_rpm b/build_template_rpm index c63c8e1..c98a1c9 100755 --- a/build_template_rpm +++ b/build_template_rpm @@ -8,6 +8,7 @@ fi rpmbuild --target noarch \ --define "template_name $NAME" \ + --define "DIST $DIST" \ --define "_topdir $PWD/rpmbuild" \ --define "_tmppath $PWD/rpmbuild/tmp" \ -bb templates.spec diff --git a/cleanup_image b/cleanup_image index cae3612..2673513 100755 --- a/cleanup_image +++ b/cleanup_image @@ -1,6 +1,6 @@ #!/bin/sh -IMG=$1 +export IMG=$1 set -e @@ -16,13 +16,9 @@ if ! [ -f $IMG ]; then fi ls -als $IMG mount -o loop $IMG mnt || exit 1 -INSTALLDIR=`pwd`/mnt/ -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 +export INSTALLDIR=`pwd`/mnt/ -# 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 +scripts_"${DIST}"/09_cleanup.sh echo "--> Compacting image file..." dd if=/dev/zero of=mnt/fillme bs=1M > /dev/null 2>&1 || true diff --git a/fedorize_image b/fedorize_image index 72bc33c..ba8f398 100755 --- a/fedorize_image +++ b/fedorize_image @@ -1,31 +1,28 @@ #!/bin/sh -IMG=$1 -PKGLISTFILE=$2 +export IMG=$1 RETCODE=0 : ${DIST=fc14} -if ! [ $# -eq 2 ]; then -echo "usage $0 " +if ! [ $# -eq 1 ]; then +echo "usage $0 " exit fi if [ "$VERBOSE" == "1" ]; then - YUM_OPTS="$YUM_OPTS -q" + export YUM_OPTS="$YUM_OPTS -q" fi if [ -f $IMG ]; then echo "-> Image file already exists, assuming *update*..." mount -o loop $IMG mnt || exit 1 - INSTALLDIR=`pwd`/mnt/ + export INSTALLDIR=`pwd`/mnt/ else echo "-> Preparing instalation of $DIST template..." - rm -f keys base_rpms - ln -sf keys_$DIST keys - ln -sf base_rpms_$DIST base_rpms + scripts_"${DIST}"/00_prepare.sh echo "-> Initializing empty image..." truncate -s 10G $IMG || exit 1 @@ -36,29 +33,18 @@ else mkdir -p mnt mount -o loop $IMG mnt || exit 1 - INSTALLDIR=`pwd`/mnt/ + export INSTALLDIR=`pwd`/mnt/ - echo "-> Initializing RPM database..." - rpm --initdb --root=$INSTALLDIR - rpm --import --root=$INSTALLDIR keys/* - - echo "-> Installing core RPM packages..." - rpm -i --root=$INSTALLDIR base_rpms/*.rpm || exit 1 - - cp clean_images/network $INSTALLDIR/etc/sysconfig - cp clean_images/resolv.conf $INSTALLDIR/etc - cp -a /dev/null /dev/zero /dev/random /dev/urandom $INSTALLDIR/dev/ + scripts_"${DIST}"/01_install_core.sh fi -mount -t proc proc mnt/proc -PKGGROUPS=$(cat $PKGLISTFILE) -export YUM0=$PWD/yum_repo_qubes +export PKGGROUPS=$(cat scripts_"${DIST}/packages.list") + echo "-> Installing package groups..." -yum clean all -c $PWD/yum.conf $YUM_OPTS -y --installroot=$PWD/mnt -yum install -c $PWD/yum.conf $YUM_OPTS -y --installroot=$INSTALLDIR $PKGGROUPS || RETCODE=1 -yum update -c $PWD/yum.conf $YUM_OPTS -y --installroot=$INSTALLDIR || RETCODE=1 +scripts_"${DIST}"/02_install_groups.sh -umount mnt/proc mnt +echo "-> Unmounting fedorized_image..." +sudo umount $INSTALLDIR exit $RETCODE diff --git a/qubeize_image b/qubeize_image index e7fcc9f..59cb4f8 100755 --- a/qubeize_image +++ b/qubeize_image @@ -1,7 +1,7 @@ #!/bin/sh -CLEANIMG=$1 -NAME=$2 +export CLEANIMG=$1 +export NAME=$2 set -e @@ -39,26 +39,22 @@ function cleanup() { trap cleanup ERR -IMG=qubeized_images/$NAME-root.img +export IMG=qubeized_images/$NAME-root.img echo "--> Copying $CLEANIMG to $IMG..." +echo "--> cp could fail with a sparse file error" cp $CLEANIMG $IMG || exit 1 echo "--> Mouting $IMG" mkdir -p mnt mount -o loop $IMG mnt || exit 1 -mount -t proc proc mnt/proc +export INSTALLDIR=mnt -echo "--> Installing RPMs..." -export YUM0=$PWD/yum_repo_qubes -yum install -c $PWD/yum.conf $YUM_OPTS -y --installroot=$(pwd)/mnt @qubes-vm - -echo "--> Installing 3rd party apps" -./add_3rd_party_software.sh +scripts_"${DIST}"/04_install_qubes.sh echo "--> Copying the Apps Menu shortcuts..." -APPSORIG=qubeized_images/$NAME-apps.orig -APPSTEMPL=qubeized_images/$NAME-apps.templates +export APPSORIG=qubeized_images/$NAME-apps.orig +export APPSTEMPL=qubeized_images/$NAME-apps.templates mkdir -p $APPSORIG cp -r $(pwd)/mnt/usr/share/applications/* $APPSORIG @@ -87,7 +83,7 @@ if ! [ -r mnt/etc/sysconfig/i18n ]; then fi echo "--> Unmounting $IMG" -umount mnt/proc mnt +umount mnt echo "Qubeized image stored at: $IMG" diff --git a/clean_images/clean-volatile.img.tar b/scripts_fc17/clean-volatile.img.tar similarity index 100% rename from clean_images/clean-volatile.img.tar rename to scripts_fc17/clean-volatile.img.tar diff --git a/clean_images/network b/scripts_fc17/network similarity index 100% rename from clean_images/network rename to scripts_fc17/network diff --git a/clean_images/packages.list b/scripts_fc17/packages.list similarity index 100% rename from clean_images/packages.list rename to scripts_fc17/packages.list diff --git a/clean_images/part.bin b/scripts_fc17/part.bin similarity index 100% rename from clean_images/part.bin rename to scripts_fc17/part.bin diff --git a/clean_images/resolv.conf b/scripts_fc17/resolv.conf similarity index 100% rename from clean_images/resolv.conf rename to scripts_fc17/resolv.conf diff --git a/templates.spec b/templates.spec index 98d1dae..9f7dc73 100644 --- a/templates.spec +++ b/templates.spec @@ -44,7 +44,7 @@ touch $RPM_BUILD_ROOT/%{dest_dir}/root.img # we will create the real file in %po touch $RPM_BUILD_ROOT/%{dest_dir}/private.img # we will create the real file in %post touch $RPM_BUILD_ROOT/%{dest_dir}/volatile.img # we will create the real file in %post -cp clean_images/clean-volatile.img.tar $RPM_BUILD_ROOT/%{dest_dir}/clean-volatile.img.tar +cp scripts_%{DIST}/clean-volatile.img.tar $RPM_BUILD_ROOT/%{dest_dir}/clean-volatile.img.tar mkdir -p $RPM_BUILD_ROOT/%{dest_dir}/apps.templates mkdir -p $RPM_BUILD_ROOT/%{dest_dir}/apps diff --git a/yum_repo_qubes/.gitignore b/yum_repo_qubes/.gitignore index 595ccdb..a6b5bba 100644 --- a/yum_repo_qubes/.gitignore +++ b/yum_repo_qubes/.gitignore @@ -1 +1,2 @@ fc* +archlinux* From 588a55f0a6588be077bc9b28803493024623dbfb Mon Sep 17 00:00:00 2001 From: Olivier Medoc Date: Fri, 25 Jan 2013 09:06:20 +0100 Subject: [PATCH 02/29] template-builder: creation of script for fedora core 17 template building --- scripts_fc17/00_prepare.sh | 5 +++++ scripts_fc17/01_install_core.sh | 12 ++++++++++++ scripts_fc17/02_install_groups.sh | 10 ++++++++++ scripts_fc17/04_install_qubes.sh | 12 ++++++++++++ scripts_fc17/09_cleanup.sh | 8 ++++++++ 5 files changed, 47 insertions(+) create mode 100755 scripts_fc17/00_prepare.sh create mode 100755 scripts_fc17/01_install_core.sh create mode 100755 scripts_fc17/02_install_groups.sh create mode 100755 scripts_fc17/04_install_qubes.sh create mode 100755 scripts_fc17/09_cleanup.sh diff --git a/scripts_fc17/00_prepare.sh b/scripts_fc17/00_prepare.sh new file mode 100755 index 0000000..a6634bd --- /dev/null +++ b/scripts_fc17/00_prepare.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +rm -f keys base_rpms +ln -sf keys_$DIST keys +ln -sf base_rpms_$DIST base_rpms diff --git a/scripts_fc17/01_install_core.sh b/scripts_fc17/01_install_core.sh new file mode 100755 index 0000000..a42d30a --- /dev/null +++ b/scripts_fc17/01_install_core.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +echo "-> Initializing RPM database..." +rpm --initdb --root=$INSTALLDIR +rpm --import --root=$INSTALLDIR keys/* + +echo "-> Installing core RPM packages..." +rpm -i --root=$INSTALLDIR base_rpms/*.rpm || exit 1 + +cp scripts_"${DIST}"/resolv.conf $INSTALLDIR/etc +cp scripts_"${DIST}"/network $INSTALLDIR/etc/sysconfig +cp -a /dev/null /dev/zero /dev/random /dev/urandom $INSTALLDIR/dev/ diff --git a/scripts_fc17/02_install_groups.sh b/scripts_fc17/02_install_groups.sh new file mode 100755 index 0000000..86ceade --- /dev/null +++ b/scripts_fc17/02_install_groups.sh @@ -0,0 +1,10 @@ +#!/bin/sh +echo "--> Preparing environment..." +mount -t proc proc mnt/proc + +export YUM0=$PWD/yum_repo_qubes +yum clean all -c $PWD/yum.conf $YUM_OPTS -y --installroot=$PWD/mnt +yum install -c $PWD/yum.conf $YUM_OPTS -y --installroot=$INSTALLDIR $PKGGROUPS || RETCODE=1 +yum update -c $PWD/yum.conf $YUM_OPTS -y --installroot=$INSTALLDIR || RETCODE=1 + +umount mnt/proc mnt diff --git a/scripts_fc17/04_install_qubes.sh b/scripts_fc17/04_install_qubes.sh new file mode 100755 index 0000000..2cba51b --- /dev/null +++ b/scripts_fc17/04_install_qubes.sh @@ -0,0 +1,12 @@ +#!/bin/sh +echo "--> Preparing environment..." +mount -t proc proc $PWD/proc + +echo "--> Installing RPMs..." +export YUM0=$PWD/yum_repo_qubes +yum install -c $PWD/yum.conf $YUM_OPTS -y --installroot=$(pwd)/mnt @qubes-vm + +echo "--> Installing 3rd party apps" +./add_3rd_party_software.sh + +sudo umount $PWD/proc diff --git a/scripts_fc17/09_cleanup.sh b/scripts_fc17/09_cleanup.sh new file mode 100755 index 0000000..bf60eec --- /dev/null +++ b/scripts_fc17/09_cleanup.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +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 From 13c8c08d29136246c2186ffd5344e729d8fbee4d Mon Sep 17 00:00:00 2001 From: Olivier Medoc Date: Fri, 25 Jan 2013 09:07:01 +0100 Subject: [PATCH 03/29] template-builder: creation of script for archlinux template building. Note: the template build successfully but has not been tested. Note: the livecd should be verified before building the template (Checksum/PGP) --- scripts_archlinux/00_prepare.sh | 10 ++++++++ scripts_archlinux/01_install_core.sh | 23 +++++++++++++++++++ scripts_archlinux/02_install_groups.sh | 11 +++++++++ scripts_archlinux/04_install_qubes.sh | 28 +++++++++++++++++++++++ scripts_archlinux/09_cleanup.sh | 24 +++++++++++++++++++ scripts_archlinux/clean-volatile.img.tar | Bin 0 -> 10240 bytes scripts_archlinux/network | 1 + scripts_archlinux/packages.list | 18 +++++++++++++++ scripts_archlinux/part.bin | Bin 0 -> 512 bytes scripts_archlinux/resolv.conf | 1 + 10 files changed, 116 insertions(+) create mode 100755 scripts_archlinux/00_prepare.sh create mode 100755 scripts_archlinux/01_install_core.sh create mode 100755 scripts_archlinux/02_install_groups.sh create mode 100755 scripts_archlinux/04_install_qubes.sh create mode 100755 scripts_archlinux/09_cleanup.sh create mode 100644 scripts_archlinux/clean-volatile.img.tar create mode 100644 scripts_archlinux/network create mode 100644 scripts_archlinux/packages.list create mode 100644 scripts_archlinux/part.bin create mode 100644 scripts_archlinux/resolv.conf diff --git a/scripts_archlinux/00_prepare.sh b/scripts_archlinux/00_prepare.sh new file mode 100755 index 0000000..5fd3141 --- /dev/null +++ b/scripts_archlinux/00_prepare.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +echo "Downloading Archlinux dvd..." +wget -O "archlinux.iso" "http://mir.archlinux.fr/iso/latest/arch/x86_64/root-image.fs.sfs" --continue + +echo "Extracting squash filesystem from DVD..." +mkdir archlinux_dvd +sudo mount -o loop archlinux.iso archlinux_dvd +cp archlinux_dvd/root-image.fs . +sudo umount archlinux_dvd diff --git a/scripts_archlinux/01_install_core.sh b/scripts_archlinux/01_install_core.sh new file mode 100755 index 0000000..eb811a2 --- /dev/null +++ b/scripts_archlinux/01_install_core.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +echo "Mounting archlinux install system into archlinux_dvd..." +sudo mount root-image.fs archlinux_dvd + +echo "Creating chroot bootstrap environment" + +sudo mount --bind $INSTALLDIR archlinux_dvd/mnt +sudo cp /etc/resolv.conf archlinux_dvd/etc + +echo "-> Initializing pacman keychain" +sudo ./archlinux_dvd/usr/bin/arch-chroot archlinux_dvd/ pacman-key --init +sudo ./archlinux_dvd/usr/bin/arch-chroot archlinux_dvd/ pacman-key --populate + +echo "-> Installing core pacman packages..." +sudo ./archlinux_dvd/usr/bin/arch-chroot archlinux_dvd/ sh -c 'pacstrap /mnt base' + +echo "-> Cleaning up bootstrap environment" +sudo umount archlinux_dvd/mnt + +sudo umount archlinux_dvd + +cp scripts_"${DIST}"/resolv.conf $INSTALLDIR/etc diff --git a/scripts_archlinux/02_install_groups.sh b/scripts_archlinux/02_install_groups.sh new file mode 100755 index 0000000..3d5b132 --- /dev/null +++ b/scripts_archlinux/02_install_groups.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +echo "Mounting archlinux install system into archlinux_dvd..." +sudo mount root-image.fs archlinux_dvd + +echo "-> Installing archlinux package groups..." +echo "-> Selected packages:" +echo "$PKGGROUPS" +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --needed --noconfirm -S $PKGGROUPS + +sudo umount archlinux_dvd diff --git a/scripts_archlinux/04_install_qubes.sh b/scripts_archlinux/04_install_qubes.sh new file mode 100755 index 0000000..cc97c16 --- /dev/null +++ b/scripts_archlinux/04_install_qubes.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +echo "Mounting archlinux install system into archlinux_dvd..." +sudo mount root-image.fs archlinux_dvd + +echo $INSTALLDIR + +echo "--> Installing yaourt..." +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'cd tmp && wget https://aur.archlinux.org/packages/pa/package-query/package-query.tar.gz && tar xzvf package-query.tar.gz && cd package-query && makepkg --asroot && pacman --noconfirm -U package-query-*.pkg.tar.xz' +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'cd tmp && wget https://aur.archlinux.org/packages/ya/yaourt/yaourt.tar.gz && tar xzvf yaourt.tar.gz && cd yaourt && makepkg --asroot && pacman --noconfirm -U yaourt-*.pkg.tar.xz' + +echo "--> Preparing build environment inside the chroot..." +# Notes for qubes-vm-xen +# Note: we need more ram for /tmp (at least 700M of disk space for compiling XEN because of the sources...) +sudo sed 's:-t tmpfs -o mode=1777,strictatime,nodev,:-t tmpfs -o size=700M,mode=1777,strictatime,nodev,:' -i ./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" +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "pacman -Sy" + +echo "--> Compiling and installing qubes-packages..." +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "yaourt --noconfirm -S qubes-vm-xen" +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "yaourt --noconfirm -S qubes-vm-core" +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "yaourt --noconfirm -S qubes-vm-gui" + +sudo umount archlinux_dvd diff --git a/scripts_archlinux/09_cleanup.sh b/scripts_archlinux/09_cleanup.sh new file mode 100755 index 0000000..70744c0 --- /dev/null +++ b/scripts_archlinux/09_cleanup.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +echo "Mounting archlinux install system into archlinux_dvd..." +sudo mount root-image.fs archlinux_dvd + +echo "--> Starting cleanup actions" +# Remove unused packages and their dependencies (make dependencies) +cleanuppkgs=`sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman -Qdt | cut -d " " -f 1` +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Rsc $cleanuppkgs + +# Remove yaourt dependencies +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Rsc binutils yajl gcc make + +# Clean pacman cache +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Scc + +sudo umount 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 diff --git a/scripts_archlinux/clean-volatile.img.tar b/scripts_archlinux/clean-volatile.img.tar new file mode 100644 index 0000000000000000000000000000000000000000..5257a1029acf7947eaa63fc2fd87054fdb5d8481 GIT binary patch literal 10240 zcmeIuze~eF6u|MPE?t~mqmwRrNz+R=sp4J;B90x36e>c~I%@=79lE(W=C5$}5AeTm z5FB)>?^28QhU(HG@O_ZnyZ2sx+~@M5-x>D$-QC{#nJg)chPAP{HStz0)%B7vY{a24 zQQanDqNri51nH9gXYRG5Y}gqDfsC^5V6Ne9{_1<<|KB>5?dR|r$)v5L%cub%kz ztLZ0KpLEsUEJS`crZe0tFK|2F$n+4wrsTzTE;V(e*d!9T=XP81Q4jIKzh<@r|s6^QB>6v@ZSg^fB*srAbF{(3|Eu8 z1>(OlLK&h#zix!15OKb1g!jOIV}v6R#Z#q9L4>LKg_lsQs&gWKw)7lI^VK;JCslPp wg%$#Duq%AXgMQYA>-B9qO)V24sKrS#M)lhb5dqaJw1523^6>Se|K>{b3dJqN-~a#s literal 0 HcmV?d00001 diff --git a/scripts_archlinux/resolv.conf b/scripts_archlinux/resolv.conf new file mode 100644 index 0000000..6e7633b --- /dev/null +++ b/scripts_archlinux/resolv.conf @@ -0,0 +1 @@ +# This file intentionally left blank From 2333bf24c0e39731d5170d6e92ac94d71d67631d Mon Sep 17 00:00:00 2001 From: Olivier Medoc Date: Fri, 8 Feb 2013 11:30:47 +0100 Subject: [PATCH 04/29] scripts_archlinux: install dev tools as dependencies to ease template cleanup --- scripts_archlinux/04_install_qubes.sh | 2 ++ scripts_archlinux/09_cleanup.sh | 3 --- scripts_archlinux/packages.list | 5 +---- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/scripts_archlinux/04_install_qubes.sh b/scripts_archlinux/04_install_qubes.sh index cc97c16..6b02b5c 100755 --- a/scripts_archlinux/04_install_qubes.sh +++ b/scripts_archlinux/04_install_qubes.sh @@ -4,6 +4,8 @@ echo "Mounting archlinux install system into archlinux_dvd..." sudo mount root-image.fs archlinux_dvd echo $INSTALLDIR +echo "--> Installing yaourt make dependencies..." +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'pacman -S --asdeps binutils yajl gcc make' echo "--> Installing yaourt..." sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'cd tmp && wget https://aur.archlinux.org/packages/pa/package-query/package-query.tar.gz && tar xzvf package-query.tar.gz && cd package-query && makepkg --asroot && pacman --noconfirm -U package-query-*.pkg.tar.xz' diff --git a/scripts_archlinux/09_cleanup.sh b/scripts_archlinux/09_cleanup.sh index 70744c0..208accb 100755 --- a/scripts_archlinux/09_cleanup.sh +++ b/scripts_archlinux/09_cleanup.sh @@ -8,9 +8,6 @@ echo "--> Starting cleanup actions" cleanuppkgs=`sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman -Qdt | cut -d " " -f 1` sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Rsc $cleanuppkgs -# Remove yaourt dependencies -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Rsc binutils yajl gcc make - # Clean pacman cache sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Scc diff --git a/scripts_archlinux/packages.list b/scripts_archlinux/packages.list index 9920d0c..af28db7 100644 --- a/scripts_archlinux/packages.list +++ b/scripts_archlinux/packages.list @@ -12,7 +12,4 @@ ttf-dejavu ttf-freefont wget zsh -binutils -yajl -gcc -make +xfce4-terminal From 2478ad1b9dd07b23a815c5299b539eaa27a97e70 Mon Sep 17 00:00:00 2001 From: Olivier Medoc Date: Fri, 8 Feb 2013 15:31:19 +0100 Subject: [PATCH 05/29] scripts_archlinux: implemented iso file verification --- scripts_archlinux/00_prepare.sh | 16 ++++++++++++++-- .../archlinux-2013.02.01-dual.iso.sig | Bin 0 -> 287 bytes 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 scripts_archlinux/archlinux-2013.02.01-dual.iso.sig diff --git a/scripts_archlinux/00_prepare.sh b/scripts_archlinux/00_prepare.sh index 5fd3141..616ec3d 100755 --- a/scripts_archlinux/00_prepare.sh +++ b/scripts_archlinux/00_prepare.sh @@ -1,10 +1,22 @@ #!/bin/sh +ISO_VERSION=2013.02.01 + echo "Downloading Archlinux dvd..." -wget -O "archlinux.iso" "http://mir.archlinux.fr/iso/latest/arch/x86_64/root-image.fs.sfs" --continue +wget -O "archlinux-$ISO_VERSION-dual.iso" "http://mir.archlinux.fr/iso/$ISO_VERSION/archlinux-$ISO_VERSION-dual.iso" --continue + +echo "Verifying dvd..." +echo "If verification fails, ensure that you imported and verified the archlinux key" +echo "eg: gpg --recv-keys 9741E8AC" + +gpg --verify "./scripts_archlinux/archlinux-$ISO_VERSION-dual.iso.sig" "archlinux-$ISO_VERSION-dual.iso" || exit echo "Extracting squash filesystem from DVD..." mkdir archlinux_dvd -sudo mount -o loop archlinux.iso archlinux_dvd +sudo mount -o loop "archlinux-$ISO_VERSION-dual.iso" archlinux_dvd +cp archlinux_dvd/arch/x86_64/root-image.fs.sfs . +sudo umount archlinux_dvd +sudo mount -o loop root-image.fs.sfs archlinux_dvd cp archlinux_dvd/root-image.fs . sudo umount archlinux_dvd +rm root-image.fs.sfs diff --git a/scripts_archlinux/archlinux-2013.02.01-dual.iso.sig b/scripts_archlinux/archlinux-2013.02.01-dual.iso.sig new file mode 100644 index 0000000000000000000000000000000000000000..d8d53e6106bffd43c49b5bb044cef4a57f2e92f6 GIT binary patch literal 287 zcmV+)0pR|L0UQJX0RjL91p-kD`2PS32@roRLra%I=&TC@2l)ZR>B8eSso=$ni8we5 zzmrZ*9gS$zD#zW%?VfGqI@yYwe|?9ZbtHd*8he)%TFS! zyI^VWl1ogf?s&Y-)^AB>ndq^H-4^-%A!)=Xv40A-W>3c)5ma67LWvd&M1cJeZ~O^G zqkNKU1&4zw{g`6sE-N4-IS6! Date: Fri, 8 Feb 2013 15:32:38 +0100 Subject: [PATCH 06/29] scripts_archlinux: implemented AUR package verification --- scripts_archlinux/04_install_qubes.sh | 32 +++++++++++++----- scripts_archlinux/09_cleanup.sh | 5 +++ scripts_archlinux/CF8D4BBE.pub | Bin 0 -> 1206 bytes scripts_archlinux/build_package.sh | 27 +++++++++++++++ scripts_archlinux/qubes-vm-core.tar.gz.sig | Bin 0 -> 287 bytes scripts_archlinux/qubes-vm-gui.tar.gz.sig | Bin 0 -> 287 bytes .../qubes-vm-kernel-modules.tar.gz.sig | Bin 0 -> 287 bytes scripts_archlinux/qubes-vm-xen.tar.gz.sig | Bin 0 -> 287 bytes 8 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 scripts_archlinux/CF8D4BBE.pub create mode 100644 scripts_archlinux/build_package.sh create mode 100644 scripts_archlinux/qubes-vm-core.tar.gz.sig create mode 100644 scripts_archlinux/qubes-vm-gui.tar.gz.sig create mode 100644 scripts_archlinux/qubes-vm-kernel-modules.tar.gz.sig create mode 100644 scripts_archlinux/qubes-vm-xen.tar.gz.sig diff --git a/scripts_archlinux/04_install_qubes.sh b/scripts_archlinux/04_install_qubes.sh index 6b02b5c..2c8c4b6 100755 --- a/scripts_archlinux/04_install_qubes.sh +++ b/scripts_archlinux/04_install_qubes.sh @@ -3,18 +3,20 @@ echo "Mounting archlinux install system into archlinux_dvd..." sudo mount root-image.fs archlinux_dvd -echo $INSTALLDIR -echo "--> Installing yaourt make dependencies..." -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'pacman -S --asdeps binutils yajl gcc make' +echo "--> Installing make dependencies..." +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'pacman -S --asdeps --needed --noconfirm binutils yajl gcc make' -echo "--> Installing yaourt..." -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'cd tmp && wget https://aur.archlinux.org/packages/pa/package-query/package-query.tar.gz && tar xzvf package-query.tar.gz && cd package-query && makepkg --asroot && pacman --noconfirm -U package-query-*.pkg.tar.xz' -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'cd tmp && wget https://aur.archlinux.org/packages/ya/yaourt/yaourt.tar.gz && tar xzvf yaourt.tar.gz && cd yaourt && makepkg --asroot && pacman --noconfirm -U yaourt-*.pkg.tar.xz' +#echo "--> Installing yaourt..." +#sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'cd tmp && wget https://aur.archlinux.org/packages/pa/package-query/package-query.tar.gz && tar xzvf package-query.tar.gz && cd package-query && makepkg --asroot && pacman --noconfirm -U package-query-*.pkg.tar.xz' +#sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'cd tmp && wget https://aur.archlinux.org/packages/ya/yaourt/yaourt.tar.gz && tar xzvf yaourt.tar.gz && cd yaourt && makepkg --asroot && pacman --noconfirm -U yaourt-*.pkg.tar.xz' echo "--> Preparing build environment inside the chroot..." # Notes for qubes-vm-xen # Note: we need more ram for /tmp (at least 700M of disk space for compiling XEN because of the sources...) sudo sed 's:-t tmpfs -o mode=1777,strictatime,nodev,:-t tmpfs -o size=700M,mode=1777,strictatime,nodev,:' -i ./archlinux_dvd/usr/bin/arch-chroot +sudo cp ./scripts_archlinux/build_package.sh $INSTALLDIR/etc/ +sudo cp ./scripts_archlinux/CF8D4BBE.pub $INSTALLDIR/etc/ +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "gpg --import /etc/CF8D4BBE.pub" # Note: Enable x86 repos su -c "echo '[multilib]' >> $INSTALLDIR/etc/pacman.conf" @@ -23,8 +25,20 @@ su -c "echo 'Include = /etc/pacman.d/mirrorlist' >> $INSTALLDIR/etc/pacman.conf" sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "pacman -Sy" echo "--> Compiling and installing qubes-packages..." -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "yaourt --noconfirm -S qubes-vm-xen" -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "yaourt --noconfirm -S qubes-vm-core" -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "yaourt --noconfirm -S qubes-vm-gui" +sudo cp ./scripts_archlinux/qubes-vm-xen.tar.gz.sig $INSTALLDIR/etc/package.sig +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR bash /etc/build_package.sh qubes-vm-xen +sudo cp ./scripts_archlinux/qubes-vm-core.tar.gz.sig $INSTALLDIR/etc/package.sig +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR bash /etc/build_package.sh qubes-vm-core +sudo cp ./scripts_archlinux/qubes-vm-gui.tar.gz.sig $INSTALLDIR/etc/package.sig +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR bash /etc/build_package.sh qubes-vm-gui +sudo cp ./scripts_archlinux/qubes-vm-kernel-modules.tar.gz.sig $INSTALLDIR/etc/package.sig +sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR bash /etc/build_package.sh qubes-vm-kernel-modules + +echo "--> Updating template fstab file..." +sudo su -c "echo '/dev/mapper/dmroot / ext4 defaults,noatime 1 1' >> $INSTALLDIR/etc/fstab" +sudo su -c "echo '/dev/xvdb /rw ext4 defaults,noatime 1 2' >> $INSTALLDIR/etc/fstab" +sudo su -c "echo '/dev/xvdc1 swap swap defaults 0 0' >> $INSTALLDIR/etc/fstab" +sudo su -c "echo '/rw/home /home none noauto,bind,defaults 0 0' >> $INSTALLDIR/etc/fstab" +sudo su -c "echo '/dev/xvdd /usr/lib/modules ext3 defaults,noatime 0 0' >> $INSTALLDIR/etc/fstab" sudo umount archlinux_dvd diff --git a/scripts_archlinux/09_cleanup.sh b/scripts_archlinux/09_cleanup.sh index 208accb..5b833b1 100755 --- a/scripts_archlinux/09_cleanup.sh +++ b/scripts_archlinux/09_cleanup.sh @@ -11,6 +11,11 @@ sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Rsc $cl # Clean pacman cache sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Scc +# Remove build data +rm $INSTALLDIR/etc/build_package.sh +rm $INSTALLDIR/etc/CF8D4BBE.pub +rm $INSTALLDIR/etc/package.sig + sudo umount archlinux_dvd #rm -f $INSTALLDIR/var/lib/rpm/__db.00* $INSTALLDIR/var/lib/rpm/.rpm.lock diff --git a/scripts_archlinux/CF8D4BBE.pub b/scripts_archlinux/CF8D4BBE.pub new file mode 100644 index 0000000000000000000000000000000000000000..8900f6ff7d6b74a5fc1a1f6bea880cff7b3288de GIT binary patch literal 1206 zcmV;n1WEgu0SyFD#h^L?2mtx*n6sBDl=mMl4{ixrx@s*xkEF?dHSAzbRGyddfXMg{ zP!qG{5N9vZ|99)$ic(tBhEgiNNQq%^iVGGi>YZ`C5e(4)7@(+2&xtW$faU}_mO5>> z0-)9SeGF8jTIcgBtGHnfl1K@WxkSJ$&)a#wtxPkrPD3r<)-gu_)&f!#CzqA%OD_24 zuO`NKFe=Z|zbVa2X*J6V8WZA+Sej@$ruh4If0kU8J8@FG=NB|+@#xiBa|WzNPiJPv zwIL+kp{V|2b|SP~*xpXNyE`G!8F-P54CHYptFcJ%!%NcX0t6W0I0Fa<0^34o4Z{yW zTMaLCHmfFZG_me^+djXeY#I#Ph<<}X z`?(Ahb5VJ3$wH%)n_(3BE}b!poJsZi^kkWj-6S{Yt;lkn_d zrz91nYdly*A@%W^;;r^Q3KB+Wccz3;?Y~kcegxauh%T zwG%J8il*R?#)EsWo!yU&{fHCirp|W0Ax$*bqIvDv<3PJJ-n9k)LjvGPAA6ffKxm?> zQM{i)X9l$~c|#<6*`I}IZtIs-%>vVD&E8+`HSPOt`r+Nf^l;o~s;*#glLQ>syFA}+ z`YiQ28rMnEBkc`qU;q{^KEuLN5^H2~4EB>*3TFcSzOxMkvn6uZKg{~Ib$(7{^iE}1 zPuP4eci70k15>a+SD|QTcDp_XC-2aV7y$A@YPFLZzrO$x0RRDs0Urby0RjLC1p-jT zpgIB@3;+rV5X0y58_$hPzUa~j0J0xV4;CFPR#Fp8)~pM%MCLhCg9ll1I4^|ts~|f9 zJVgZK#Oz`VN7)zU!e-LG<}27-vp!Ef` z=@J&RMxt5|0XD|J^`9bo?}WeSIzUsk4_}KIw86wox8{ zOa#pk-S3|1Swzm@@F9@etLI-3*XgvnUsGrUTP$G5h;ZIsc55GbtfL}{P=E^6IAJK( zP^f|Q8NwZo#e=99s_?8IFU8c%{G;&V1r|7VBv88g-%2L!e#db}>fklTdz^XveHTEm U0=Z&8$M0KFl~~&IUj=*OJ45Lq<^TWy literal 0 HcmV?d00001 diff --git a/scripts_archlinux/build_package.sh b/scripts_archlinux/build_package.sh new file mode 100644 index 0000000..0074a9c --- /dev/null +++ b/scripts_archlinux/build_package.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +cd /tmp +mkdir build +cd build + +wget "https://aur.archlinux.org/packages/qu/$1/$1.tar.gz" || exit + +gpg --verify "/etc/package.sig" "$1.tar.gz" || exit + +tar xzvf $1.tar.gz || exit +cd "$1" || exit + +packages=`cat ./PKGBUILD | grep makedepends | cut -d '(' -f 2 | cut -d ')' -f 1` +for package in $packages ; do + pacman -S --asdeps --noconfirm --needed $package +done +packages=`cat ./PKGBUILD | grep depends | cut -d '(' -f 2 | cut -d ')' -f 1` +for package in $packages ; do + pacman -S --asdeps --noconfirm --needed $package +done + +makepkg --asroot || exit + +pacman --noconfirm -U $1-*.pkg.tar.xz || exit + + diff --git a/scripts_archlinux/qubes-vm-core.tar.gz.sig b/scripts_archlinux/qubes-vm-core.tar.gz.sig new file mode 100644 index 0000000000000000000000000000000000000000..ee8b4dfb31c9eebc657368fca9cf582185516315 GIT binary patch literal 287 zcmV+)0pR|L0UQJX0RjL91p-kN?Rx+U2@u2Q^Bd2NOTIlp2mfri{d78;N*AwBK}G5e z(l!P|kTW&*%DL|RLZ#7_r8rxfJ%9~*%p7T%X>u}8+B1#kxL-8s?7B%Cx<6yvdA+>S zQjMRL_Njc!?w0Y_xbZ9s_M`mJXTrvQ7;-?Nwdm^|a4pKkVH$GF3j6-U?9$YshuYR6 z1+6^l)HF4K(;5m*iNn>b+_`l$l}horQunfyHEmoA7jCpaj@BA>`Xwf7CJA)*p=?^< zCu&IjiKb1YX{^=aa@-Y^eittB455urx0WnCuJcsaADOFrzo4vueJ{Qzal+GFn=cm< l+|AwD@wD%#MyXojF_|(bql0TweT1sZPZ)|rDEjbCPFwuLkRbp7 literal 0 HcmV?d00001 diff --git a/scripts_archlinux/qubes-vm-gui.tar.gz.sig b/scripts_archlinux/qubes-vm-gui.tar.gz.sig new file mode 100644 index 0000000000000000000000000000000000000000..7e0618e817032b1678e26ee044756bfe86435ca1 GIT binary patch literal 287 zcmV+)0pR|L0UQJX0RjL91p-kN?S23X2@u2Q^Bd2NOTOrK2mr1g!oH+Y*(iF{dz9ET zGQwC_Wclq;bM{LdAIQS8wZRGcmjUjNcD&LsjGC+Yr=<2Q{q5)J)uEG;ckjA7BYfl4 z+lno$oHhKx!|X;7tzqPIvAb~}zP9c$qmz7=%ZmS-wyN=q%hZN8U$-dx)1vmnXhg4H zkAb707JFaANbZr7X{UB*^h<|JkOJaL0a zFYz!BDm}3y|Nr+f<+~heBBOkv2vv6-t)$fGvKC9lN#<~7vh3PbEbRY01c|5m6%oe` z1Gsqs@qZyU-YRoF#7<{bFvSg+rGd!CNeXIHvJJRjcqI$s4wY=2gt<}Le}B%Wyc2=; zgkl@X)HwK_8hS37F2xtP)Q>S>JZM-oB!`eZ`L~HKiXCdd`vpOk(_QE_#QHp8=B{3G zT`S;!cbPvXC9KtEvRJt2L6(xM)XBBeAA(6QX|?B}sgLhU@?U literal 0 HcmV?d00001 diff --git a/scripts_archlinux/qubes-vm-xen.tar.gz.sig b/scripts_archlinux/qubes-vm-xen.tar.gz.sig new file mode 100644 index 0000000000000000000000000000000000000000..3ed3fa77959a4bf5900105fa66784ad4a585aa55 GIT binary patch literal 287 zcmV+)0pR|L0UQJX0RjL91p-kN>KOnE2@u2Q^Bd2NOTL!p2mqUT`Z%-+cKEKo4h0_W`r;_jh=pCr$-iEJpR=P;5F@HkRs-J0RvMI(Rq~G*54}ZGbvxRllF}H1hboq_ zShbK7=2Cqnq|P|fY~OTO lXyG_3-{#V83DR4Ti-s{OeWRDjnWiek+gu$v&HDx%K_r99hXMcq literal 0 HcmV?d00001 From dac766a085b12dbdfa3b72dbf68dd27f31be0999 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Wed, 6 Feb 2013 14:14:45 +0100 Subject: [PATCH 07/29] spec: minor whitespace fix --- templates.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates.spec b/templates.spec index 9f7dc73..8b4a552 100644 --- a/templates.spec +++ b/templates.spec @@ -16,7 +16,7 @@ URL: http://www.qubes-os.org Source: . Requires: qubes-core-dom0 >= 1.4.1 -Requires: kernel-qubes-vm +Requires: kernel-qubes-vm Requires: xdg-utils Requires(post): tar Requires(post): qubes-core-dom0 From d244c5b7d19211f5918d9e6086abf1640a2787cf Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Wed, 6 Feb 2013 14:14:55 +0100 Subject: [PATCH 08/29] spec: provide 'qubes-template' virtual package --- templates.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/templates.spec b/templates.spec index 8b4a552..514a393 100644 --- a/templates.spec +++ b/templates.spec @@ -20,6 +20,7 @@ Requires: kernel-qubes-vm Requires: xdg-utils Requires(post): tar Requires(post): qubes-core-dom0 +Provides: qubes-template %define _builddir %(pwd) %define _rpmdir %(pwd)/rpm From d4efa678c78999859eecccf2fc149d2807aab1dd Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Sat, 16 Feb 2013 20:48:55 +0100 Subject: [PATCH 09/29] fedorize_image: support per-DIST packages.list Conflicts: Makefile --- fedorize_image | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fedorize_image b/fedorize_image index ba8f398..0752339 100755 --- a/fedorize_image +++ b/fedorize_image @@ -39,7 +39,8 @@ else fi -export PKGGROUPS=$(cat scripts_"${DIST}/packages.list") +PKGLISTFILE=$(shell [ -r scripts_"${DIST}/packages_$(DIST).list" ] && echo scripts_"${DIST}/packages_$(DIST).list" || echo scripts_"${DIST}/packages.list") +export PKGGROUPS=$(cat $PKGLISTFILE) echo "-> Installing package groups..." scripts_"${DIST}"/02_install_groups.sh From 07b7da48fd6a4b6bf4e4453a50ba3a9c3fbe861c Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Thu, 7 Feb 2013 23:29:44 +0100 Subject: [PATCH 10/29] package list for fc18 Fedora 18 have reworked package groups (e.g. introduction of environments) so use separate group list. --- clean_images/packages_fc18.list | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 clean_images/packages_fc18.list diff --git a/clean_images/packages_fc18.list b/clean_images/packages_fc18.list new file mode 100644 index 0000000..3d1a0a3 --- /dev/null +++ b/clean_images/packages_fc18.list @@ -0,0 +1,20 @@ +@^gnome-desktop-environment +@libreoffice +gnupg +xterm +firefox +thunderbird +keepassx +perl-File-MimeInfo +Terminal +--exclude=kdegames +--exclude=firstboot +--exclude=xorg-x11-drv-nouveau +--exclude=firewall-config,firewalld +--exclude=gnome-boxes +git +createrepo +rpm-build +qubes-core-vm-kernel-placeholder +ltrace +strace From b1006d64e1d010a032b1968358ee4f8db9b990ce Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Thu, 7 Feb 2013 23:36:28 +0100 Subject: [PATCH 11/29] use final fedora-release-18 package --- base_rpms_fc18/fedora-release-18-0.8.noarch.rpm | Bin 27596 -> 0 bytes base_rpms_fc18/fedora-release-18-1.noarch.rpm | Bin 0 -> 32176 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 base_rpms_fc18/fedora-release-18-0.8.noarch.rpm create mode 100644 base_rpms_fc18/fedora-release-18-1.noarch.rpm diff --git a/base_rpms_fc18/fedora-release-18-0.8.noarch.rpm b/base_rpms_fc18/fedora-release-18-0.8.noarch.rpm deleted file mode 100644 index 3c711d2a7745409ee69bca9458c302239b41baad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27596 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 literal 0 HcmV?d00001 From 91a632738de1221197eaafc0e71bf10769c95520 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Wed, 13 Feb 2013 17:15:17 +0100 Subject: [PATCH 12/29] fc18: install basic editors (vim, emacs) --- clean_images/packages_fc18.list | 2 ++ 1 file changed, 2 insertions(+) diff --git a/clean_images/packages_fc18.list b/clean_images/packages_fc18.list index 3d1a0a3..1d709c4 100644 --- a/clean_images/packages_fc18.list +++ b/clean_images/packages_fc18.list @@ -1,5 +1,7 @@ @^gnome-desktop-environment @libreoffice +emacs +vim-enhanced gnupg xterm firefox From 746cb149c907ebaf0293582bcb91ce7e9fb7333a Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Sat, 16 Feb 2013 15:27:44 +0100 Subject: [PATCH 13/29] use tabs for indentation in shell scripts --- fedorize_image | 25 ++++++++++++------------- qubeize_image | 20 ++++++++++---------- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/fedorize_image b/fedorize_image index 0752339..7292725 100755 --- a/fedorize_image +++ b/fedorize_image @@ -12,31 +12,30 @@ exit fi if [ "$VERBOSE" == "1" ]; then - export YUM_OPTS="$YUM_OPTS -q" + export YUM_OPTS="$YUM_OPTS -q" fi if [ -f $IMG ]; then - echo "-> Image file already exists, assuming *update*..." - mount -o loop $IMG mnt || exit 1 - export INSTALLDIR=`pwd`/mnt/ + echo "-> Image file already exists, assuming *update*..." + mount -o loop $IMG mnt || exit 1 + export INSTALLDIR=`pwd`/mnt/ else - echo "-> Preparing instalation of $DIST template..." + echo "-> Preparing instalation of $DIST template..." scripts_"${DIST}"/00_prepare.sh - echo "-> Initializing empty image..." - truncate -s 10G $IMG || exit 1 + echo "-> Initializing empty image..." + truncate -s 10G $IMG || exit 1 - echo "-> Creating filesystem..." - mkfs.ext4 -q -F $IMG || exit 1 + echo "-> Creating filesystem..." + mkfs.ext4 -q -F $IMG || exit 1 - mkdir -p mnt - mount -o loop $IMG mnt || exit 1 + mkdir -p mnt + mount -o loop $IMG mnt || exit 1 - export INSTALLDIR=`pwd`/mnt/ + export INSTALLDIR=`pwd`/mnt/ scripts_"${DIST}"/01_install_core.sh - fi PKGLISTFILE=$(shell [ -r scripts_"${DIST}/packages_$(DIST).list" ] && echo scripts_"${DIST}/packages_$(DIST).list" || echo scripts_"${DIST}/packages.list") diff --git a/qubeize_image b/qubeize_image index 59cb4f8..1966699 100755 --- a/qubeize_image +++ b/qubeize_image @@ -23,18 +23,18 @@ fi ID=$(id -ur) if [ $ID != 0 ] ; then - echo "This script should be run as root user." - exit 1 + echo "This script should be run as root user." + exit 1 fi if [ "$VERBOSE" == "1" ]; then - export YUM_OPTS="$YUM_OPTS -q" + export YUM_OPTS="$YUM_OPTS -q" fi function cleanup() { - if grep -q " $PWD/mnt " /proc/mounts; then - umount mnt/proc mnt - fi + if grep -q " $PWD/mnt " /proc/mounts; then + umount mnt/proc mnt + fi } trap cleanup ERR @@ -64,9 +64,9 @@ echo "--> Creating the Apps Menu templates..." echo "--> Choosing appmenus whitelists..." rm -f appmenus if [ -d "appmenus_$DIST" ]; then - ln -s "appmenus_$DIST" appmenus + ln -s "appmenus_$DIST" appmenus else - ln -s "appmenus_generic" appmenus + ln -s "appmenus_generic" appmenus fi echo "--> Linking /home to /rw/home..." @@ -78,8 +78,8 @@ mv mnt/usr/local mnt/usr/local.orig ln -sf /rw/usrlocal mnt/usr/local if ! [ -r mnt/etc/sysconfig/i18n ]; then - echo "--> Setting up default locale..." - echo LC_CTYPE=en_US.UTF-8 > mnt/etc/sysconfig/i18n + echo "--> Setting up default locale..." + echo LC_CTYPE=en_US.UTF-8 > mnt/etc/sysconfig/i18n fi echo "--> Unmounting $IMG" From add64aa2e4b9911b43cc3fd27742bf1359499564 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Sat, 16 Feb 2013 16:00:50 +0100 Subject: [PATCH 14/29] Support different versions of the same distribution Split $DIST to distribution name and version (builder_setup script) and search for scripts first $DIST-specific, but then for given distribution. Also move out some Fedora-specific things to scripts_fc17. --- Makefile | 6 ++--- build_template_rpm | 4 ++++ builder_setup | 22 +++++++++++++++++++ cleanup_image | 4 +++- fedorize_image => prepare_image | 15 ++++++------- .../.gitignore | 0 qubeize_image | 4 +++- scripts_archlinux/02_install_groups.sh | 2 ++ scripts_fc17/00_prepare.sh | 2 ++ scripts_fc17/02_install_groups.sh | 7 ++++++ templates.spec | 2 +- 11 files changed, 54 insertions(+), 14 deletions(-) create mode 100644 builder_setup rename fedorize_image => prepare_image (65%) rename {fedorized_images => prepared_images}/.gitignore (100%) diff --git a/Makefile b/Makefile index ffee2c0..3d919cf 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,7 @@ ifndef DIST $(error "You must set DIST variable, e.g. DIST=fc14") endif +#TODO: build template name somehow smarter TEMPLATE_NAME := $${DIST/fc/fedora-}-x64 VERSION := $(shell cat version) TIMESTAMP := $(shell date -u +%Y%m%d%H%M) @@ -15,9 +16,8 @@ help: rpms: @echo $(TIMESTAMP) > build_timestamp @echo "Building template: $(TEMPLATE_NAME)" - @createrepo -q -g $$PWD/comps-qubes-template.xml yum_repo_qubes/$(DIST) -o yum_repo_qubes/$(DIST) && \ - sudo -E ./fedorize_image fedorized_images/$(TEMPLATE_NAME).img && \ - sudo -E ./qubeize_image fedorized_images/$(TEMPLATE_NAME).img $(TEMPLATE_NAME) && \ + sudo -E ./prepare_image prepared_images/$(TEMPLATE_NAME).img && \ + sudo -E ./qubeize_image prepared_images/$(TEMPLATE_NAME).img $(TEMPLATE_NAME) && \ ./build_template_rpm $(TEMPLATE_NAME) || exit 1; \ update-repo-installer: diff --git a/build_template_rpm b/build_template_rpm index c98a1c9..d17e75b 100755 --- a/build_template_rpm +++ b/build_template_rpm @@ -6,9 +6,13 @@ echo "usage $0 " exit 1 fi +. ./builder_setup + 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 diff --git a/builder_setup b/builder_setup new file mode 100644 index 0000000..949225b --- /dev/null +++ b/builder_setup @@ -0,0 +1,22 @@ +#!/bin/bash + +# Setup env variables + +case "$DIST" in + fc*) + DISTRIBUTION=fedora + VERSION=${DIST/fc/} + ;; + *) + DISTRIBUTION="$DIST" + VERSION= + ;; +esac + +if [ -d "scripts_$DIST" ]; then + SCRIPTSDIR="scripts_$DIST" +else + SCRIPTSDIR="scripts_$DISTRIBUTION" +fi + +export SCRIPTSDIR diff --git a/cleanup_image b/cleanup_image index 2673513..522d9d4 100755 --- a/cleanup_image +++ b/cleanup_image @@ -2,6 +2,8 @@ export IMG=$1 +. ./builder_setup + set -e if ! [ $# -eq 1 ]; then @@ -18,7 +20,7 @@ ls -als $IMG mount -o loop $IMG mnt || exit 1 export INSTALLDIR=`pwd`/mnt/ -scripts_"${DIST}"/09_cleanup.sh +$SCRIPTSDIR/09_cleanup.sh echo "--> Compacting image file..." dd if=/dev/zero of=mnt/fillme bs=1M > /dev/null 2>&1 || true diff --git a/fedorize_image b/prepare_image similarity index 65% rename from fedorize_image rename to prepare_image index 7292725..b9e8a89 100755 --- a/fedorize_image +++ b/prepare_image @@ -6,6 +6,8 @@ RETCODE=0 : ${DIST=fc14} +. ./builder_setup + if ! [ $# -eq 1 ]; then echo "usage $0 " exit @@ -15,15 +17,15 @@ if [ "$VERBOSE" == "1" ]; then export YUM_OPTS="$YUM_OPTS -q" fi +echo "-> Preparing instalation of $DIST template..." +$SCRIPTSDIR/00_prepare.sh + if [ -f $IMG ]; then echo "-> Image file already exists, assuming *update*..." mount -o loop $IMG mnt || exit 1 export INSTALLDIR=`pwd`/mnt/ else - echo "-> Preparing instalation of $DIST template..." - scripts_"${DIST}"/00_prepare.sh - echo "-> Initializing empty image..." truncate -s 10G $IMG || exit 1 @@ -35,14 +37,11 @@ else export INSTALLDIR=`pwd`/mnt/ - scripts_"${DIST}"/01_install_core.sh + $SCRIPTSDIR/01_install_core.sh fi -PKGLISTFILE=$(shell [ -r scripts_"${DIST}/packages_$(DIST).list" ] && echo scripts_"${DIST}/packages_$(DIST).list" || echo scripts_"${DIST}/packages.list") -export PKGGROUPS=$(cat $PKGLISTFILE) - echo "-> Installing package groups..." -scripts_"${DIST}"/02_install_groups.sh +$SCRIPTSDIR/02_install_groups.sh echo "-> Unmounting fedorized_image..." sudo umount $INSTALLDIR diff --git a/fedorized_images/.gitignore b/prepared_images/.gitignore similarity index 100% rename from fedorized_images/.gitignore rename to prepared_images/.gitignore diff --git a/qubeize_image b/qubeize_image index 1966699..19cd98c 100755 --- a/qubeize_image +++ b/qubeize_image @@ -3,6 +3,8 @@ export CLEANIMG=$1 export NAME=$2 +. ./builder_setup + set -e if [ $# -eq 0 ]; then @@ -50,7 +52,7 @@ mkdir -p mnt mount -o loop $IMG mnt || exit 1 export INSTALLDIR=mnt -scripts_"${DIST}"/04_install_qubes.sh +$SCRIPTSDIR/04_install_qubes.sh echo "--> Copying the Apps Menu shortcuts..." export APPSORIG=qubeized_images/$NAME-apps.orig diff --git a/scripts_archlinux/02_install_groups.sh b/scripts_archlinux/02_install_groups.sh index 3d5b132..4d9640a 100755 --- a/scripts_archlinux/02_install_groups.sh +++ b/scripts_archlinux/02_install_groups.sh @@ -3,6 +3,8 @@ echo "Mounting archlinux install system into archlinux_dvd..." sudo mount root-image.fs archlinux_dvd +PKGGROUPS=`cat $SCRIPTSDIR/packages.list` + echo "-> Installing archlinux package groups..." echo "-> Selected packages:" echo "$PKGGROUPS" diff --git a/scripts_fc17/00_prepare.sh b/scripts_fc17/00_prepare.sh index a6634bd..e2349bf 100755 --- a/scripts_fc17/00_prepare.sh +++ b/scripts_fc17/00_prepare.sh @@ -3,3 +3,5 @@ rm -f keys base_rpms ln -sf keys_$DIST keys ln -sf base_rpms_$DIST base_rpms + +createrepo -q -g $PWD/comps-qubes-template.xml yum_repo_qubes/$DIST -o yum_repo_qubes/$DIST diff --git a/scripts_fc17/02_install_groups.sh b/scripts_fc17/02_install_groups.sh index 86ceade..14ffa7f 100755 --- a/scripts_fc17/02_install_groups.sh +++ b/scripts_fc17/02_install_groups.sh @@ -2,6 +2,13 @@ echo "--> Preparing environment..." mount -t proc proc mnt/proc +if [ -r "$SCRIPTSDIR/packages_${DIST}.list" ]; then + PKGLISTFILE="$SCRIPTSDIR/packages_${DIST}.list" +else + PKGLISTFILE="$SCRIPTSDIR/packages.list" +fi +export PKGGROUPS=$(cat $PKGLISTFILE) + export YUM0=$PWD/yum_repo_qubes yum clean all -c $PWD/yum.conf $YUM_OPTS -y --installroot=$PWD/mnt yum install -c $PWD/yum.conf $YUM_OPTS -y --installroot=$INSTALLDIR $PKGGROUPS || RETCODE=1 diff --git a/templates.spec b/templates.spec index 514a393..2754f16 100644 --- a/templates.spec +++ b/templates.spec @@ -45,7 +45,7 @@ touch $RPM_BUILD_ROOT/%{dest_dir}/root.img # we will create the real file in %po touch $RPM_BUILD_ROOT/%{dest_dir}/private.img # we will create the real file in %post touch $RPM_BUILD_ROOT/%{dest_dir}/volatile.img # we will create the real file in %post -cp scripts_%{DIST}/clean-volatile.img.tar $RPM_BUILD_ROOT/%{dest_dir}/clean-volatile.img.tar +cp $SCRIPTSDIR/clean-volatile.img.tar $RPM_BUILD_ROOT/%{dest_dir}/clean-volatile.img.tar mkdir -p $RPM_BUILD_ROOT/%{dest_dir}/apps.templates mkdir -p $RPM_BUILD_ROOT/%{dest_dir}/apps From 8e7f0b0280c53def0d6992d098f8b4ff8078011a Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Sat, 16 Feb 2013 16:05:58 +0100 Subject: [PATCH 15/29] Move Fedora-specific 3rd party software scripts to fedora dir --- scripts_fc17/04_install_qubes.sh | 2 +- .../adobe-release-x86_64-1.0-1.noarch.rpm | Bin .../add_3rd_party_software.sh | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename {3rd_party_software => scripts_fc17/3rd_party_software}/adobe-release-x86_64-1.0-1.noarch.rpm (100%) rename add_3rd_party_software.sh => scripts_fc17/add_3rd_party_software.sh (67%) diff --git a/scripts_fc17/04_install_qubes.sh b/scripts_fc17/04_install_qubes.sh index 2cba51b..560e977 100755 --- a/scripts_fc17/04_install_qubes.sh +++ b/scripts_fc17/04_install_qubes.sh @@ -7,6 +7,6 @@ export YUM0=$PWD/yum_repo_qubes yum install -c $PWD/yum.conf $YUM_OPTS -y --installroot=$(pwd)/mnt @qubes-vm echo "--> Installing 3rd party apps" -./add_3rd_party_software.sh +$SCRIPTSDIR/add_3rd_party_software.sh sudo umount $PWD/proc diff --git a/3rd_party_software/adobe-release-x86_64-1.0-1.noarch.rpm b/scripts_fc17/3rd_party_software/adobe-release-x86_64-1.0-1.noarch.rpm similarity index 100% rename from 3rd_party_software/adobe-release-x86_64-1.0-1.noarch.rpm rename to scripts_fc17/3rd_party_software/adobe-release-x86_64-1.0-1.noarch.rpm diff --git a/add_3rd_party_software.sh b/scripts_fc17/add_3rd_party_software.sh similarity index 67% rename from add_3rd_party_software.sh rename to scripts_fc17/add_3rd_party_software.sh index b682b5d..712f928 100755 --- a/add_3rd_party_software.sh +++ b/scripts_fc17/add_3rd_party_software.sh @@ -2,6 +2,6 @@ INSTALLDIR=$PWD/mnt -rpm -i --root=$INSTALLDIR 3rd_party_software/adobe-release-x86_64-*.noarch.rpm +rpm -i --root=$INSTALLDIR $SCRIPTSDIR/3rd_party_software/adobe-release-x86_64-*.noarch.rpm rpm --import --root=$INSTALLDIR mnt/etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux yum install -c $PWD/yum.conf $YUM_OPTS -y --installroot=$INSTALLDIR flash-plugin From 6aead48795013d4f0be483a14c206e03bb98038f Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Sat, 16 Feb 2013 16:09:00 +0100 Subject: [PATCH 16/29] Rename scripts_fc17 to scripts_fedora --- {scripts_fc17 => scripts_fedora}/00_prepare.sh | 0 {scripts_fc17 => scripts_fedora}/01_install_core.sh | 0 .../02_install_groups.sh | 0 .../04_install_qubes.sh | 0 {scripts_fc17 => scripts_fedora}/09_cleanup.sh | 0 .../adobe-release-x86_64-1.0-1.noarch.rpm | Bin .../add_3rd_party_software.sh | 0 .../clean-volatile.img.tar | Bin {scripts_fc17 => scripts_fedora}/network | 0 {scripts_fc17 => scripts_fedora}/packages.list | 0 {clean_images => scripts_fedora}/packages_fc18.list | 0 {scripts_fc17 => scripts_fedora}/part.bin | Bin {scripts_fc17 => scripts_fedora}/resolv.conf | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename {scripts_fc17 => scripts_fedora}/00_prepare.sh (100%) rename {scripts_fc17 => scripts_fedora}/01_install_core.sh (100%) rename {scripts_fc17 => scripts_fedora}/02_install_groups.sh (100%) rename {scripts_fc17 => scripts_fedora}/04_install_qubes.sh (100%) rename {scripts_fc17 => scripts_fedora}/09_cleanup.sh (100%) rename {scripts_fc17 => scripts_fedora}/3rd_party_software/adobe-release-x86_64-1.0-1.noarch.rpm (100%) rename {scripts_fc17 => scripts_fedora}/add_3rd_party_software.sh (100%) rename {scripts_fc17 => scripts_fedora}/clean-volatile.img.tar (100%) rename {scripts_fc17 => scripts_fedora}/network (100%) rename {scripts_fc17 => scripts_fedora}/packages.list (100%) rename {clean_images => scripts_fedora}/packages_fc18.list (100%) rename {scripts_fc17 => scripts_fedora}/part.bin (100%) rename {scripts_fc17 => scripts_fedora}/resolv.conf (100%) diff --git a/scripts_fc17/00_prepare.sh b/scripts_fedora/00_prepare.sh similarity index 100% rename from scripts_fc17/00_prepare.sh rename to scripts_fedora/00_prepare.sh diff --git a/scripts_fc17/01_install_core.sh b/scripts_fedora/01_install_core.sh similarity index 100% rename from scripts_fc17/01_install_core.sh rename to scripts_fedora/01_install_core.sh diff --git a/scripts_fc17/02_install_groups.sh b/scripts_fedora/02_install_groups.sh similarity index 100% rename from scripts_fc17/02_install_groups.sh rename to scripts_fedora/02_install_groups.sh diff --git a/scripts_fc17/04_install_qubes.sh b/scripts_fedora/04_install_qubes.sh similarity index 100% rename from scripts_fc17/04_install_qubes.sh rename to scripts_fedora/04_install_qubes.sh diff --git a/scripts_fc17/09_cleanup.sh b/scripts_fedora/09_cleanup.sh similarity index 100% rename from scripts_fc17/09_cleanup.sh rename to scripts_fedora/09_cleanup.sh diff --git a/scripts_fc17/3rd_party_software/adobe-release-x86_64-1.0-1.noarch.rpm b/scripts_fedora/3rd_party_software/adobe-release-x86_64-1.0-1.noarch.rpm similarity index 100% rename from scripts_fc17/3rd_party_software/adobe-release-x86_64-1.0-1.noarch.rpm rename to scripts_fedora/3rd_party_software/adobe-release-x86_64-1.0-1.noarch.rpm diff --git a/scripts_fc17/add_3rd_party_software.sh b/scripts_fedora/add_3rd_party_software.sh similarity index 100% rename from scripts_fc17/add_3rd_party_software.sh rename to scripts_fedora/add_3rd_party_software.sh diff --git a/scripts_fc17/clean-volatile.img.tar b/scripts_fedora/clean-volatile.img.tar similarity index 100% rename from scripts_fc17/clean-volatile.img.tar rename to scripts_fedora/clean-volatile.img.tar diff --git a/scripts_fc17/network b/scripts_fedora/network similarity index 100% rename from scripts_fc17/network rename to scripts_fedora/network diff --git a/scripts_fc17/packages.list b/scripts_fedora/packages.list similarity index 100% rename from scripts_fc17/packages.list rename to scripts_fedora/packages.list diff --git a/clean_images/packages_fc18.list b/scripts_fedora/packages_fc18.list similarity index 100% rename from clean_images/packages_fc18.list rename to scripts_fedora/packages_fc18.list diff --git a/scripts_fc17/part.bin b/scripts_fedora/part.bin similarity index 100% rename from scripts_fc17/part.bin rename to scripts_fedora/part.bin diff --git a/scripts_fc17/resolv.conf b/scripts_fedora/resolv.conf similarity index 100% rename from scripts_fc17/resolv.conf rename to scripts_fedora/resolv.conf From 346a24cba41af5285053790978433046055a655a Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Sat, 16 Feb 2013 17:08:27 +0100 Subject: [PATCH 17/29] Move Fedora keys and base_rpms to scripts_fedora dir --- .gitignore | 2 -- scripts_fedora/.gitignore | 2 ++ scripts_fedora/00_prepare.sh | 2 ++ scripts_fedora/01_install_core.sh | 8 ++++---- .../base_rpms_fc13}/fedora-release-13-1.noarch.rpm | Bin .../filesystem-2.4.31-1.fc13.x86_64.rpm | Bin .../base_rpms_fc13}/setup-2.8.17-1.fc13.noarch.rpm | Bin .../base_rpms_fc14}/fedora-release-14-1.noarch.rpm | Bin .../filesystem-2.4.35-1.fc14.x86_64.rpm | Bin .../base_rpms_fc14}/setup-2.8.23-1.fc14.noarch.rpm | Bin .../base_rpms_fc15}/fedora-release-15-3.noarch.rpm | Bin .../filesystem-2.4.41-1.fc15.x86_64.rpm | Bin .../base_rpms_fc15}/setup-2.8.31-2.fc15.noarch.rpm | Bin .../base_rpms_fc16}/fedora-release-16-1.noarch.rpm | Bin .../filesystem-2.4.44-1.fc16.x86_64.rpm | Bin .../base_rpms_fc16}/setup-2.8.36-2.fc16.noarch.rpm | Bin .../base_rpms_fc17}/fedora-release-17-1.noarch.rpm | Bin .../base_rpms_fc17}/filesystem-3-2.fc17.x86_64.rpm | Bin .../base_rpms_fc17}/setup-2.8.48-1.fc17.noarch.rpm | Bin .../base_rpms_fc18}/fedora-release-18-1.noarch.rpm | Bin .../filesystem-3.1-2.fc18.x86_64.rpm | Bin .../base_rpms_fc18}/setup-2.8.57-1.fc18.noarch.rpm | Bin .../keys_fc13}/RPM-GPG-KEY-fedora-13-primary | 0 .../keys_fc13}/qubes-release-1-signing-key.asc | 0 .../keys_fc14}/RPM-GPG-KEY-fedora-14-primary | 0 .../keys_fc14}/qubes-release-1-signing-key.asc | 0 .../keys_fc15}/RPM-GPG-KEY-fedora-15-primary | 0 .../keys_fc15}/qubes-release-1-signing-key.asc | 0 .../keys_fc16}/RPM-GPG-KEY-Fedora-16-primary | 0 .../keys_fc16}/qubes-release-1-signing-key.asc | 0 .../keys_fc17}/RPM-GPG-KEY-Fedora-17-primary | 0 .../keys_fc17}/qubes-release-1-signing-key.asc | 0 .../keys_fc18}/RPM-GPG-KEY-Fedora-18-primary | 0 .../keys_fc18}/qubes-release-1-signing-key.asc | 0 34 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 scripts_fedora/.gitignore rename {base_rpms_fc13 => scripts_fedora/base_rpms_fc13}/fedora-release-13-1.noarch.rpm (100%) rename {base_rpms_fc13 => scripts_fedora/base_rpms_fc13}/filesystem-2.4.31-1.fc13.x86_64.rpm (100%) rename {base_rpms_fc13 => scripts_fedora/base_rpms_fc13}/setup-2.8.17-1.fc13.noarch.rpm (100%) rename {base_rpms_fc14 => scripts_fedora/base_rpms_fc14}/fedora-release-14-1.noarch.rpm (100%) rename {base_rpms_fc14 => scripts_fedora/base_rpms_fc14}/filesystem-2.4.35-1.fc14.x86_64.rpm (100%) rename {base_rpms_fc14 => scripts_fedora/base_rpms_fc14}/setup-2.8.23-1.fc14.noarch.rpm (100%) rename {base_rpms_fc15 => scripts_fedora/base_rpms_fc15}/fedora-release-15-3.noarch.rpm (100%) rename {base_rpms_fc15 => scripts_fedora/base_rpms_fc15}/filesystem-2.4.41-1.fc15.x86_64.rpm (100%) rename {base_rpms_fc15 => scripts_fedora/base_rpms_fc15}/setup-2.8.31-2.fc15.noarch.rpm (100%) rename {base_rpms_fc16 => scripts_fedora/base_rpms_fc16}/fedora-release-16-1.noarch.rpm (100%) rename {base_rpms_fc16 => scripts_fedora/base_rpms_fc16}/filesystem-2.4.44-1.fc16.x86_64.rpm (100%) rename {base_rpms_fc16 => scripts_fedora/base_rpms_fc16}/setup-2.8.36-2.fc16.noarch.rpm (100%) rename {base_rpms_fc17 => scripts_fedora/base_rpms_fc17}/fedora-release-17-1.noarch.rpm (100%) rename {base_rpms_fc17 => scripts_fedora/base_rpms_fc17}/filesystem-3-2.fc17.x86_64.rpm (100%) rename {base_rpms_fc17 => scripts_fedora/base_rpms_fc17}/setup-2.8.48-1.fc17.noarch.rpm (100%) rename {base_rpms_fc18 => scripts_fedora/base_rpms_fc18}/fedora-release-18-1.noarch.rpm (100%) rename {base_rpms_fc18 => scripts_fedora/base_rpms_fc18}/filesystem-3.1-2.fc18.x86_64.rpm (100%) rename {base_rpms_fc18 => scripts_fedora/base_rpms_fc18}/setup-2.8.57-1.fc18.noarch.rpm (100%) rename {keys_fc13 => scripts_fedora/keys_fc13}/RPM-GPG-KEY-fedora-13-primary (100%) rename {keys_fc13 => scripts_fedora/keys_fc13}/qubes-release-1-signing-key.asc (100%) rename {keys_fc14 => scripts_fedora/keys_fc14}/RPM-GPG-KEY-fedora-14-primary (100%) rename {keys_fc14 => scripts_fedora/keys_fc14}/qubes-release-1-signing-key.asc (100%) rename {keys_fc15 => scripts_fedora/keys_fc15}/RPM-GPG-KEY-fedora-15-primary (100%) rename {keys_fc15 => scripts_fedora/keys_fc15}/qubes-release-1-signing-key.asc (100%) rename {keys_fc16 => scripts_fedora/keys_fc16}/RPM-GPG-KEY-Fedora-16-primary (100%) rename {keys_fc16 => scripts_fedora/keys_fc16}/qubes-release-1-signing-key.asc (100%) rename {keys_fc17 => scripts_fedora/keys_fc17}/RPM-GPG-KEY-Fedora-17-primary (100%) rename {keys_fc17 => scripts_fedora/keys_fc17}/qubes-release-1-signing-key.asc (100%) rename {keys_fc18 => scripts_fedora/keys_fc18}/RPM-GPG-KEY-Fedora-18-primary (100%) rename {keys_fc18 => scripts_fedora/keys_fc18}/qubes-release-1-signing-key.asc (100%) diff --git a/.gitignore b/.gitignore index 7fad1ab..231e332 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,4 @@ *~ -base_rpms -keys appmenus build_timestamp *.iso diff --git a/scripts_fedora/.gitignore b/scripts_fedora/.gitignore new file mode 100644 index 0000000..da1ecb8 --- /dev/null +++ b/scripts_fedora/.gitignore @@ -0,0 +1,2 @@ +keys +base_rpms diff --git a/scripts_fedora/00_prepare.sh b/scripts_fedora/00_prepare.sh index e2349bf..a351ebf 100755 --- a/scripts_fedora/00_prepare.sh +++ b/scripts_fedora/00_prepare.sh @@ -1,7 +1,9 @@ #!/bin/sh +pushd $SCRIPTSDIR rm -f keys base_rpms ln -sf keys_$DIST keys ln -sf base_rpms_$DIST base_rpms +popd createrepo -q -g $PWD/comps-qubes-template.xml yum_repo_qubes/$DIST -o yum_repo_qubes/$DIST diff --git a/scripts_fedora/01_install_core.sh b/scripts_fedora/01_install_core.sh index a42d30a..fb00e71 100755 --- a/scripts_fedora/01_install_core.sh +++ b/scripts_fedora/01_install_core.sh @@ -2,11 +2,11 @@ echo "-> Initializing RPM database..." rpm --initdb --root=$INSTALLDIR -rpm --import --root=$INSTALLDIR keys/* +rpm --import --root=$INSTALLDIR $SCRIPTSDIR/keys/* echo "-> Installing core RPM packages..." -rpm -i --root=$INSTALLDIR base_rpms/*.rpm || exit 1 +rpm -i --root=$INSTALLDIR $SCRIPTSDIR/base_rpms/*.rpm || exit 1 -cp scripts_"${DIST}"/resolv.conf $INSTALLDIR/etc -cp scripts_"${DIST}"/network $INSTALLDIR/etc/sysconfig +cp $SCRIPTSDIR/resolv.conf $INSTALLDIR/etc +cp $SCRIPTSDIR/network $INSTALLDIR/etc/sysconfig cp -a /dev/null /dev/zero /dev/random /dev/urandom $INSTALLDIR/dev/ diff --git a/base_rpms_fc13/fedora-release-13-1.noarch.rpm b/scripts_fedora/base_rpms_fc13/fedora-release-13-1.noarch.rpm similarity index 100% rename from base_rpms_fc13/fedora-release-13-1.noarch.rpm rename to scripts_fedora/base_rpms_fc13/fedora-release-13-1.noarch.rpm diff --git a/base_rpms_fc13/filesystem-2.4.31-1.fc13.x86_64.rpm b/scripts_fedora/base_rpms_fc13/filesystem-2.4.31-1.fc13.x86_64.rpm similarity index 100% rename from base_rpms_fc13/filesystem-2.4.31-1.fc13.x86_64.rpm rename to scripts_fedora/base_rpms_fc13/filesystem-2.4.31-1.fc13.x86_64.rpm diff --git a/base_rpms_fc13/setup-2.8.17-1.fc13.noarch.rpm b/scripts_fedora/base_rpms_fc13/setup-2.8.17-1.fc13.noarch.rpm similarity index 100% rename from base_rpms_fc13/setup-2.8.17-1.fc13.noarch.rpm rename to scripts_fedora/base_rpms_fc13/setup-2.8.17-1.fc13.noarch.rpm diff --git a/base_rpms_fc14/fedora-release-14-1.noarch.rpm b/scripts_fedora/base_rpms_fc14/fedora-release-14-1.noarch.rpm similarity index 100% rename from base_rpms_fc14/fedora-release-14-1.noarch.rpm rename to scripts_fedora/base_rpms_fc14/fedora-release-14-1.noarch.rpm diff --git a/base_rpms_fc14/filesystem-2.4.35-1.fc14.x86_64.rpm b/scripts_fedora/base_rpms_fc14/filesystem-2.4.35-1.fc14.x86_64.rpm similarity index 100% rename from base_rpms_fc14/filesystem-2.4.35-1.fc14.x86_64.rpm rename to scripts_fedora/base_rpms_fc14/filesystem-2.4.35-1.fc14.x86_64.rpm diff --git a/base_rpms_fc14/setup-2.8.23-1.fc14.noarch.rpm b/scripts_fedora/base_rpms_fc14/setup-2.8.23-1.fc14.noarch.rpm similarity index 100% rename from base_rpms_fc14/setup-2.8.23-1.fc14.noarch.rpm rename to scripts_fedora/base_rpms_fc14/setup-2.8.23-1.fc14.noarch.rpm diff --git a/base_rpms_fc15/fedora-release-15-3.noarch.rpm b/scripts_fedora/base_rpms_fc15/fedora-release-15-3.noarch.rpm similarity index 100% rename from base_rpms_fc15/fedora-release-15-3.noarch.rpm rename to scripts_fedora/base_rpms_fc15/fedora-release-15-3.noarch.rpm diff --git a/base_rpms_fc15/filesystem-2.4.41-1.fc15.x86_64.rpm b/scripts_fedora/base_rpms_fc15/filesystem-2.4.41-1.fc15.x86_64.rpm similarity index 100% rename from base_rpms_fc15/filesystem-2.4.41-1.fc15.x86_64.rpm rename to scripts_fedora/base_rpms_fc15/filesystem-2.4.41-1.fc15.x86_64.rpm diff --git a/base_rpms_fc15/setup-2.8.31-2.fc15.noarch.rpm b/scripts_fedora/base_rpms_fc15/setup-2.8.31-2.fc15.noarch.rpm similarity index 100% rename from base_rpms_fc15/setup-2.8.31-2.fc15.noarch.rpm rename to scripts_fedora/base_rpms_fc15/setup-2.8.31-2.fc15.noarch.rpm diff --git a/base_rpms_fc16/fedora-release-16-1.noarch.rpm b/scripts_fedora/base_rpms_fc16/fedora-release-16-1.noarch.rpm similarity index 100% rename from base_rpms_fc16/fedora-release-16-1.noarch.rpm rename to scripts_fedora/base_rpms_fc16/fedora-release-16-1.noarch.rpm diff --git a/base_rpms_fc16/filesystem-2.4.44-1.fc16.x86_64.rpm b/scripts_fedora/base_rpms_fc16/filesystem-2.4.44-1.fc16.x86_64.rpm similarity index 100% rename from base_rpms_fc16/filesystem-2.4.44-1.fc16.x86_64.rpm rename to scripts_fedora/base_rpms_fc16/filesystem-2.4.44-1.fc16.x86_64.rpm diff --git a/base_rpms_fc16/setup-2.8.36-2.fc16.noarch.rpm b/scripts_fedora/base_rpms_fc16/setup-2.8.36-2.fc16.noarch.rpm similarity index 100% rename from base_rpms_fc16/setup-2.8.36-2.fc16.noarch.rpm rename to scripts_fedora/base_rpms_fc16/setup-2.8.36-2.fc16.noarch.rpm diff --git a/base_rpms_fc17/fedora-release-17-1.noarch.rpm b/scripts_fedora/base_rpms_fc17/fedora-release-17-1.noarch.rpm similarity index 100% rename from base_rpms_fc17/fedora-release-17-1.noarch.rpm rename to scripts_fedora/base_rpms_fc17/fedora-release-17-1.noarch.rpm diff --git a/base_rpms_fc17/filesystem-3-2.fc17.x86_64.rpm b/scripts_fedora/base_rpms_fc17/filesystem-3-2.fc17.x86_64.rpm similarity index 100% rename from base_rpms_fc17/filesystem-3-2.fc17.x86_64.rpm rename to scripts_fedora/base_rpms_fc17/filesystem-3-2.fc17.x86_64.rpm diff --git a/base_rpms_fc17/setup-2.8.48-1.fc17.noarch.rpm b/scripts_fedora/base_rpms_fc17/setup-2.8.48-1.fc17.noarch.rpm similarity index 100% rename from base_rpms_fc17/setup-2.8.48-1.fc17.noarch.rpm rename to scripts_fedora/base_rpms_fc17/setup-2.8.48-1.fc17.noarch.rpm diff --git a/base_rpms_fc18/fedora-release-18-1.noarch.rpm b/scripts_fedora/base_rpms_fc18/fedora-release-18-1.noarch.rpm similarity index 100% rename from base_rpms_fc18/fedora-release-18-1.noarch.rpm rename to scripts_fedora/base_rpms_fc18/fedora-release-18-1.noarch.rpm diff --git a/base_rpms_fc18/filesystem-3.1-2.fc18.x86_64.rpm b/scripts_fedora/base_rpms_fc18/filesystem-3.1-2.fc18.x86_64.rpm similarity index 100% rename from base_rpms_fc18/filesystem-3.1-2.fc18.x86_64.rpm rename to scripts_fedora/base_rpms_fc18/filesystem-3.1-2.fc18.x86_64.rpm diff --git a/base_rpms_fc18/setup-2.8.57-1.fc18.noarch.rpm b/scripts_fedora/base_rpms_fc18/setup-2.8.57-1.fc18.noarch.rpm similarity index 100% rename from base_rpms_fc18/setup-2.8.57-1.fc18.noarch.rpm rename to scripts_fedora/base_rpms_fc18/setup-2.8.57-1.fc18.noarch.rpm diff --git a/keys_fc13/RPM-GPG-KEY-fedora-13-primary b/scripts_fedora/keys_fc13/RPM-GPG-KEY-fedora-13-primary similarity index 100% rename from keys_fc13/RPM-GPG-KEY-fedora-13-primary rename to scripts_fedora/keys_fc13/RPM-GPG-KEY-fedora-13-primary diff --git a/keys_fc13/qubes-release-1-signing-key.asc b/scripts_fedora/keys_fc13/qubes-release-1-signing-key.asc similarity index 100% rename from keys_fc13/qubes-release-1-signing-key.asc rename to scripts_fedora/keys_fc13/qubes-release-1-signing-key.asc diff --git a/keys_fc14/RPM-GPG-KEY-fedora-14-primary b/scripts_fedora/keys_fc14/RPM-GPG-KEY-fedora-14-primary similarity index 100% rename from keys_fc14/RPM-GPG-KEY-fedora-14-primary rename to scripts_fedora/keys_fc14/RPM-GPG-KEY-fedora-14-primary diff --git a/keys_fc14/qubes-release-1-signing-key.asc b/scripts_fedora/keys_fc14/qubes-release-1-signing-key.asc similarity index 100% rename from keys_fc14/qubes-release-1-signing-key.asc rename to scripts_fedora/keys_fc14/qubes-release-1-signing-key.asc diff --git a/keys_fc15/RPM-GPG-KEY-fedora-15-primary b/scripts_fedora/keys_fc15/RPM-GPG-KEY-fedora-15-primary similarity index 100% rename from keys_fc15/RPM-GPG-KEY-fedora-15-primary rename to scripts_fedora/keys_fc15/RPM-GPG-KEY-fedora-15-primary diff --git a/keys_fc15/qubes-release-1-signing-key.asc b/scripts_fedora/keys_fc15/qubes-release-1-signing-key.asc similarity index 100% rename from keys_fc15/qubes-release-1-signing-key.asc rename to scripts_fedora/keys_fc15/qubes-release-1-signing-key.asc diff --git a/keys_fc16/RPM-GPG-KEY-Fedora-16-primary b/scripts_fedora/keys_fc16/RPM-GPG-KEY-Fedora-16-primary similarity index 100% rename from keys_fc16/RPM-GPG-KEY-Fedora-16-primary rename to scripts_fedora/keys_fc16/RPM-GPG-KEY-Fedora-16-primary diff --git a/keys_fc16/qubes-release-1-signing-key.asc b/scripts_fedora/keys_fc16/qubes-release-1-signing-key.asc similarity index 100% rename from keys_fc16/qubes-release-1-signing-key.asc rename to scripts_fedora/keys_fc16/qubes-release-1-signing-key.asc diff --git a/keys_fc17/RPM-GPG-KEY-Fedora-17-primary b/scripts_fedora/keys_fc17/RPM-GPG-KEY-Fedora-17-primary similarity index 100% rename from keys_fc17/RPM-GPG-KEY-Fedora-17-primary rename to scripts_fedora/keys_fc17/RPM-GPG-KEY-Fedora-17-primary diff --git a/keys_fc17/qubes-release-1-signing-key.asc b/scripts_fedora/keys_fc17/qubes-release-1-signing-key.asc similarity index 100% rename from keys_fc17/qubes-release-1-signing-key.asc rename to scripts_fedora/keys_fc17/qubes-release-1-signing-key.asc diff --git a/keys_fc18/RPM-GPG-KEY-Fedora-18-primary b/scripts_fedora/keys_fc18/RPM-GPG-KEY-Fedora-18-primary similarity index 100% rename from keys_fc18/RPM-GPG-KEY-Fedora-18-primary rename to scripts_fedora/keys_fc18/RPM-GPG-KEY-Fedora-18-primary diff --git a/keys_fc18/qubes-release-1-signing-key.asc b/scripts_fedora/keys_fc18/qubes-release-1-signing-key.asc similarity index 100% rename from keys_fc18/qubes-release-1-signing-key.asc rename to scripts_fedora/keys_fc18/qubes-release-1-signing-key.asc From 4123d2fdec2db90e34c2994c50d9b3ce1894e6f5 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Sat, 16 Feb 2013 17:17:23 +0100 Subject: [PATCH 18/29] Update comment in makefile --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 3d919cf..cb08474 100644 --- a/Makefile +++ b/Makefile @@ -32,7 +32,7 @@ clean: sudo rm -fr qubeized_images/$(TEMPLATE_NAME)* sudo rm -fr rpmbuild/BUILDROOT/* sudo rm -fr rpmbuild/tmp/* - # We're not removing any images from fedorized_images/ intentionally + # We're not removing any images from prepared_images/ intentionally # because the user might want to keep using the same image for a long time - # and they are not dependent on any of the Qubes packahes + # and they are not dependent on any of the Qubes packages From afc68b641cbf116d6480b00d1e943b0423b6d3ca Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Sat, 16 Feb 2013 17:17:42 +0100 Subject: [PATCH 19/29] archlinux: keep downloaded files in $CACHEDIR (new variable) Do not download anything directly in template-builder root. Also do not download and extract archlinux iso if existing file is current. --- .gitignore | 2 ++ builder_setup | 4 +++- scripts_archlinux/00_prepare.sh | 25 ++++++++++++++----------- scripts_archlinux/01_install_core.sh | 20 ++++++++++---------- scripts_archlinux/02_install_groups.sh | 8 ++++---- scripts_archlinux/04_install_qubes.sh | 26 +++++++++++++------------- scripts_archlinux/09_cleanup.sh | 12 ++++++------ 7 files changed, 52 insertions(+), 45 deletions(-) diff --git a/.gitignore b/.gitignore index 231e332..01edf10 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ *~ appmenus build_timestamp +cache_* +mnt_* *.iso *.fs diff --git a/builder_setup b/builder_setup index 949225b..07128eb 100644 --- a/builder_setup +++ b/builder_setup @@ -19,4 +19,6 @@ else SCRIPTSDIR="scripts_$DISTRIBUTION" fi -export SCRIPTSDIR +CACHEDIR=cache_$DIST + +export SCRIPTSDIR CACHEDIR diff --git a/scripts_archlinux/00_prepare.sh b/scripts_archlinux/00_prepare.sh index 616ec3d..3633b3f 100755 --- a/scripts_archlinux/00_prepare.sh +++ b/scripts_archlinux/00_prepare.sh @@ -1,22 +1,25 @@ #!/bin/sh ISO_VERSION=2013.02.01 +mkdir -p $CACHEDIR echo "Downloading Archlinux dvd..." -wget -O "archlinux-$ISO_VERSION-dual.iso" "http://mir.archlinux.fr/iso/$ISO_VERSION/archlinux-$ISO_VERSION-dual.iso" --continue +wget -N -P $CACHEDIR "http://mir.archlinux.fr/iso/$ISO_VERSION/archlinux-$ISO_VERSION-dual.iso" echo "Verifying dvd..." echo "If verification fails, ensure that you imported and verified the archlinux key" echo "eg: gpg --recv-keys 9741E8AC" -gpg --verify "./scripts_archlinux/archlinux-$ISO_VERSION-dual.iso.sig" "archlinux-$ISO_VERSION-dual.iso" || exit +gpg --verify "$SCRIPTSDIR/archlinux-$ISO_VERSION-dual.iso.sig" "$CACHEDIR/archlinux-$ISO_VERSION-dual.iso" || exit -echo "Extracting squash filesystem from DVD..." -mkdir archlinux_dvd -sudo mount -o loop "archlinux-$ISO_VERSION-dual.iso" archlinux_dvd -cp archlinux_dvd/arch/x86_64/root-image.fs.sfs . -sudo umount archlinux_dvd -sudo mount -o loop root-image.fs.sfs archlinux_dvd -cp archlinux_dvd/root-image.fs . -sudo umount archlinux_dvd -rm root-image.fs.sfs +if [ "$CACHEDIR/archlinux-$ISO_VERSION-dual.iso" -nt $CACHEDIR/root-image.fs ]; then + echo "Extracting squash filesystem from DVD..." + mkdir mnt_archlinux_dvd + sudo mount -o loop "cache_$DIST/archlinux-$ISO_VERSION-dual.iso" mnt_archlinux_dvd + cp mnt_archlinux_dvd/arch/x86_64/root-image.fs.sfs $CACHEDIR/ + sudo umount mnt_archlinux_dvd + sudo mount -o loop cache_$DIST/root-image.fs.sfs mnt_archlinux_dvd + cp mnt_archlinux_dvd/root-image.fs $CACHEDIR/ + sudo umount mnt_archlinux_dvd + rm $CACHEDIR/root-image.fs.sfs +fi diff --git a/scripts_archlinux/01_install_core.sh b/scripts_archlinux/01_install_core.sh index eb811a2..0244966 100755 --- a/scripts_archlinux/01_install_core.sh +++ b/scripts_archlinux/01_install_core.sh @@ -1,23 +1,23 @@ #!/bin/sh -echo "Mounting archlinux install system into archlinux_dvd..." -sudo mount root-image.fs archlinux_dvd +echo "Mounting archlinux install system into mnt_archlinux_dvd..." +sudo mount $CACHEDIR/root-image.fs mnt_archlinux_dvd echo "Creating chroot bootstrap environment" -sudo mount --bind $INSTALLDIR archlinux_dvd/mnt -sudo cp /etc/resolv.conf archlinux_dvd/etc +sudo mount --bind $INSTALLDIR mnt_archlinux_dvd/mnt +sudo cp /etc/resolv.conf mnt_archlinux_dvd/etc echo "-> Initializing pacman keychain" -sudo ./archlinux_dvd/usr/bin/arch-chroot archlinux_dvd/ pacman-key --init -sudo ./archlinux_dvd/usr/bin/arch-chroot archlinux_dvd/ pacman-key --populate +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot mnt_archlinux_dvd/ pacman-key --init +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot mnt_archlinux_dvd/ pacman-key --populate echo "-> Installing core pacman packages..." -sudo ./archlinux_dvd/usr/bin/arch-chroot archlinux_dvd/ sh -c 'pacstrap /mnt base' +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot mnt_archlinux_dvd/ sh -c 'pacstrap /mnt base' echo "-> Cleaning up bootstrap environment" -sudo umount archlinux_dvd/mnt +sudo umount mnt_archlinux_dvd/mnt -sudo umount archlinux_dvd +sudo umount mnt_archlinux_dvd -cp scripts_"${DIST}"/resolv.conf $INSTALLDIR/etc +cp $SCRIPTSDIR/resolv.conf $INSTALLDIR/etc diff --git a/scripts_archlinux/02_install_groups.sh b/scripts_archlinux/02_install_groups.sh index 4d9640a..9928f8a 100755 --- a/scripts_archlinux/02_install_groups.sh +++ b/scripts_archlinux/02_install_groups.sh @@ -1,13 +1,13 @@ #!/bin/sh -echo "Mounting archlinux install system into archlinux_dvd..." -sudo mount root-image.fs archlinux_dvd +echo "Mounting archlinux install system into mnt_archlinux_dvd..." +sudo mount $CACHEDIR/root-image.fs mnt_archlinux_dvd PKGGROUPS=`cat $SCRIPTSDIR/packages.list` echo "-> Installing archlinux package groups..." echo "-> Selected packages:" echo "$PKGGROUPS" -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --needed --noconfirm -S $PKGGROUPS +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --needed --noconfirm -S $PKGGROUPS -sudo umount archlinux_dvd +sudo umount mnt_archlinux_dvd diff --git a/scripts_archlinux/04_install_qubes.sh b/scripts_archlinux/04_install_qubes.sh index 2c8c4b6..6933c90 100755 --- a/scripts_archlinux/04_install_qubes.sh +++ b/scripts_archlinux/04_install_qubes.sh @@ -1,38 +1,38 @@ #!/bin/sh -echo "Mounting archlinux install system into archlinux_dvd..." -sudo mount root-image.fs archlinux_dvd +echo "Mounting archlinux install system into mnt_archlinux_dvd..." +sudo mount $CACHEDIR/root-image.fs mnt_archlinux_dvd echo "--> Installing make dependencies..." -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'pacman -S --asdeps --needed --noconfirm binutils yajl gcc make' +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'pacman -S --asdeps --needed --noconfirm binutils yajl gcc make' #echo "--> Installing yaourt..." -#sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'cd tmp && wget https://aur.archlinux.org/packages/pa/package-query/package-query.tar.gz && tar xzvf package-query.tar.gz && cd package-query && makepkg --asroot && pacman --noconfirm -U package-query-*.pkg.tar.xz' -#sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'cd tmp && wget https://aur.archlinux.org/packages/ya/yaourt/yaourt.tar.gz && tar xzvf yaourt.tar.gz && cd yaourt && makepkg --asroot && pacman --noconfirm -U yaourt-*.pkg.tar.xz' +#sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'cd tmp && wget https://aur.archlinux.org/packages/pa/package-query/package-query.tar.gz && tar xzvf package-query.tar.gz && cd package-query && makepkg --asroot && pacman --noconfirm -U package-query-*.pkg.tar.xz' +#sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'cd tmp && wget https://aur.archlinux.org/packages/ya/yaourt/yaourt.tar.gz && tar xzvf yaourt.tar.gz && cd yaourt && makepkg --asroot && pacman --noconfirm -U yaourt-*.pkg.tar.xz' echo "--> Preparing build environment inside the chroot..." # Notes for qubes-vm-xen # Note: we need more ram for /tmp (at least 700M of disk space for compiling XEN because of the sources...) -sudo sed 's:-t tmpfs -o mode=1777,strictatime,nodev,:-t tmpfs -o size=700M,mode=1777,strictatime,nodev,:' -i ./archlinux_dvd/usr/bin/arch-chroot +sudo sed 's:-t tmpfs -o mode=1777,strictatime,nodev,:-t tmpfs -o size=700M,mode=1777,strictatime,nodev,:' -i ./mnt_archlinux_dvd/usr/bin/arch-chroot sudo cp ./scripts_archlinux/build_package.sh $INSTALLDIR/etc/ sudo cp ./scripts_archlinux/CF8D4BBE.pub $INSTALLDIR/etc/ -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "gpg --import /etc/CF8D4BBE.pub" +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "gpg --import /etc/CF8D4BBE.pub" # 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" -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "pacman -Sy" +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "pacman -Sy" echo "--> Compiling and installing qubes-packages..." sudo cp ./scripts_archlinux/qubes-vm-xen.tar.gz.sig $INSTALLDIR/etc/package.sig -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR bash /etc/build_package.sh qubes-vm-xen +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR bash /etc/build_package.sh qubes-vm-xen sudo cp ./scripts_archlinux/qubes-vm-core.tar.gz.sig $INSTALLDIR/etc/package.sig -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR bash /etc/build_package.sh qubes-vm-core +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR bash /etc/build_package.sh qubes-vm-core sudo cp ./scripts_archlinux/qubes-vm-gui.tar.gz.sig $INSTALLDIR/etc/package.sig -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR bash /etc/build_package.sh qubes-vm-gui +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR bash /etc/build_package.sh qubes-vm-gui sudo cp ./scripts_archlinux/qubes-vm-kernel-modules.tar.gz.sig $INSTALLDIR/etc/package.sig -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR bash /etc/build_package.sh qubes-vm-kernel-modules +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR bash /etc/build_package.sh qubes-vm-kernel-modules echo "--> Updating template fstab file..." sudo su -c "echo '/dev/mapper/dmroot / ext4 defaults,noatime 1 1' >> $INSTALLDIR/etc/fstab" @@ -41,4 +41,4 @@ sudo su -c "echo '/dev/xvdc1 swap swap defaults 0 0' >> $INSTALLDIR/etc/fstab" sudo su -c "echo '/rw/home /home none noauto,bind,defaults 0 0' >> $INSTALLDIR/etc/fstab" sudo su -c "echo '/dev/xvdd /usr/lib/modules ext3 defaults,noatime 0 0' >> $INSTALLDIR/etc/fstab" -sudo umount archlinux_dvd +sudo umount mnt_archlinux_dvd diff --git a/scripts_archlinux/09_cleanup.sh b/scripts_archlinux/09_cleanup.sh index 5b833b1..19a9581 100755 --- a/scripts_archlinux/09_cleanup.sh +++ b/scripts_archlinux/09_cleanup.sh @@ -1,22 +1,22 @@ #!/bin/sh -echo "Mounting archlinux install system into archlinux_dvd..." -sudo mount root-image.fs archlinux_dvd +echo "Mounting archlinux install system into mnt_archlinux_dvd..." +sudo mount $CACHEDIR/root-image.fs mnt_archlinux_dvd echo "--> Starting cleanup actions" # Remove unused packages and their dependencies (make dependencies) -cleanuppkgs=`sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman -Qdt | cut -d " " -f 1` -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Rsc $cleanuppkgs +cleanuppkgs=`sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman -Qdt | cut -d " " -f 1` +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Rsc $cleanuppkgs # Clean pacman cache -sudo ./archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Scc +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Scc # Remove build data rm $INSTALLDIR/etc/build_package.sh rm $INSTALLDIR/etc/CF8D4BBE.pub rm $INSTALLDIR/etc/package.sig -sudo umount archlinux_dvd +sudo 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 From 338593d6243ca679dfe7c7aa9ab4fa4195fbebd3 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Sat, 16 Feb 2013 21:06:11 +0100 Subject: [PATCH 20/29] prepare_image: exit on error --- prepare_image | 2 ++ 1 file changed, 2 insertions(+) diff --git a/prepare_image b/prepare_image index b9e8a89..472ef73 100755 --- a/prepare_image +++ b/prepare_image @@ -8,6 +8,8 @@ RETCODE=0 . ./builder_setup +set -e + if ! [ $# -eq 1 ]; then echo "usage $0 " exit From c520d85c7aad4e1d26b06f1ad4a866b2afe28b34 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Sat, 16 Feb 2013 21:18:20 +0100 Subject: [PATCH 21/29] minor messages fixes --- prepare_image | 2 +- qubeize_image | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/prepare_image b/prepare_image index 472ef73..facf2e5 100755 --- a/prepare_image +++ b/prepare_image @@ -45,7 +45,7 @@ fi echo "-> Installing package groups..." $SCRIPTSDIR/02_install_groups.sh -echo "-> Unmounting fedorized_image..." +echo "-> Unmounting prepared_image..." sudo umount $INSTALLDIR exit $RETCODE diff --git a/qubeize_image b/qubeize_image index 19cd98c..b19b308 100755 --- a/qubeize_image +++ b/qubeize_image @@ -43,7 +43,6 @@ trap cleanup ERR export IMG=qubeized_images/$NAME-root.img echo "--> Copying $CLEANIMG to $IMG..." -echo "--> cp could fail with a sparse file error" cp $CLEANIMG $IMG || exit 1 echo "--> Mouting $IMG" From dd2bee05f040605b104036b4ba4c5888317acadf Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Sat, 16 Feb 2013 22:48:39 +0100 Subject: [PATCH 22/29] fedora: fix (un)mounting issues --- scripts_fedora/02_install_groups.sh | 2 +- scripts_fedora/04_install_qubes.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts_fedora/02_install_groups.sh b/scripts_fedora/02_install_groups.sh index 14ffa7f..668c6fc 100755 --- a/scripts_fedora/02_install_groups.sh +++ b/scripts_fedora/02_install_groups.sh @@ -14,4 +14,4 @@ yum clean all -c $PWD/yum.conf $YUM_OPTS -y --installroot=$PWD/mnt yum install -c $PWD/yum.conf $YUM_OPTS -y --installroot=$INSTALLDIR $PKGGROUPS || RETCODE=1 yum update -c $PWD/yum.conf $YUM_OPTS -y --installroot=$INSTALLDIR || RETCODE=1 -umount mnt/proc mnt +umount mnt/proc diff --git a/scripts_fedora/04_install_qubes.sh b/scripts_fedora/04_install_qubes.sh index 560e977..fdf29a5 100755 --- a/scripts_fedora/04_install_qubes.sh +++ b/scripts_fedora/04_install_qubes.sh @@ -1,6 +1,6 @@ #!/bin/sh echo "--> Preparing environment..." -mount -t proc proc $PWD/proc +mount -t proc proc $PWD/mnt/proc echo "--> Installing RPMs..." export YUM0=$PWD/yum_repo_qubes @@ -9,4 +9,4 @@ yum install -c $PWD/yum.conf $YUM_OPTS -y --installroot=$(pwd)/mnt @qubes-vm echo "--> Installing 3rd party apps" $SCRIPTSDIR/add_3rd_party_software.sh -sudo umount $PWD/proc +sudo umount $PWD/mnt/proc From e92c17810adf6ef99d9e782416e89d573d88abbf Mon Sep 17 00:00:00 2001 From: Olivier Medoc Date: Wed, 27 Mar 2013 07:42:26 +0100 Subject: [PATCH 23/29] archlinux: fix to support chroot preparation outside of the template builder --- scripts_archlinux/00_prepare.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts_archlinux/00_prepare.sh b/scripts_archlinux/00_prepare.sh index 3633b3f..580ffb9 100755 --- a/scripts_archlinux/00_prepare.sh +++ b/scripts_archlinux/00_prepare.sh @@ -15,10 +15,10 @@ gpg --verify "$SCRIPTSDIR/archlinux-$ISO_VERSION-dual.iso.sig" "$CACHEDIR/archli if [ "$CACHEDIR/archlinux-$ISO_VERSION-dual.iso" -nt $CACHEDIR/root-image.fs ]; then echo "Extracting squash filesystem from DVD..." mkdir mnt_archlinux_dvd - sudo mount -o loop "cache_$DIST/archlinux-$ISO_VERSION-dual.iso" mnt_archlinux_dvd + sudo mount -o loop "$CACHEDIR/archlinux-$ISO_VERSION-dual.iso" mnt_archlinux_dvd cp mnt_archlinux_dvd/arch/x86_64/root-image.fs.sfs $CACHEDIR/ sudo umount mnt_archlinux_dvd - sudo mount -o loop cache_$DIST/root-image.fs.sfs mnt_archlinux_dvd + sudo mount -o loop $CACHEDIR/root-image.fs.sfs mnt_archlinux_dvd cp mnt_archlinux_dvd/root-image.fs $CACHEDIR/ sudo umount mnt_archlinux_dvd rm $CACHEDIR/root-image.fs.sfs From 522a47a58a07c39963f60ae7d62e7455a99758c0 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Thu, 28 Mar 2013 07:54:12 +0100 Subject: [PATCH 24/29] archlinux: include archlinux-master-keys in repository --- scripts_archlinux/00_prepare.sh | 3 +- scripts_archlinux/archlinux-master-keys.asc | 411 ++++++++++++++++++++ 2 files changed, 412 insertions(+), 2 deletions(-) create mode 100644 scripts_archlinux/archlinux-master-keys.asc diff --git a/scripts_archlinux/00_prepare.sh b/scripts_archlinux/00_prepare.sh index 580ffb9..f8107f8 100755 --- a/scripts_archlinux/00_prepare.sh +++ b/scripts_archlinux/00_prepare.sh @@ -7,8 +7,7 @@ echo "Downloading Archlinux dvd..." wget -N -P $CACHEDIR "http://mir.archlinux.fr/iso/$ISO_VERSION/archlinux-$ISO_VERSION-dual.iso" echo "Verifying dvd..." -echo "If verification fails, ensure that you imported and verified the archlinux key" -echo "eg: gpg --recv-keys 9741E8AC" +gpg --import "$SCRIPTSDIR/archlinux-master-keys.asc" gpg --verify "$SCRIPTSDIR/archlinux-$ISO_VERSION-dual.iso.sig" "$CACHEDIR/archlinux-$ISO_VERSION-dual.iso" || exit diff --git a/scripts_archlinux/archlinux-master-keys.asc b/scripts_archlinux/archlinux-master-keys.asc new file mode 100644 index 0000000..f5a976a --- /dev/null +++ b/scripts_archlinux/archlinux-master-keys.asc @@ -0,0 +1,411 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.13 (GNU/Linux) + +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 +OP4OxbDk+sFwmPm1eZ7qwWoguTTmhHBq8u1qCQ+GMUY9BUS7gTxmOVfIM1ieZ+GD +rLrAK+sPKUuIypJR7p2yrH5FPsYTrUpTnA4e0OkFZ8uwk+m723VE00SsX6k2+K4k +MloWiALRvwFBEiXalOjQ8JJZ5Qom/eudwxGLtwoQn+g0lD5FppMPILTIGz9hPp9N +Y1qXvVh4XOixwBW6wnYzQ/k/7eHgx0HP/N3iTkdnFxF+i4+BPnkfyP6oCFQwx34V +KqO0aJPQecl0TU8MWIOg3RoYG+7lW4keY356iQE1icm8N/1TVJgvPTi7qNLH1MKo +V3FB0o0exwGVWvXlwfOpp9dAz36hil7fdVjkdzfncfiTbK0l0h3zv4SA08bg0WwY +X6h6uJ2DrEByb8H66KdqctrvBJrqeIPDhHtGQgMs/HY2MlGF+2VXls+5njcYGWGz +5DxTas1c+amVpD/7PbpTuT/Xa8EF3Bv6kn193eJwLTdFXQop/n+Z+MOYnIa2oof5 +kDhkBn75MUMckZFOFzuq0cMfZ6B48BTboK8ZJJ7QSDWUSqIzeljmaALD1njCisIV +YCzquW0BmPQhV9tmq7hdj4nwPmLOrra2g+f2VwqF30QFBadvtIS1jz8uiQIcBBAB +AgAGBQJOwE4IAAoJEChPw0yOSxol1y4QAIzLUT1v6Ot9m2SyDOXMc6Qk2/e0at1j +plSeG9dczC6nAlLufr3uOP4OxbDk+sFwmPm1eZ7qwWoguTTmhHBq8u1qCQ+GMUY9 +BUS7gTxmOVfIM1ieZ+GDrLrAK+sPKUuIypJR7p2yrH5FPsYTrUpTnA4e0OkFZ8uw +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----- From a126af685777c37f12863d44a162a237a7d70cdf Mon Sep 17 00:00:00 2001 From: Olivier Medoc Date: Thu, 18 Apr 2013 18:34:39 +0200 Subject: [PATCH 25/29] archlinux: use package built by qubes-builder --- scripts_archlinux/04_install_qubes.sh | 45 +++++++++++++-------------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/scripts_archlinux/04_install_qubes.sh b/scripts_archlinux/04_install_qubes.sh index 6933c90..28d2fc2 100755 --- a/scripts_archlinux/04_install_qubes.sh +++ b/scripts_archlinux/04_install_qubes.sh @@ -3,36 +3,31 @@ echo "Mounting archlinux install system into mnt_archlinux_dvd..." sudo mount $CACHEDIR/root-image.fs mnt_archlinux_dvd -echo "--> Installing make dependencies..." -sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'pacman -S --asdeps --needed --noconfirm binutils yajl gcc make' - -#echo "--> Installing yaourt..." -#sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'cd tmp && wget https://aur.archlinux.org/packages/pa/package-query/package-query.tar.gz && tar xzvf package-query.tar.gz && cd package-query && makepkg --asroot && pacman --noconfirm -U package-query-*.pkg.tar.xz' -#sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c 'cd tmp && wget https://aur.archlinux.org/packages/ya/yaourt/yaourt.tar.gz && tar xzvf yaourt.tar.gz && cd yaourt && makepkg --asroot && pacman --noconfirm -U yaourt-*.pkg.tar.xz' - -echo "--> Preparing build environment inside the chroot..." -# Notes for qubes-vm-xen -# Note: we need more ram for /tmp (at least 700M of disk space for compiling XEN because of the sources...) -sudo sed 's:-t tmpfs -o mode=1777,strictatime,nodev,:-t tmpfs -o size=700M,mode=1777,strictatime,nodev,:' -i ./mnt_archlinux_dvd/usr/bin/arch-chroot -sudo cp ./scripts_archlinux/build_package.sh $INSTALLDIR/etc/ -sudo cp ./scripts_archlinux/CF8D4BBE.pub $INSTALLDIR/etc/ -sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "gpg --import /etc/CF8D4BBE.pub" - # 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" + +sudo tee -a $INSTALLDIR/etc/pacman.conf < Compiling and installing qubes-packages..." -sudo cp ./scripts_archlinux/qubes-vm-xen.tar.gz.sig $INSTALLDIR/etc/package.sig -sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR bash /etc/build_package.sh qubes-vm-xen -sudo cp ./scripts_archlinux/qubes-vm-core.tar.gz.sig $INSTALLDIR/etc/package.sig -sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR bash /etc/build_package.sh qubes-vm-core -sudo cp ./scripts_archlinux/qubes-vm-gui.tar.gz.sig $INSTALLDIR/etc/package.sig -sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR bash /etc/build_package.sh qubes-vm-gui -sudo cp ./scripts_archlinux/qubes-vm-kernel-modules.tar.gz.sig $INSTALLDIR/etc/package.sig -sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR bash /etc/build_package.sh qubes-vm-kernel-modules +echo "--> Installing qubes-packages..." +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "pacman -S --noconfirm qubes-vm-xen" +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "pacman -S --noconfirm qubes-vm-core" +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR sh -c "pacman -S --noconfirm qubes-vm-gui" echo "--> Updating template fstab file..." sudo su -c "echo '/dev/mapper/dmroot / ext4 defaults,noatime 1 1' >> $INSTALLDIR/etc/fstab" @@ -41,4 +36,6 @@ sudo su -c "echo '/dev/xvdc1 swap swap defaults 0 0' >> $INSTALLDIR/etc/fstab" sudo su -c "echo '/rw/home /home none noauto,bind,defaults 0 0' >> $INSTALLDIR/etc/fstab" sudo su -c "echo '/dev/xvdd /usr/lib/modules ext3 defaults,noatime 0 0' >> $INSTALLDIR/etc/fstab" +echo "--> Cleaning up..." +sudo umount $INSTALLDIR/mnt/qubes-rpms-mirror-repo sudo umount mnt_archlinux_dvd From 455a91245cff7fd65a78391d94b2b85d1af368d3 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Fri, 19 Apr 2013 02:20:29 +0200 Subject: [PATCH 26/29] archlinux: abort on error --- scripts_archlinux/01_install_core.sh | 2 ++ scripts_archlinux/02_install_groups.sh | 2 ++ scripts_archlinux/04_install_qubes.sh | 2 ++ scripts_archlinux/09_cleanup.sh | 2 ++ 4 files changed, 8 insertions(+) diff --git a/scripts_archlinux/01_install_core.sh b/scripts_archlinux/01_install_core.sh index 0244966..270157a 100755 --- a/scripts_archlinux/01_install_core.sh +++ b/scripts_archlinux/01_install_core.sh @@ -1,5 +1,7 @@ #!/bin/sh +set -e + echo "Mounting archlinux install system into mnt_archlinux_dvd..." sudo mount $CACHEDIR/root-image.fs mnt_archlinux_dvd diff --git a/scripts_archlinux/02_install_groups.sh b/scripts_archlinux/02_install_groups.sh index 9928f8a..2d82028 100755 --- a/scripts_archlinux/02_install_groups.sh +++ b/scripts_archlinux/02_install_groups.sh @@ -1,5 +1,7 @@ #!/bin/sh +set -e + echo "Mounting archlinux install system into mnt_archlinux_dvd..." sudo mount $CACHEDIR/root-image.fs mnt_archlinux_dvd diff --git a/scripts_archlinux/04_install_qubes.sh b/scripts_archlinux/04_install_qubes.sh index 28d2fc2..877a401 100755 --- a/scripts_archlinux/04_install_qubes.sh +++ b/scripts_archlinux/04_install_qubes.sh @@ -1,5 +1,7 @@ #!/bin/sh +set -e + echo "Mounting archlinux install system into mnt_archlinux_dvd..." sudo mount $CACHEDIR/root-image.fs mnt_archlinux_dvd diff --git a/scripts_archlinux/09_cleanup.sh b/scripts_archlinux/09_cleanup.sh index 19a9581..141374b 100755 --- a/scripts_archlinux/09_cleanup.sh +++ b/scripts_archlinux/09_cleanup.sh @@ -1,5 +1,7 @@ #!/bin/sh +set -e + echo "Mounting archlinux install system into mnt_archlinux_dvd..." sudo mount $CACHEDIR/root-image.fs mnt_archlinux_dvd From cc5ecbb71d35c676990b2eebe4ff37b823fb640f Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Fri, 19 Apr 2013 02:20:53 +0200 Subject: [PATCH 27/29] archlinux: create mnt_archlinux_dvd directory before mount It was created in 00_prepare.sh, but only in case of downloading iso image, which can be already done by qubes-builder. --- scripts_archlinux/01_install_core.sh | 1 + scripts_archlinux/04_install_qubes.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/scripts_archlinux/01_install_core.sh b/scripts_archlinux/01_install_core.sh index 270157a..ec75d35 100755 --- a/scripts_archlinux/01_install_core.sh +++ b/scripts_archlinux/01_install_core.sh @@ -3,6 +3,7 @@ set -e echo "Mounting archlinux install system into mnt_archlinux_dvd..." +mkdir -p mnt_archlinux_dvd sudo mount $CACHEDIR/root-image.fs mnt_archlinux_dvd echo "Creating chroot bootstrap environment" diff --git a/scripts_archlinux/04_install_qubes.sh b/scripts_archlinux/04_install_qubes.sh index 877a401..a6ffaeb 100755 --- a/scripts_archlinux/04_install_qubes.sh +++ b/scripts_archlinux/04_install_qubes.sh @@ -3,6 +3,7 @@ set -e echo "Mounting archlinux install system into mnt_archlinux_dvd..." +mkdir -p mnt_archlinux_dvd sudo mount $CACHEDIR/root-image.fs mnt_archlinux_dvd # Note: Enable x86 repos From 95252f246db47d632265d25d4840c21aa72d6d6f Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Fri, 19 Apr 2013 13:00:04 +0200 Subject: [PATCH 28/29] archlinux: remove unused files Now packages are built by qubes-builder, so no need for build scripts here. --- scripts_archlinux/09_cleanup.sh | 5 ---- scripts_archlinux/CF8D4BBE.pub | Bin 1206 -> 0 bytes scripts_archlinux/build_package.sh | 27 ------------------ scripts_archlinux/qubes-vm-core.tar.gz.sig | Bin 287 -> 0 bytes scripts_archlinux/qubes-vm-gui.tar.gz.sig | Bin 287 -> 0 bytes .../qubes-vm-kernel-modules.tar.gz.sig | Bin 287 -> 0 bytes scripts_archlinux/qubes-vm-xen.tar.gz.sig | Bin 287 -> 0 bytes 7 files changed, 32 deletions(-) delete mode 100644 scripts_archlinux/CF8D4BBE.pub delete mode 100644 scripts_archlinux/build_package.sh delete mode 100644 scripts_archlinux/qubes-vm-core.tar.gz.sig delete mode 100644 scripts_archlinux/qubes-vm-gui.tar.gz.sig delete mode 100644 scripts_archlinux/qubes-vm-kernel-modules.tar.gz.sig delete mode 100644 scripts_archlinux/qubes-vm-xen.tar.gz.sig diff --git a/scripts_archlinux/09_cleanup.sh b/scripts_archlinux/09_cleanup.sh index 141374b..37e3e10 100755 --- a/scripts_archlinux/09_cleanup.sh +++ b/scripts_archlinux/09_cleanup.sh @@ -13,11 +13,6 @@ sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Rsc # Clean pacman cache sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Scc -# Remove build data -rm $INSTALLDIR/etc/build_package.sh -rm $INSTALLDIR/etc/CF8D4BBE.pub -rm $INSTALLDIR/etc/package.sig - sudo umount mnt_archlinux_dvd #rm -f $INSTALLDIR/var/lib/rpm/__db.00* $INSTALLDIR/var/lib/rpm/.rpm.lock diff --git a/scripts_archlinux/CF8D4BBE.pub b/scripts_archlinux/CF8D4BBE.pub deleted file mode 100644 index 8900f6ff7d6b74a5fc1a1f6bea880cff7b3288de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1206 zcmV;n1WEgu0SyFD#h^L?2mtx*n6sBDl=mMl4{ixrx@s*xkEF?dHSAzbRGyddfXMg{ zP!qG{5N9vZ|99)$ic(tBhEgiNNQq%^iVGGi>YZ`C5e(4)7@(+2&xtW$faU}_mO5>> z0-)9SeGF8jTIcgBtGHnfl1K@WxkSJ$&)a#wtxPkrPD3r<)-gu_)&f!#CzqA%OD_24 zuO`NKFe=Z|zbVa2X*J6V8WZA+Sej@$ruh4If0kU8J8@FG=NB|+@#xiBa|WzNPiJPv zwIL+kp{V|2b|SP~*xpXNyE`G!8F-P54CHYptFcJ%!%NcX0t6W0I0Fa<0^34o4Z{yW zTMaLCHmfFZG_me^+djXeY#I#Ph<<}X z`?(Ahb5VJ3$wH%)n_(3BE}b!poJsZi^kkWj-6S{Yt;lkn_d zrz91nYdly*A@%W^;;r^Q3KB+Wccz3;?Y~kcegxauh%T zwG%J8il*R?#)EsWo!yU&{fHCirp|W0Ax$*bqIvDv<3PJJ-n9k)LjvGPAA6ffKxm?> zQM{i)X9l$~c|#<6*`I}IZtIs-%>vVD&E8+`HSPOt`r+Nf^l;o~s;*#glLQ>syFA}+ z`YiQ28rMnEBkc`qU;q{^KEuLN5^H2~4EB>*3TFcSzOxMkvn6uZKg{~Ib$(7{^iE}1 zPuP4eci70k15>a+SD|QTcDp_XC-2aV7y$A@YPFLZzrO$x0RRDs0Urby0RjLC1p-jT zpgIB@3;+rV5X0y58_$hPzUa~j0J0xV4;CFPR#Fp8)~pM%MCLhCg9ll1I4^|ts~|f9 zJVgZK#Oz`VN7)zU!e-LG<}27-vp!Ef` z=@J&RMxt5|0XD|J^`9bo?}WeSIzUsk4_}KIw86wox8{ zOa#pk-S3|1Swzm@@F9@etLI-3*XgvnUsGrUTP$G5h;ZIsc55GbtfL}{P=E^6IAJK( zP^f|Q8NwZo#e=99s_?8IFU8c%{G;&V1r|7VBv88g-%2L!e#db}>fklTdz^XveHTEm U0=Z&8$M0KFl~~&IUj=*OJ45Lq<^TWy diff --git a/scripts_archlinux/build_package.sh b/scripts_archlinux/build_package.sh deleted file mode 100644 index 0074a9c..0000000 --- a/scripts_archlinux/build_package.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -cd /tmp -mkdir build -cd build - -wget "https://aur.archlinux.org/packages/qu/$1/$1.tar.gz" || exit - -gpg --verify "/etc/package.sig" "$1.tar.gz" || exit - -tar xzvf $1.tar.gz || exit -cd "$1" || exit - -packages=`cat ./PKGBUILD | grep makedepends | cut -d '(' -f 2 | cut -d ')' -f 1` -for package in $packages ; do - pacman -S --asdeps --noconfirm --needed $package -done -packages=`cat ./PKGBUILD | grep depends | cut -d '(' -f 2 | cut -d ')' -f 1` -for package in $packages ; do - pacman -S --asdeps --noconfirm --needed $package -done - -makepkg --asroot || exit - -pacman --noconfirm -U $1-*.pkg.tar.xz || exit - - diff --git a/scripts_archlinux/qubes-vm-core.tar.gz.sig b/scripts_archlinux/qubes-vm-core.tar.gz.sig deleted file mode 100644 index ee8b4dfb31c9eebc657368fca9cf582185516315..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287 zcmV+)0pR|L0UQJX0RjL91p-kN?Rx+U2@u2Q^Bd2NOTIlp2mfri{d78;N*AwBK}G5e z(l!P|kTW&*%DL|RLZ#7_r8rxfJ%9~*%p7T%X>u}8+B1#kxL-8s?7B%Cx<6yvdA+>S zQjMRL_Njc!?w0Y_xbZ9s_M`mJXTrvQ7;-?Nwdm^|a4pKkVH$GF3j6-U?9$YshuYR6 z1+6^l)HF4K(;5m*iNn>b+_`l$l}horQunfyHEmoA7jCpaj@BA>`Xwf7CJA)*p=?^< zCu&IjiKb1YX{^=aa@-Y^eittB455urx0WnCuJcsaADOFrzo4vueJ{Qzal+GFn=cm< l+|AwD@wD%#MyXojF_|(bql0TweT1sZPZ)|rDEjbCPFwuLkRbp7 diff --git a/scripts_archlinux/qubes-vm-gui.tar.gz.sig b/scripts_archlinux/qubes-vm-gui.tar.gz.sig deleted file mode 100644 index 7e0618e817032b1678e26ee044756bfe86435ca1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287 zcmV+)0pR|L0UQJX0RjL91p-kN?S23X2@u2Q^Bd2NOTOrK2mr1g!oH+Y*(iF{dz9ET zGQwC_Wclq;bM{LdAIQS8wZRGcmjUjNcD&LsjGC+Yr=<2Q{q5)J)uEG;ckjA7BYfl4 z+lno$oHhKx!|X;7tzqPIvAb~}zP9c$qmz7=%ZmS-wyN=q%hZN8U$-dx)1vmnXhg4H zkAb707JFaANbZr7X{UB*^h<|JkOJaL0a zFYz!BDm}3y|Nr+f<+~heBBOkv2vv6-t)$fGvKC9lN#<~7vh3PbEbRY01c|5m6%oe` z1Gsqs@qZyU-YRoF#7<{bFvSg+rGd!CNeXIHvJJRjcqI$s4wY=2gt<}Le}B%Wyc2=; zgkl@X)HwK_8hS37F2xtP)Q>S>JZM-oB!`eZ`L~HKiXCdd`vpOk(_QE_#QHp8=B{3G zT`S;!cbPvXC9KtEvRJt2L6(xM)XBBeAA(6QX|?B}sgLhU@?U diff --git a/scripts_archlinux/qubes-vm-xen.tar.gz.sig b/scripts_archlinux/qubes-vm-xen.tar.gz.sig deleted file mode 100644 index 3ed3fa77959a4bf5900105fa66784ad4a585aa55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287 zcmV+)0pR|L0UQJX0RjL91p-kN>KOnE2@u2Q^Bd2NOTL!p2mqUT`Z%-+cKEKo4h0_W`r;_jh=pCr$-iEJpR=P;5F@HkRs-J0RvMI(Rq~G*54}ZGbvxRllF}H1hboq_ zShbK7=2Cqnq|P|fY~OTO lXyG_3-{#V83DR4Ti-s{OeWRDjnWiek+gu$v&HDx%K_r99hXMcq From 07dde30ba2d937651195694c8f5c6900ee24ae35 Mon Sep 17 00:00:00 2001 From: Olivier Medoc Date: Fri, 26 Apr 2013 09:44:06 +0200 Subject: [PATCH 29/29] archlinux: Missing packages for using archlinux as a NetVM --- scripts_archlinux/09_cleanup.sh | 10 +++++++++- scripts_archlinux/packages.list | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/scripts_archlinux/09_cleanup.sh b/scripts_archlinux/09_cleanup.sh index 37e3e10..a2e56c5 100755 --- a/scripts_archlinux/09_cleanup.sh +++ b/scripts_archlinux/09_cleanup.sh @@ -8,7 +8,15 @@ sudo mount $CACHEDIR/root-image.fs mnt_archlinux_dvd echo "--> Starting cleanup actions" # Remove unused packages and their dependencies (make dependencies) cleanuppkgs=`sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman -Qdt | cut -d " " -f 1` -sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Rsc $cleanuppkgs +echo "--> Packages that can be cleaned up: $cleanuppkgs" +if [ -n "$cleanuppkgs" ] ; then + sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Rsc $cleanuppkgs +fi + +# Remove non required linux kernel +echo "--> Cleaning up linux kernel" +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Rsc linux +sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -S linux-firmware # Clean pacman cache sudo ./mnt_archlinux_dvd/usr/bin/arch-chroot $INSTALLDIR pacman --noconfirm -Scc diff --git a/scripts_archlinux/packages.list b/scripts_archlinux/packages.list index af28db7..dda045a 100644 --- a/scripts_archlinux/packages.list +++ b/scripts_archlinux/packages.list @@ -13,3 +13,6 @@ ttf-freefont wget zsh xfce4-terminal +networkmanager +network-manager-applet +linux-firmware