initial commit
Create Arch Linux ARM images using multi-stage Dockerfile. This works well with binfmt emulation and allows to generate images from scratch. Inspiration taken from: - https://github.com/archlinux/archlinux-docker - https://github.com/lopsided98/archlinux
This commit is contained in:
commit
8dfabe4056
10 changed files with 107 additions and 0 deletions
18
.travis.yml
Normal file
18
.travis.yml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
dist: xenial
|
||||||
|
language: generic
|
||||||
|
sudo: required
|
||||||
|
go:
|
||||||
|
- stable
|
||||||
|
services:
|
||||||
|
- docker
|
||||||
|
install:
|
||||||
|
- go get github.com/estesp/manifest-tool
|
||||||
|
- 'echo ''{ "experimental": true }'' | sudo tee /etc/docker/daemon.json'
|
||||||
|
- sudo systemctl restart docker
|
||||||
|
- sudo apt-get --yes --no-install-recommends install qemu-user-static
|
||||||
|
- sudo su -c 'echo -1 > /proc/sys/fs/binfmt_misc/qemu-arm'
|
||||||
|
- echo ':qemu-arm:M:0:\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm-static:CF' | sudo tee -a /proc/sys/fs/binfmt_misc/register
|
||||||
|
script:
|
||||||
|
- ./build
|
||||||
|
after_success:
|
||||||
|
- '[ "$TRAVIS_PULL_REQUEST" == "false" ] && docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" && ./push'
|
25
Dockerfile
Normal file
25
Dockerfile
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
FROM agners/archlinuxarm-arm32v7
|
||||||
|
|
||||||
|
WORKDIR /archlinux
|
||||||
|
|
||||||
|
RUN mkdir -p /archlinux/rootfs
|
||||||
|
|
||||||
|
COPY pacstrap-docker /archlinux/
|
||||||
|
|
||||||
|
RUN ./pacstrap-docker /archlinux/rootfs \
|
||||||
|
bash sed gzip pacman
|
||||||
|
|
||||||
|
# Remove current pacman database, likely outdated very soon
|
||||||
|
RUN rm rootfs/var/lib/pacman/sync/*
|
||||||
|
|
||||||
|
FROM scratch
|
||||||
|
COPY --from=0 /archlinux/rootfs/ /
|
||||||
|
COPY rootfs/ /
|
||||||
|
|
||||||
|
ENV LANG=en_US.UTF-8
|
||||||
|
|
||||||
|
RUN locale-gen
|
||||||
|
RUN pacman-key --init
|
||||||
|
RUN pacman-key --populate archlinuxarm
|
||||||
|
|
||||||
|
CMD ["/usr/bin/bash"]
|
11
build
Executable file
11
build
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
#!/bin/bash -ex
|
||||||
|
|
||||||
|
DOCKER_ARCH=arm32v7
|
||||||
|
DOCKER_ORG=agners
|
||||||
|
DOCKER_IMAGE=archlinuxarm-${DOCKER_ARCH}
|
||||||
|
|
||||||
|
TAG_DATE=$(date +'%Y%m%d')
|
||||||
|
|
||||||
|
docker build -t $DOCKER_ORG/$DOCKER_IMAGE \
|
||||||
|
-t $DOCKER_ORG/$DOCKER_IMAGE:$TAG_DATE .
|
||||||
|
|
17
pacstrap-docker
Executable file
17
pacstrap-docker
Executable file
|
@ -0,0 +1,17 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
(( $# )) || die "No root directory specified"
|
||||||
|
newroot=$1; shift
|
||||||
|
pacman_args=("${@:-base}")
|
||||||
|
|
||||||
|
[[ -d $newroot ]] || die "%s is not a directory" "$newroot"
|
||||||
|
|
||||||
|
echo 'Creating install root at %s' "$newroot"
|
||||||
|
mkdir -m 0755 -p "$newroot"/var/{cache/pacman/pkg,lib/pacman,log} "$newroot"/{dev,run,etc}
|
||||||
|
mkdir -m 1777 -p "$newroot"/tmp
|
||||||
|
mkdir -m 0555 -p "$newroot"/{sys,proc}
|
||||||
|
|
||||||
|
echo 'Installing packages to %s' "$newroot"
|
||||||
|
if ! pacman -r "$newroot" -Sy --noconfirm "${pacman_args[@]}"; then
|
||||||
|
die 'Failed to install packages to new root'
|
||||||
|
fi
|
11
push
Executable file
11
push
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
#!/bin/bash -ex
|
||||||
|
|
||||||
|
DOCKER_ARCH=arm32v7
|
||||||
|
DOCKER_ORG=agners
|
||||||
|
DOCKER_IMAGE=archlinuxarm-${DOCKER_ARCH}
|
||||||
|
|
||||||
|
TAG_DATE=$(date +'%Y%m%d')
|
||||||
|
|
||||||
|
docker push $DOCKER_ORG/$DOCKER_IMAGE $DOCKER_ORG/$DOCKER_IMAGE:$TAG_DATE
|
||||||
|
|
||||||
|
|
1
rootfs/etc/locale.conf
Normal file
1
rootfs/etc/locale.conf
Normal file
|
@ -0,0 +1 @@
|
||||||
|
LANG=en_US.UTF-8
|
1
rootfs/etc/locale.gen
Normal file
1
rootfs/etc/locale.gen
Normal file
|
@ -0,0 +1 @@
|
||||||
|
en_US.UTF-8 UTF-8
|
1
rootfs/etc/pacman.d/mirrorlist
Normal file
1
rootfs/etc/pacman.d/mirrorlist
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Server = http://mirror.archlinuxarm.org/$arch/$repo
|
11
rootfs/usr/share/libalpm/hooks/man-page-remove.hook
Normal file
11
rootfs/usr/share/libalpm/hooks/man-page-remove.hook
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
[Trigger]
|
||||||
|
Operation = Install
|
||||||
|
Operation = Upgrade
|
||||||
|
Type = Package
|
||||||
|
Target = *
|
||||||
|
|
||||||
|
[Action]
|
||||||
|
Description = Cleaning up package cache...
|
||||||
|
Depends = coreutils
|
||||||
|
When = PostTransaction
|
||||||
|
Exec = /usr/bin/rm -rf /usr/share/man/
|
11
rootfs/usr/share/libalpm/hooks/package-cleanup.hook
Normal file
11
rootfs/usr/share/libalpm/hooks/package-cleanup.hook
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
[Trigger]
|
||||||
|
Operation = Install
|
||||||
|
Operation = Upgrade
|
||||||
|
Type = Package
|
||||||
|
Target = *
|
||||||
|
|
||||||
|
[Action]
|
||||||
|
Description = Cleaning up package cache...
|
||||||
|
Depends = coreutils
|
||||||
|
When = PostTransaction
|
||||||
|
Exec = /usr/bin/rm -rf /var/cache/pacman/pkg
|
Loading…
Reference in a new issue