From c19f0ed46da9cccef916bd408feeeee6b344b87e Mon Sep 17 00:00:00 2001 From: Roger Shimizu Date: Wed, 11 Apr 2018 23:09:26 +0900 Subject: [PATCH] Add scripts/chroot_build.sh to call build_deb.sh in a chrooted env Support common debian and ubuntu version, such as jessie, stretch, trusty, and xenial, etc. e.g. $ sudo scripts/chroot_build.sh jessie --- scripts/chroot_build.sh | 125 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100755 scripts/chroot_build.sh diff --git a/scripts/chroot_build.sh b/scripts/chroot_build.sh new file mode 100755 index 00000000..2026e7f6 --- /dev/null +++ b/scripts/chroot_build.sh @@ -0,0 +1,125 @@ +#!/bin/sh +# Copyright 2018 Roger Shimizu +# +# This is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +set -e + +help_usage() { +cat << EOT + +Call build_deb.sh script in a chrooted environment +Usage: + sudo $(basename $0) [--help|-h] [codename] + + --help|-h Show this usage. + [code name] Debian/Ubuntu release codename + e.g. jessie/stretch/trusty/xenial + +EOT +exit +} + +# POSIX-compliant maint function recommend by devref +# to check for the existence of a command +# https://www.debian.org/doc/manuals/developers-reference/ch06.html#bpp-debian-maint-scripts +pathfind() { + OLDIFS="$IFS" + IFS=: + for p in $PATH; do + if [ -x "$p/$*" ]; then + IFS="$OLDIFS" + return 0 + fi + done + IFS="$OLDIFS" + return 1 +} + +case "$1" in +wheezy|precise) + echo Sorry, the system $1 is not supported. + ;; +jessie|stretch|buster|testing|unstable|sid) + OSID=debian + REPO=http://deb.debian.org/debian + ;; +trusty|yakkety|zesty|xenial|artful|bionic) + OSID=ubuntu + REPO=http://archive.ubuntu.com/ubuntu + ;; +--help|-h|*) + help_usage +esac + +if ! pathfind debootstrap; then + echo Please install debootstrap package. + exit 1 +fi + +OSVER=$1 +CHROOT=/tmp/${OSVER}-build-$(date +%Y%m%d%H%M) +TIMESTAMP0=$(date) + +mkdir -p ${CHROOT}/etc +echo en_US.UTF-8 UTF-8 > ${CHROOT}/etc/locale.gen +if ! debootstrap --variant=minbase --include=ca-certificates,git,sudo,wget,whiptail --exclude=upstart,systemd $OSVER $CHROOT $REPO; then + echo debootstrap failed. Please kindly check whether proper sudo or not. + exit 1 +fi +case "$OSID" in +debian) + echo deb $REPO ${OSVER} main > ${CHROOT}/etc/apt/sources.list + echo deb $REPO ${OSVER}-updates main >> ${CHROOT}/etc/apt/sources.list + echo deb $REPO-security ${OSVER}/updates main >> ${CHROOT}/etc/apt/sources.list + ;; +ubuntu) + echo deb $REPO $OSVER main universe > ${CHROOT}/etc/apt/sources.list + echo deb $REPO ${OSVER}-updates main universe >> ${CHROOT}/etc/apt/sources.list + echo deb $REPO ${OSVER}-security main universe >> ${CHROOT}/etc/apt/sources.list + ;; +esac + +cat << EOL | chroot $CHROOT +apt-get purge -y udev +apt-get update +apt-get -fy install +apt-get -y upgrade +apt-get -y install --no-install-recommends lsb-release +# dh_auto_test of mbedtls (faketime) depends on /dev/shm. https://bugs.debian.org/778462 +mkdir -p ~ /dev/shm +mount tmpfs /dev/shm -t tmpfs + +date > /TIMESTAMP1 +git config --global user.email "script@example.com" +git config --global user.name "build script" +if [ -n "$http_proxy" ]; then + git config --global proxy.http $http_proxy + echo Acquire::http::Proxy \"$http_proxy\"\; > /etc/apt/apt.conf + export http_proxy=$http_proxy + export https_proxy=$https_proxy + export no_proxy=$no_proxy +fi +cd /tmp +wget https://raw.githubusercontent.com/shadowsocks/shadowsocks-libev/master/scripts/build_deb.sh +chmod 755 build_deb.sh +./build_deb.sh +date > /TIMESTAMP2 +./build_deb.sh kcp +umount /dev/shm +EOL + +TIMESTAMP1=$(cat ${CHROOT}/TIMESTAMP1) +TIMESTAMP2=$(cat ${CHROOT}/TIMESTAMP2) +TIMESTAMP3=$(date) + +printf \\n"All built deb packages:"\\n +ls -l ${CHROOT}/tmp/*.deb +echo +echo Start-Time: $TIMESTAMP0 +echo ChrootDone: $TIMESTAMP1 +echo SsDeb-Done: $TIMESTAMP2 +echo \ Kcp-Done : $TIMESTAMP3