initial commit

This commit is contained in:
josch 2014-06-26 09:44:46 +02:00
commit 7891915fdf
5 changed files with 326 additions and 0 deletions

58
create-binfmt-tree.sh Executable file
View file

@ -0,0 +1,58 @@
#!/bin/sh -ex
usage() {
echo "Usage: $0 arch suite rootdir [mirror]"
}
MIRROR="http://127.0.0.1:3142/ftp.de.debian.org/debian"
[ "$#" -ne 3 ] && [ "$#" -ne 4 ] && { usage; exit; }
ARCH="$1"
SUITE="$2"
ROOTDIR="$3"
MIRROR=${4:-$MIRROR}
[ -e "$ROOTDIR" ] && { echo "root directory still exists"; exit; }
mkdir "$ROOTDIR"
ROOTDIR=`realpath "$ROOTDIR"`
# apt options
APT_OPTS="-y"
APT_OPTS=$APT_OPTS" -o Apt::Architecture=$ARCH"
APT_OPTS=$APT_OPTS" -o Dir::Etc::TrustedParts=$ROOTDIR/etc/apt/trusted.gpg.d"
APT_OPTS=$APT_OPTS" -o Dir::Etc::Trusted=$ROOTDIR/etc/apt/trusted.gpg"
APT_OPTS=$APT_OPTS" -o Apt::Get::AllowUnauthenticated=true"
APT_OPTS=$APT_OPTS" -o Apt::Get::Download-Only=true"
APT_OPTS=$APT_OPTS" -o Apt::Install-Recommends=false"
APT_OPTS=$APT_OPTS" -o Dir=$ROOTDIR/"
APT_OPTS=$APT_OPTS" -o Dir::Etc=$ROOTDIR/etc/apt/"
APT_OPTS=$APT_OPTS" -o Dir::Etc::SourceList=$ROOTDIR/etc/apt/sources.list"
APT_OPTS=$APT_OPTS" -o Dir::State=$ROOTDIR/var/lib/apt/"
APT_OPTS=$APT_OPTS" -o Dir::State::Status=$ROOTDIR/var/lib/dpkg/status"
APT_OPTS=$APT_OPTS" -o Dir::Cache=$ROOTDIR/var/cache/apt/"
# initial setup for apt and dpkg to work properly
mkdir -p $ROOTDIR
mkdir -p $ROOTDIR/etc/apt/
mkdir -p $ROOTDIR/etc/apt/sources.list.d/
mkdir -p $ROOTDIR/etc/apt/preferences.d/
mkdir -p $ROOTDIR/var/lib/apt/
mkdir -p $ROOTDIR/var/lib/apt/lists/partial/
mkdir -p $ROOTDIR/var/lib/dpkg/
mkdir -p $ROOTDIR/var/cache/apt/
touch $ROOTDIR/var/lib/dpkg/status
# fill sources.list
echo deb $MIRROR $SUITE main > $ROOTDIR/etc/apt/sources.list
# update and install git and ruby
apt-get $APT_OPTS update
apt-get $APT_OPTS install libc6 libselinux1 libacl1 man-db libstdc++6
# unpack downloaded archives
for deb in $ROOTDIR/var/cache/apt/archives/*.deb; do
dpkg -x $deb $ROOTDIR
done

23
multistrap-binfmt.conf Normal file
View file

@ -0,0 +1,23 @@
[General]
arch=
directory=
cleanup=true
unpack=true
noauth=true
aptsources=Debian
bootstrap=Debian
allowrecommends=false
addimportant=false
omitrequired=true
# libselinux1
# libacl1
# man-db - man-db
# libstdc++6
# libfreetype6 - fontconfig
# libx11-6 - libgtk2.0-0
[Debian]
packages=libc6 libselinux1 libacl1 man-db libstdc++6 libfreetype6 libx11-6 libfontconfig1
source=http://ftp.de.debian.org/debian
suite=sid
omitdebsrc=true

4
notes Normal file
View file

@ -0,0 +1,4 @@
sudo dd if=/dev/zero of=/dev/sdc bs=1M count=1 && echo -ne "c\nu\no\nn\np\n1\n\n\np\nw\n" | sudo fdisk /dev/sdc
sudo mkfs.ext3 /dev/sdc1 && sudo mount /dev/sdc1 /mnt && sudo tar -C /mnt -xf debian-sid-armel-2011-06-25.tar && sudo umount /mnt
SUITE=sid ARCH=armel QEMU_LD_PREFIX=`pwd`/debian-$SUITE-$ARCH-`date +%F` ./polystrap.sh -a $ARCH -s $SUITE -m http://127.0.0.1:3142/cdn.debian.net/debian om-gta02/

132
prepare_binfmt_dir.sh Normal file
View file

@ -0,0 +1,132 @@
#!/bin/sh
#
# polystrap-binfmt - helps preparing the build host for running polystrap
#
# Copyright (C) 2011 by Geert Stappers <stappers@stappers.nl>
#
# Polystrap-binfmt is based upon the research of Josch Schauer
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM,OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
set -e
if [ $( id --user ) -eq 0 ] ; then
:
else
echo 1>&2 E: Run this script as root
exit 1
fi
usage() {
echo -e "Usage: $0: [-m mirror] architecture directory\n"
}
export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \
LC_ALL=C LANGUAGE=C LANG=C
while getopts m: opt; do
case $opt in
m) _MIRROR="$OPTARG";;
?) usage; exit 1;;
esac
done
shift $(($OPTIND - 1))
[ "$#" -ne 2 ] && { echo 1>&2 "E: Two arguments required"; usage; exit 1; }
ARCH="$1"
TMPDIR="$2"
if [ -d "$TMPDIR" ] ; then
TMPDIR="${TMPDIR}/polystrap-binfmt-$$"
mkdir $TMPDIR
else
echo 1>&2 "E: $TMPDIR not an existing directory"
exit 1
fi
[ ! -d "$TMPDIR" ] && { echo 2>&1 "E: Could not create $TMPDIR"; exit 1; }
MIRROR="http://ftp.nl.debian.org/debian"
# overwrite default Debian archive by commandline option
MIRROR=${_MIRROR:-$MIRROR}
MTCNFG=$TMPDIR/multistrap.conf
cat << LastLine > $MTCNFG
# this is a temporary configuration file for multistrap
# it is created by $0
# and should also have been deleted by $0
#
[General]
arch=
directory=
cleanup=true
unpack=true
noauth=true
aptsources=Debian
bootstrap=BinfmtStuff
allowrecommends=false
addimportant=false
omitrequired=true
# shared libraries needed for executing package configuration scripts with qemu
# user mode emulation
#
# man-db to configure man-db
# libfreetype6 to configure fontconfig
# libx11 to configure libgtk2.0-0
[BinfmtStuff]
packages=libc6 libselinux1 libacl1 man-db libstdc++6 libfreetype6 libx11-6
source=$MIRROR
suite=sid
omitdebsrc=true
# l l
LastLine
[ ! -r "$MTCNFG" ] && { echo 1>&2 "E: Creation of $MTCNFG failed"; exit 1; }
# download and extract packages with binfmt stuff
multistrap -a $ARCH -d $TMPDIR/binfmtroot -f $MTCNFG
RETVAL=$?
if [ $RETVAL -ne 0 ] ; then
echo 1>&2 E: multistrap returned a non zero value
echo I: no clean up of temporary files done, the multistrap command was
echo I: multistrap -a $ARCH -d $TMPDIR/binfmtroot -f $MTCNFG
exit 1
fi
# deduce binfmt architecture from architecture
if [ "$ARCH" = $( dpkg --print-architecture ) ]; then
BINFMT_ARCH=$ARCH
echo W: It is strange to $0 on a $ARCH host for a $BINFMT_ARCH target
else
case $ARCH in
alpha|amd64|arm|armeb|i386|m68k|mips|mipsel\
|powerpc|ppc64|sh4|sh4eb|sparc|sparc64)
BINFMT_ARCH=$ARCH ;;
armel) BINFMT_ARCH=arm ;;
lpia) BINFMT_ARCH=i386 ;; # not yet verified FIXME
*) echo "unknown architecture: $ARCH"; exit 1;;
esac
fi
rm -rf /etc/qemu-binfmt/$BINFMT_ARCH
cp -r $TMPDIR/binfmtroot /etc/qemu-binfmt/$BINFMT_ARCH
# clean up
rm -rf $TMPDIR

109
rootstock.sh Executable file
View file

@ -0,0 +1,109 @@
#!/bin/sh -ex
# check for fakeroot
if [ "$LOGNAME" = "root" ] \
|| [ "$USER" = "root" ] \
|| [ "$USERNAME" = "root" ] \
|| [ "$SUDO_COMMAND" != "" ] \
|| [ "$SUDO_USER" != "" ] \
|| [ "$SUDO_UID" != "" ] \
|| [ "$SUDO_GID" != "" ]; then
echo "don't run this script as root - there is no need to"
exit
fi
# modify these
ARCH="amd64"
DIST="squeeze"
MIRROR="http://127.0.0.1:3142/ftp.de.debian.org/debian"
DIRECTORY="`pwd`/debian-$DIST-$ARCH-ministrap"
# re-execute script in fakeroot
if [ "$FAKEROOTKEY" = "" ]; then
echo "re-executing script inside fakeroot"
fakeroot $0;
rsync -Phaze ssh $DIRECTORY/ mister-muffin.de:/var/www/
ssh mister-muffin.de "chown -R www-data:www-data /var/www/dudle.mister-muffin.de/"
exit
fi
# apt options
APT_OPTS="-y"
APT_OPTS=$APT_OPTS" -o Apt::Architecture=$ARCH"
APT_OPTS=$APT_OPTS" -o Dir::Etc::TrustedParts=$DIRECTORY/etc/apt/trusted.gpg.d"
APT_OPTS=$APT_OPTS" -o Dir::Etc::Trusted=$DIRECTORY/etc/apt/trusted.gpg"
APT_OPTS=$APT_OPTS" -o Apt::Get::AllowUnauthenticated=true"
APT_OPTS=$APT_OPTS" -o Apt::Get::Download-Only=true"
APT_OPTS=$APT_OPTS" -o Apt::Install-Recommends=false"
APT_OPTS=$APT_OPTS" -o Dir=$DIRECTORY/"
APT_OPTS=$APT_OPTS" -o Dir::Etc=$DIRECTORY/etc/apt/"
APT_OPTS=$APT_OPTS" -o Dir::Etc::SourceList=$DIRECTORY/etc/apt/sources.list"
APT_OPTS=$APT_OPTS" -o Dir::State=$DIRECTORY/var/lib/apt/"
APT_OPTS=$APT_OPTS" -o Dir::State::Status=$DIRECTORY/var/lib/dpkg/status"
APT_OPTS=$APT_OPTS" -o Dir::Cache=$DIRECTORY/var/cache/apt/"
# clean root directory
rm -rf $DIRECTORY
# initial setup for apt to work properly
mkdir -p $DIRECTORY
mkdir -p $DIRECTORY/etc/apt/
mkdir -p $DIRECTORY/etc/apt/sources.list.d/
mkdir -p $DIRECTORY/etc/apt/preferences.d/
mkdir -p $DIRECTORY/var/lib/apt/
mkdir -p $DIRECTORY/var/lib/apt/lists/partial/
mkdir -p $DIRECTORY/var/lib/dpkg/
mkdir -p $DIRECTORY/var/cache/apt/
# apt somehow needs this file to be present
touch $DIRECTORY/var/lib/dpkg/status
# fill sources.list
echo deb $MIRROR $DIST main > $DIRECTORY/etc/apt/sources.list
# update and install git and ruby
apt-get $APT_OPTS update
apt-get $APT_OPTS install ruby git-core libgettext-ruby1.8 libjson-ruby1.8
# unpack downloaded archives
for deb in $DIRECTORY/var/cache/apt/archives/*.deb; do
dpkg -x $deb $DIRECTORY
done
# delete obsolete directories
rm -rf $DIRECTORY/usr/share/
rm -rf $DIRECTORY/usr/lib/perl/
rm -rf $DIRECTORY/usr/lib/gconv/
rm -rf $DIRECTORY/usr/lib/git-core/
rm -rf $DIRECTORY/usr/sbin/
rm -rf $DIRECTORY/var/
rm -rf $DIRECTORY/bin/
rm -rf $DIRECTORY/sbin/
rm -rf $DIRECTORY/selinux/
rm -rf $DIRECTORY/etc/*
# delete all setuid programs
find $DIRECTORY -perm -4000 -delete
# delete all binaries except for "git" and "ruby"
find $DIRECTORY/usr/bin/ -type f -o -type l | egrep -v "ruby|git$" | xargs rm -rf
# git needs /etc/passwd otherwise git says: "You dont't exist, go away!"
cat > $DIRECTORY/etc/passwd << __END__
www-data:x:33:33:www-data:/var/www:/bin/sh
__END__
# dont forget to create /tmp directory for dudle
mkdir -m 777 $DIRECTORY/tmp
# get latest dudle
bzr branch https://dudle.inf.tu-dresden.de/unstable/ $DIRECTORY/dudle.mister-muffin.de
( cd $DIRECTORY/dudle.mister-muffin.de; make; )
bzr branch https://dudle.inf.tu-dresden.de/unstable/extensions/dc-net/ $DIRECTORY/dudle.mister-muffin.de/extensions/dc-net/
( cd $DIRECTORY/dudle.mister-muffin.de/extensions/dc-net/; make; )
# fix shebang
find $DIRECTORY/dudle.mister-muffin.de/ -type f -regex ".*\.cgi\|.*\.rb" \
| xargs sed -i 's/#!\/usr\/bin\/env ruby/#!\/usr\/bin\/ruby/'
#wget https://dudle.inf.tu-dresden.de/doc/0-register.ogv https://dudle.inf.tu-dresden.de/doc/1-setup.ogv https://dudle.inf.tu-dresden.de/doc/2-participate.ogv
#mv 0-register.ogv 1-setup.ogv 2-participate.ogv $DIRECTORY/dudle.mister-muffin.de/