summaryrefslogtreecommitdiff
path: root/makeicecat
diff options
context:
space:
mode:
Diffstat (limited to 'makeicecat')
-rw-r--r--makeicecat274
1 files changed, 274 insertions, 0 deletions
diff --git a/makeicecat b/makeicecat
new file mode 100644
index 0000000..f5487b8
--- /dev/null
+++ b/makeicecat
@@ -0,0 +1,274 @@
+#!/bin/bash
+#
+# Copyright (C) 2011-2014 Ruben Rodriguez <ruben@gnu.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+set -e
+
+export DEBIAN_FRONTEND=noninteractive
+MEM=$(cat /proc/meminfo |grep MemTotal| awk '{print $2}')
+GPGKEY=8D8AEBF1
+
+for VAR in LANG LANGUAGE LC_ALL LC_TIME LC_MONETARY LC_ADDRESS LC_TELEPHONE LC_MESSAGES LC_NAME LC_MEASUREMENT LC_IDENTIFICATION LC_IDENTIFICATION LC_NUMERIC LC_PAPER LANG
+do
+ unset $VAR
+done
+export LANG=C
+export HOME=/root
+export DATE=$(date +'%a, %d %b %Y %T %z')
+
+cd $(dirname $0)
+
+if [ $# -lt 2 ]
+then
+ echo "Usage: $0 trisquel_version_codename (toutatis|belenos) branding (trisquel|gnu)"
+ echo example: $0 belenos gnu
+ exit 1
+fi
+
+PACKAGE=firefox
+export CODENAME=$1
+export BRAND=$2
+WORKDIR=tmp/makepackage
+REPOSITORY=$PWD/repos/$CODENAME
+HELPERS=$PWD/helpers
+for REPO in toutatis belenos
+do
+[ -d $REPOSITORY ] && continue
+mkdir -p repos/$REPO/conf repos/$REPO/incoming
+cat << EOF > repos/$REPO/conf/distributions
+Origin: Trisquel
+Label: Trisquel
+Suite: $REPO
+Version: 42
+Codename: $REPO
+Architectures: i386 amd64 source
+Components: main
+UDebComponents: main
+DebIndices: Packages Release . .gz .bz2
+UDebIndices: Packages . .gz .bz2
+DscIndices: Sources Release .gz .bz2
+Log: $REPO.log
+Description: Trisquel GNU/Linux packages
+EOF
+
+if gpg -K | grep -q $GPGKEY
+then
+ echo "SignWith: $GPGKEY" >> repos/$REPO/conf/distributions
+fi
+
+cd repos/$REPO
+reprepro -v export
+cd ../..
+done
+
+disablescripts(){
+ # Disable service starter scripts
+ for i in /usr/sbin/invoke-rc.d /sbin/start /sbin/start-stop-daemon /usr/sbin/service
+ do
+ mv $CHROOT/$i $CHROOT/$i.real
+ cp $CHROOT/bin/true $CHROOT/$i
+ done
+}
+
+createjail () {
+ [ -d jails ] || mkdir jails
+ CHROOT=jails/$CODENAME-$ARCH
+ C="chroot $CHROOT"
+ MIRROR=http://archive.trisquel.info/trisquel
+
+ mkdir $CHROOT-tmp
+ mount -t tmpfs -o size=500M none $CHROOT-tmp
+ debootstrap --arch=$ARCH $CODENAME $CHROOT-tmp $MIRROR
+ fuser -k $CHROOT-tmp || true
+ cp -a $CHROOT-tmp $CHROOT
+ umount $CHROOT-tmp
+ rm $CHROOT-tmp -rf
+ echo "127.0.0.1 localhost" > $CHROOT/etc/hosts
+ mount none $CHROOT/proc -t proc
+ mount none $CHROOT/dev/pts -t devpts
+
+ disablescripts
+
+ if gpg -K | grep $GPGKEY -q
+ then
+ cp /root/.gnupg $CHROOT/root -a
+ else
+ echo GPG private key for $GPGKEY not found, the packages and repositories will not be signed.
+ fi
+
+ echo $CODENAME-$ARCH > $CHROOT/etc/debian_chroot
+cat << EOF > $CHROOT/etc/apt/sources.list
+deb $MIRROR $CODENAME main
+deb $MIRROR $CODENAME-updates main
+deb $MIRROR $CODENAME-security main
+deb $MIRROR $CODENAME-backports main
+EOF
+
+cat << EOF > $CHROOT/etc/apt/apt.conf.d/90recommends
+APT::Install-Recommends "0";
+APT::Install-Suggests "0";
+EOF
+
+ export DEBIAN_FRONTEND=noninteractive
+
+ echo "force-unsafe-io" > $CHROOT/etc/dpkg/dpkg.cfg.d/02apt-speedup
+ $C apt-get update
+ $C apt-get --force-yes -y install eatmydata sysv-rc dpkg sysvinit-utils upstart
+ disablescripts
+ $C apt-get --force-yes -y dist-upgrade
+ $C apt-get --force-yes -y install devscripts build-essential liburi-perl python-setuptools pkgbinarymangler wget rpl aptitude quilt fakeroot ccache ubuntu-keyring
+ $C apt-key add /usr/share/keyrings/ubuntu-archive-keyring.gpg
+ $C apt-get clean
+
+ wget -o /dev/null -O $CHROOT/tmp/key.gpg http://archive.trisquel.info/trisquel/trisquel-archive-signkey.gpg
+ $C apt-key add /tmp/key.gpg
+
+ # Hack for i386
+ if [ $ARCH = "i386" ]
+ then
+ for BIN in /bin/uname /usr/bin/arch
+ do
+ [ -f $CHROOT/$BIN ] || continue
+ mv $CHROOT/$BIN $CHROOT/$BIN.orig
+cat << EOF > $CHROOT/$BIN
+#!/bin/bash
+
+if [ \$# -eq 0 ]
+then
+ $BIN.orig | sed s/x86_64/i686/g
+else
+ $BIN.orig "\$*" | sed s/x86_64/i686/g
+fi
+EOF
+ chmod 755 $CHROOT/$BIN
+done
+ fi
+umount $CHROOT/proc $CHROOT/dev/pts
+}
+
+prepare(){
+[ -d jails/$CODENAME-$ARCH ] || createjail
+cat << EOF > jails/$CODENAME-$ARCH/tmp/update
+mount -t proc none /proc
+export DEBIAN_FRONTEND=noninteractive
+export LANG=C
+apt-get update
+apt-get --force-yes -y install sysv-rc dpkg sysvinit-utils upstart
+for i in /usr/sbin/invoke-rc.d /sbin/start /sbin/start-stop-daemon /usr/sbin/service /sbin/initctl
+do
+ mv \$i \$i.real
+ cp /bin/true \$i
+done
+export DEBIAN_FRONTEND=noninteractive
+apt-get -q --force-yes -y dist-upgrade
+umount /proc
+EOF
+chroot jails/$CODENAME-$ARCH bash /tmp/update
+if [ -f jails/$CODENAME-$ARCH/CurrentlyBuilding ]
+then
+ echo The $CODENAME-$ARCH jail appears to be running $(cat jails/$CODENAME-$ARCH/CurrentlyBuilding |grep Package: |sed 's/Package:\ //'), aborting.
+ exit 1
+fi
+ CHROOT=jails/$CODENAME-$ARCH disablescripts
+}
+
+tmpumount(){
+ grep jails/$CODENAME-$ARCH/tmp /proc/mounts -q || return 0
+ umount jails/$CODENAME-$ARCH/tmp && return
+ echo ERROR: could not umount tmpfs at jails/$CODENAME-$ARCH/tmp
+ exit 1
+}
+tmpmount(){
+ [ $MEM -lt 16000000 ] && return
+ grep jails/$CODENAME-$ARCH/tmp /proc/mounts -q && tmpumount
+ mount -t tmpfs -o size=20G none jails/$CODENAME-$ARCH/tmp
+}
+
+compile(){
+ [ -d jails/$CODENAME-$ARCH/$WORKDIR ] && rm -rf jails/$CODENAME-$ARCH/$WORKDIR/
+tmpmount
+ cp -a helpers/ jails/$CODENAME-$ARCH/$WORKDIR/
+
+cat << EOF > jails/$CODENAME-$ARCH/usr/local/sbin/makepackage-handler
+#!/bin/bash
+WORKDIR=$WORKDIR
+PACKAGE=$PACKAGE
+cd $WORKDIR
+[ -d LOGS ] || mkdir LOGS
+[ -d PACKAGES ] || mkdir PACKAGES
+export LD_PRELOAD="${LD_PRELOAD:+$LD_PRELOAD:}/usr/lib/libeatmydata/libeatmydata.so"
+export PATH="/usr/lib/ccache:${PATH}"
+bash -e make-$PACKAGE 2>&1 || exit 1
+EOF
+
+cat << EOF > jails/$CODENAME-$ARCH/etc/pkgbinarymangler/striptranslations.conf
+enable: true
+components: main
+invalid_currentlybuilding: ignore
+posuffix: translations
+oem_blacklist: partner
+EOF
+
+cat << EOF > jails/$CODENAME-$ARCH/etc/pkgbinarymangler/sanitychecks.conf
+enable: true
+EOF
+
+cat << EOF > jails/$CODENAME-$ARCH/etc/pkgbinarymangler/maintainermangler.conf
+enable: true
+invalid_currentlybuilding: ignore
+EOF
+
+cat << EOF > jails/$CODENAME-$ARCH/etc/pkgbinarymangler/maintainermangler.overrides
+default: Trisquel GNU/Linux developers <trisquel-devel@listas.trisquel.info>
+ignore_domains: trisquel.info sognus.com listas.trisquel.info gnu.org fsf.org
+ignore_emails: ruben@trisquel.info
+EOF
+
+ chmod 755 jails/$CODENAME-$ARCH/usr/local/sbin/makepackage-handler
+
+ if ! chroot jails/$CODENAME-$ARCH makepackage-handler /$WORKDIR/make-$PACKAGE
+ then
+ rm jails/$CODENAME-$ARCH/CurrentlyBuilding
+ exit 1
+ fi
+ find jails/$CODENAME-$ARCH/$WORKDIR/PACKAGES/$PACKAGE/ -maxdepth 1 -type f -exec cp {} $REPOSITORY/incoming/ \;
+tmpumount
+}
+
+ ARCH=i386 prepare
+ ARCH=amd64 prepare
+ ARCH=i386 compile
+ ARCH=amd64 compile
+
+cd $REPOSITORY
+
+for dsc in incoming/*.dsc
+do
+ if gpg -K | grep $GPGKEY -q
+ then
+ debsign -k$GPGKEY $dsc
+ else
+ echo GPG private key for $GPGKEY not found, the packages and repositories will not be signed.
+ fi
+ reprepro -v -C main includedsc $CODENAME $dsc || reprepro -S admin -P optional -v -b . -C main includedsc $CODENAME $dsc
+done
+
+find incoming -name *.deb -exec reprepro -v -C main includedeb $CODENAME {} \;
+find incoming -name *.udeb -exec reprepro -v -C main includeudeb $CODENAME {} \;
+
+rm incoming/*