diff options
Diffstat (limited to 'makeicecat')
-rw-r--r-- | makeicecat | 274 |
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/* |