From c138c335a5d867d81231fdca6f418a9cc11ca244 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Piotrowski?= Date: Mon, 6 Jan 2014 13:08:55 +0100 Subject: [PATCH 1/6] mkimage-arch: use mktemp to create ROOTFS directory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Docker-DCO-1.1-Signed-off-by: Bartłomiej Piotrowski (github: Barthalion) --- contrib/mkimage-arch.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/contrib/mkimage-arch.sh b/contrib/mkimage-arch.sh index db14e8674e..d9e911474e 100755 --- a/contrib/mkimage-arch.sh +++ b/contrib/mkimage-arch.sh @@ -4,19 +4,19 @@ # requires root set -e -PACSTRAP=$(which pacstrap) +PACSTRAP=$(hash pacstrap &>/dev/null) [ "$PACSTRAP" ] || { echo "Could not find pacstrap. Run pacman -S arch-install-scripts" exit 1 } -EXPECT=$(which expect) -[ "$EXPECT" ] || { + +EXPECT=$(hash expect &>/dev/null) +[[ "$EXPECT" ]] || { echo "Could not find expect. Run pacman -S expect" exit 1 } -ROOTFS=~/rootfs-arch-$$-$RANDOM -mkdir $ROOTFS +ROOTFS=$(mktemp -d /tmp/rootfs-archlinux-XXXXXXXXXX) #packages to ignore for space savings PKGIGNORE=linux,jfsutils,lvm2,cryptsetup,groff,man-db,man-pages,mdadm,pciutils,pcmciautils,reiserfsprogs,s-nail,xfsprogs From a4e6e9bd41ee0f80e7e9bce05156ddd7d63554aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Piotrowski?= Date: Mon, 6 Jan 2014 13:10:16 +0100 Subject: [PATCH 2/6] mkimage-arch: remove $DEV instead of renaming it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Docker-DCO-1.1-Signed-off-by: Bartłomiej Piotrowski (github: Barthalion) --- contrib/mkimage-arch.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/mkimage-arch.sh b/contrib/mkimage-arch.sh index d9e911474e..14fb765587 100755 --- a/contrib/mkimage-arch.sh +++ b/contrib/mkimage-arch.sh @@ -47,7 +47,7 @@ arch-chroot $ROOTFS /bin/sh -c 'echo "Server = http://mirrors.kernel.org/archlin # udev doesn't work in containers, rebuild /dev DEV=${ROOTFS}/dev -mv ${DEV} ${DEV}.old +rm -rf ${DEV} mkdir -p ${DEV} mknod -m 666 ${DEV}/null c 1 3 mknod -m 666 ${DEV}/zero c 1 5 From c6535d272c0d1a07ea51639be66e1959a0fc996f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Piotrowski?= Date: Mon, 6 Jan 2014 13:11:16 +0100 Subject: [PATCH 3/6] mkimage-arch: unify usage of brackets around variables MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Docker-DCO-1.1-Signed-off-by: Bartłomiej Piotrowski (github: Barthalion) --- contrib/mkimage-arch.sh | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/contrib/mkimage-arch.sh b/contrib/mkimage-arch.sh index 14fb765587..5f48557f78 100755 --- a/contrib/mkimage-arch.sh +++ b/contrib/mkimage-arch.sh @@ -18,7 +18,7 @@ EXPECT=$(hash expect &>/dev/null) ROOTFS=$(mktemp -d /tmp/rootfs-archlinux-XXXXXXXXXX) -#packages to ignore for space savings +# packages to ignore for space savings PKGIGNORE=linux,jfsutils,lvm2,cryptsetup,groff,man-db,man-pages,mdadm,pciutils,pcmciautils,reiserfsprogs,s-nail,xfsprogs expect < /etc/pacman.d/mirrorlist' # udev doesn't work in containers, rebuild /dev -DEV=${ROOTFS}/dev -rm -rf ${DEV} -mkdir -p ${DEV} -mknod -m 666 ${DEV}/null c 1 3 -mknod -m 666 ${DEV}/zero c 1 5 -mknod -m 666 ${DEV}/random c 1 8 -mknod -m 666 ${DEV}/urandom c 1 9 -mkdir -m 755 ${DEV}/pts -mkdir -m 1777 ${DEV}/shm -mknod -m 666 ${DEV}/tty c 5 0 -mknod -m 600 ${DEV}/console c 5 1 -mknod -m 666 ${DEV}/tty0 c 4 0 -mknod -m 666 ${DEV}/full c 1 7 -mknod -m 600 ${DEV}/initctl p -mknod -m 666 ${DEV}/ptmx c 5 2 +DEV=$ROOTFS/dev +rm -rf $DEV +mkdir -p $DEV +mknod -m 666 $DEV/null c 1 3 +mknod -m 666 $DEV/zero c 1 5 +mknod -m 666 $DEV/random c 1 8 +mknod -m 666 $DEV/urandom c 1 9 +mkdir -m 755 $DEV/pts +mkdir -m 1777 $DEV/shm +mknod -m 666 $DEV/tty c 5 0 +mknod -m 600 $DEV/console c 5 1 +mknod -m 666 $DEV/tty0 c 4 0 +mknod -m 666 $DEV/full c 1 7 +mknod -m 600 $DEV/initctl p +mknod -m 666 $DEV/ptmx c 5 2 tar --numeric-owner -C $ROOTFS -c . | docker import - archlinux docker run -i -t archlinux echo Success. From da4ba80733ff4826ea17d253677a58fdedf4cc00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Piotrowski?= Date: Mon, 6 Jan 2014 13:13:19 +0100 Subject: [PATCH 4/6] mkimage-arch: don't generate ISO-8859-1 locale MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Docker-DCO-1.1-Signed-off-by: Bartłomiej Piotrowski (github: Barthalion) --- contrib/mkimage-arch.sh | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/contrib/mkimage-arch.sh b/contrib/mkimage-arch.sh index 5f48557f78..41070aedb1 100755 --- a/contrib/mkimage-arch.sh +++ b/contrib/mkimage-arch.sh @@ -20,7 +20,7 @@ ROOTFS=$(mktemp -d /tmp/rootfs-archlinux-XXXXXXXXXX) # packages to ignore for space savings PKGIGNORE=linux,jfsutils,lvm2,cryptsetup,groff,man-db,man-pages,mdadm,pciutils,pcmciautils,reiserfsprogs,s-nail,xfsprogs - + expect < $ROOTFS/etc/locale.gen < $ROOTFS/etc/locale.gen arch-chroot $ROOTFS locale-gen arch-chroot $ROOTFS /bin/sh -c 'echo "Server = http://mirrors.kernel.org/archlinux/\$repo/os/\$arch" > /etc/pacman.d/mirrorlist' From 787ff55283067ef3d8da3238e65ca204bc63b3f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Piotrowski?= Date: Mon, 6 Jan 2014 13:36:04 +0100 Subject: [PATCH 5/6] mkimage-arch: use hash to check if command is available MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apart from having more predictable return codes on various operating systems, it additionally caches the path to application. Docker-DCO-1.1-Signed-off-by: Bartłomiej Piotrowski (github: Barthalion) --- contrib/mkimage-arch.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/contrib/mkimage-arch.sh b/contrib/mkimage-arch.sh index 41070aedb1..da11750c03 100755 --- a/contrib/mkimage-arch.sh +++ b/contrib/mkimage-arch.sh @@ -4,14 +4,12 @@ # requires root set -e -PACSTRAP=$(hash pacstrap &>/dev/null) -[ "$PACSTRAP" ] || { +hash pacstrap &>/dev/null || { echo "Could not find pacstrap. Run pacman -S arch-install-scripts" exit 1 } -EXPECT=$(hash expect &>/dev/null) -[[ "$EXPECT" ]] || { +hash expect &>/dev/null || { echo "Could not find expect. Run pacman -S expect" exit 1 } From 4137a0ea327ea1775c1b57892fd684da2c738f3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Piotrowski?= Date: Mon, 6 Jan 2014 14:25:36 +0100 Subject: [PATCH 6/6] mkimage-arch: provide and use own pacman.conf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Docker-DCO-1.1-Signed-off-by: Bartłomiej Piotrowski (github: Barthalion) --- contrib/mkimage-arch-pacman.conf | 92 ++++++++++++++++++++++++++++++++ contrib/mkimage-arch.sh | 2 +- 2 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 contrib/mkimage-arch-pacman.conf diff --git a/contrib/mkimage-arch-pacman.conf b/contrib/mkimage-arch-pacman.conf new file mode 100644 index 0000000000..45fe03dc96 --- /dev/null +++ b/contrib/mkimage-arch-pacman.conf @@ -0,0 +1,92 @@ +# +# /etc/pacman.conf +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/pacman/ +#CacheDir = /var/cache/pacman/pkg/ +#LogFile = /var/log/pacman.log +#GPGDir = /etc/pacman.d/gnupg/ +HoldPkg = pacman glibc +#XferCommand = /usr/bin/curl -C - -f %u > %o +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#CleanMethod = KeepInstalled +#UseDelta = 0.7 +Architecture = auto + +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +#Color +#TotalDownload +# We cannot check disk space from within a chroot environment +#CheckSpace +#VerbosePkgLists + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional +#RemoteFileSigLevel = Required + +# NOTE: You must run `pacman-key --init` before first using pacman; the local +# keyring can then be populated with the keys of all official Arch Linux +# packagers with `pacman-key --populate archlinux`. + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# The testing repositories are disabled by default. To enable, uncomment the +# repo name header and Include lines. You can add preferred servers immediately +# after the header, and they will be used before the default mirrors. + +#[testing] +#Include = /etc/pacman.d/mirrorlist + +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +#[community-testing] +#Include = /etc/pacman.d/mirrorlist + +[community] +Include = /etc/pacman.d/mirrorlist + +# An example of a custom package repository. See the pacman manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs + diff --git a/contrib/mkimage-arch.sh b/contrib/mkimage-arch.sh index da11750c03..f06d14be4c 100755 --- a/contrib/mkimage-arch.sh +++ b/contrib/mkimage-arch.sh @@ -22,7 +22,7 @@ PKGIGNORE=linux,jfsutils,lvm2,cryptsetup,groff,man-db,man-pages,mdadm,pciutils,p expect <