Initial commit
This commit is contained in:
commit
ba5e6216ed
25
Dockerfile
Normal file
25
Dockerfile
Normal file
@ -0,0 +1,25 @@
|
||||
FROM busybox
|
||||
MAINTAINER Julian Ospald <hasufell@posteo.de>
|
||||
|
||||
# copy hooks
|
||||
COPY ./config/paludis /etc/paludis-new
|
||||
|
||||
# This one should be present by running the build.sh script
|
||||
COPY bootstrap.sh /
|
||||
|
||||
# one step, to make the layer as thin as possible
|
||||
# bootstrap.h calls build.sh
|
||||
RUN /bootstrap.sh amd64 x86_64
|
||||
|
||||
COPY build.sh /
|
||||
|
||||
RUN /build.sh
|
||||
|
||||
# update etc files... hope this doesn't screw up
|
||||
RUN eclectic config accept-all
|
||||
|
||||
# don't allow regular sync, because we want to make sure
|
||||
# all images deriving from this one have the same state
|
||||
RUN sed -i -e 's|^sync|#sync|' /etc/paludis/repositories/*.conf
|
||||
|
||||
|
59
README.md
Normal file
59
README.md
Normal file
@ -0,0 +1,59 @@
|
||||
## Usage
|
||||
|
||||
This image is optimized for size, as such, stuff in the following
|
||||
directories is removed:
|
||||
```
|
||||
/srv/binhost/
|
||||
/usr/include/
|
||||
/usr/lib64/debug/
|
||||
/usr/portage/
|
||||
/usr/share/applications/
|
||||
/usr/share/doc/
|
||||
/usr/share/gtk-doc/
|
||||
/usr/share/info/
|
||||
/usr/share/man/
|
||||
/usr/share/mime/
|
||||
/var/cache/paludis/metadata/
|
||||
/var/cache/paludis/names/
|
||||
/var/tmp/paludis/
|
||||
```
|
||||
|
||||
When installing something, the hook in `ebuild_preinst_pre/cleanup_files.bash`
|
||||
will remove files from the following directories from the package before
|
||||
it is merged:
|
||||
```
|
||||
/usr/include/
|
||||
/usr/lib64/debug/
|
||||
/usr/share/applications/
|
||||
/usr/share/doc/
|
||||
/usr/share/gtk-doc/
|
||||
/usr/share/info/
|
||||
/usr/share/man/
|
||||
/usr/share/mime/
|
||||
```
|
||||
|
||||
When creating a derived image, you have to do the following before
|
||||
you can attempt package installation, since the checked out files
|
||||
of the main gentoo repositories are removed, while the git repository
|
||||
data is still intact:
|
||||
```sh
|
||||
git -C /usr/portage checkout -- .
|
||||
cave sync gentoo
|
||||
```
|
||||
|
||||
A complete Dockerfile command to install something could look like this:
|
||||
```
|
||||
RUN chgrp paludisbuild /dev/tty && \
|
||||
git -C /usr/portage checkout -- . && \
|
||||
env-update && \
|
||||
source /etc/profile && \
|
||||
cave sync && \
|
||||
cave resolve <the-package-I-want> -x && \
|
||||
rm -rf /var/cache/paludis/names/* /var/cache/paludis/metadata/* \
|
||||
/var/tmp/paludis/* /usr/portage/* /srv/binhost/*
|
||||
```
|
||||
|
||||
A few things to note are also:
|
||||
* non-binary packages are not allowed, since /usr/include/ files are removed and compilation would probably fail hard (a complete rebuild via `cave resolve -e world -x` would be necessary after removing the `ebuild_preinst_pre/cleanup_files.bash` hook)
|
||||
* the same goes for Dockerfiles that do local compilations, they will have to run `cave resolve -e world -x` in order to restore all development files
|
||||
* a regular sync does not update the actual repositories, so we have a defined state (files in `/etc/paludis/repositories/*.conf` can be modified to allow that though)
|
55
bootstrap.sh
Executable file
55
bootstrap.sh
Executable file
@ -0,0 +1,55 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
# First param is package tarball, 2nd is the *.DIGEST file
|
||||
VerifyShaOfStage3()
|
||||
{
|
||||
test_sum=$(awk -v myvar="$1" '$2==myvar {for(i=1; i<=1; i++) { print $1; exit}}' $2)
|
||||
calculated_sum=$(sha1sum $1 | awk '{print $1}' -)
|
||||
if [[ "$test_sum" == "$calculated_sum" ]]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
suffix=$3 # e.g. -hardened
|
||||
arch=$1
|
||||
dist="http://dev.exherbo.org/stages/"
|
||||
stage3="exherbo-amd64-current.tar.xz"
|
||||
|
||||
# Create working directory, keep a copy of busybox handy
|
||||
mkdir newWorldOrder; cd newWorldOrder
|
||||
cp /bin/busybox .
|
||||
|
||||
echo "Downloading and extracting ${stage3}..."
|
||||
wget -c "${dist}/${stage3}" "${dist}/sha1sum"
|
||||
if VerifyShaOfStage3 $stage3 "sha1sum"; then
|
||||
echo "DIGEST sum is okey";
|
||||
else
|
||||
echo "DIGEST sum is NOT okey";
|
||||
return 1;
|
||||
fi
|
||||
xz -d ${stage3}
|
||||
tar --exclude "./etc/hosts" --exclude "./etc/hostname" --exclude "./sys/*" -xf ${stage3%.*}
|
||||
/newWorldOrder/busybox rm -f ${stage3%.*}
|
||||
|
||||
echo "Installing stage 3"
|
||||
/newWorldOrder/busybox rm -rf /lib* /usr /var /bin /sbin /opt /mnt /media /root /home /run /tmp
|
||||
/newWorldOrder/busybox cp -fRap lib* /
|
||||
/newWorldOrder/busybox cp -fRap bin boot home media mnt opt root run sbin tmp usr var /
|
||||
/newWorldOrder/busybox cp -fRap etc/* /etc/
|
||||
/newWorldOrder/busybox cp -fRap /etc/paludis-new/* /etc/paludis/
|
||||
/newWorldOrder/busybox rm -rf /etc/paludis-new
|
||||
|
||||
# Cleaning
|
||||
cd /
|
||||
/newWorldOrder/busybox rm -rf /newWorldOrder /bootstrap.sh /linuxrc
|
||||
|
||||
# Say hello
|
||||
echo "Bootstrapped ${stage3} into /:"
|
||||
ls --color -lah
|
||||
|
||||
# exec /bin/bash -c /build.sh
|
||||
|
37
build.sh
Executable file
37
build.sh
Executable file
@ -0,0 +1,37 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
source /etc/profile
|
||||
eclectic env update
|
||||
|
||||
# set timezone
|
||||
ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime
|
||||
|
||||
# set locale
|
||||
export LANG=en_US.utf8
|
||||
export LANGUAGE=en_US:en
|
||||
export LC_ALL=en_US.utf8
|
||||
cat << EOF > /etc/locale.gen
|
||||
en_US ISO-8859-1
|
||||
en_US.UTF-8 UTF-8
|
||||
EOF
|
||||
localedef -i en_US -f ISO-8859-1 en_US
|
||||
localedef -i en_US -f UTF-8 en_US.utf8
|
||||
echo LANG="en_US.UTF-8" > /etc/env.d/99locale
|
||||
|
||||
# update
|
||||
sed -i -e 's#^SCM_REPOSITORY=.*$#SCM_REPOSITORY="https://galileo.mailstation.de/gerrit/paludis"#' \
|
||||
/var/db/paludis/repositories/arbor/packages/sys-apps/paludis/paludis-scm.exheres-0
|
||||
chgrp paludisbuild /dev/tty
|
||||
cave sync
|
||||
cave resolve -z -1 dev-libs/libressl sys-apps/paludis -U dev-libs/openssl -D dev-libs/openssl -f -x
|
||||
cave resolve -z \!dev-libs/openssl -u '*/*' -x
|
||||
cave resolve -z -1 dev-libs/libressl -x
|
||||
cave resolve -z -1 net-misc/wget net-misc/curl -x
|
||||
cave fix-linkage -x -- --without sys-apps/paludis
|
||||
cave resolve -z \!sys-apps/systemd -u '*/*' -x
|
||||
cave resolve -c world -x
|
||||
cave purge -x
|
||||
cave fix-linkage -x
|
||||
|
10
config/paludis/bashrc
Normal file
10
config/paludis/bashrc
Normal file
@ -0,0 +1,10 @@
|
||||
CHOST="x86_64-pc-linux-gnu"
|
||||
x86_64_pc_linux_gnu_CFLAGS="-march=native -pipe -O2"
|
||||
x86_64_pc_linux_gnu_CXXFLAGS="-march=native -pipe -O2"
|
||||
x86_64_pc_linux_gnu_LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,--hash-style=gnu"
|
||||
i686_pc_linux_gnu_CFLAGS="-march=native -pipe -O2"
|
||||
i686_pc_linux_gnu_CXXFLAGS="-march=native -pipe -O2"
|
||||
i686_pc_linux_gnu_LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,--hash-style=gnu"
|
||||
|
||||
[[ -e /etc/paludis/hooks/setup_pkg_env.bash ]] && . /etc/paludis/hooks/setup_pkg_env.bash
|
||||
|
6
config/paludis/env.conf.d/O3.conf
Normal file
6
config/paludis/env.conf.d/O3.conf
Normal file
@ -0,0 +1,6 @@
|
||||
add-options CFLAGS -O3
|
||||
add-options x86_64_pc_linux_gnu_CFLAGS -O3
|
||||
add-options i686_pc_linux_gnu_CFLAGS -O3
|
||||
add-options CXXFLAGS -O3
|
||||
add-options x86_64_pc_linux_gnu_CXXFLAGS -O3
|
||||
add-options i686_pc_linux_gnu_CXXFLAGS -O3
|
14
config/paludis/env.conf.d/clang-lto.conf
Normal file
14
config/paludis/env.conf.d/clang-lto.conf
Normal file
@ -0,0 +1,14 @@
|
||||
CC='clang'
|
||||
CXX='clang++'
|
||||
CFLAGS="${CFLAGS} -O3 -flto"
|
||||
x86_64_pc_linux_gnu_CFLAGS="${x86_64_pc_linux_gnu_CFLAGS} -O3 -flto"
|
||||
i686_pc_linux_gnu_CFLAGS="${i686_pc_linux_gnu_CFLAGS} -O3 -flto"
|
||||
CXXFLAGS="${CXXFLAGS} -O3 -flto"
|
||||
x86_64_pc_linux_gnu_CXXFLAGS="${x86_64_pc_linux_gnu_CXXFLAGS} -O3 -flto"
|
||||
i686_pc_linux_gnu_CXXFLAGS="${i686_pc_linux_gnu_CXXFLAGS} -O3 -flto"
|
||||
LDFLAGS="${LDFLAGS} -O3 -flto -Wl,-plugin,/usr/lib64/LLVMgold.so"
|
||||
x86_64_pc_linux_gnu_LDFLAGS="${x86_64_pc_linux_gnu_LDFLAGS} -O3 -flto -Wl,-plugin,/usr/lib64/LLVMgold.so"
|
||||
i686_pc_linux_gnu_LDFLAGS="${i686_pc_linux_gnu_LDFLAGS} -O3 -flto -Wl,-plugin,/usr/lib64/LLVMgold.so"
|
||||
AR='/usr/local/bin/clang-ar'
|
||||
RANLIB=':'
|
||||
NM='nm --plugin /usr/lib64/LLVMgold.so'
|
6
config/paludis/env.conf.d/debug.conf
Normal file
6
config/paludis/env.conf.d/debug.conf
Normal file
@ -0,0 +1,6 @@
|
||||
add-options CFLAGS -Wall -g
|
||||
add-options x86_64_pc_linux_gnu_CFLAGS -Wall -g
|
||||
add-options i686_pc_linux_gnu_CFLAGS -Wall -g
|
||||
add-options CXXFLAGS -Wall -g
|
||||
add-options x86_64_pc_linux_gnu_CXXFLAGS -Wall -g
|
||||
add-options i686_pc_linux_gnu_CXXFLAGS -Wall -g
|
6
config/paludis/env.conf.d/fpermissive.conf
Normal file
6
config/paludis/env.conf.d/fpermissive.conf
Normal file
@ -0,0 +1,6 @@
|
||||
add-options CFLAGS -fpermissive
|
||||
add-options x86_64_pc_linux_gnu_CFLAGS -fpermissive
|
||||
add-options i686_pc_linux_gnu_CFLAGS -fpermissive
|
||||
add-options CXXFLAGS -fpermissive
|
||||
add-options x86_64_pc_linux_gnu_CXXFLAGS -fpermissive
|
||||
add-options i686_pc_linux_gnu_CXXFLAGS -fpermissive
|
6
config/paludis/env.conf.d/full-debug.conf
Normal file
6
config/paludis/env.conf.d/full-debug.conf
Normal file
@ -0,0 +1,6 @@
|
||||
add-options CFLAGS -Wall -g -O0
|
||||
add-options x86_64_pc_linux_gnu_CFLAGS -Wall -g -O0
|
||||
add-options i686_pc_linux_gnu_CFLAGS -Wall -g -O0
|
||||
add-options CXXFLAGS -Wall -g -O0
|
||||
add-options x86_64_pc_linux_gnu_CXXFLAGS -Wall -g -O0
|
||||
add-options i686_pc_linux_gnu_CXXFLAGS -Wall -g -O0
|
9
config/paludis/env.conf.d/gcc.conf
Normal file
9
config/paludis/env.conf.d/gcc.conf
Normal file
@ -0,0 +1,9 @@
|
||||
CC=x86_64-pc-linux-gnu-gcc
|
||||
CXX=x86_64-pc-linux-gnu-g++
|
||||
|
||||
remove-options CFLAGS -Qunused-arguments -fcolor-diagnostics
|
||||
remove-options x86_64_pc_linux_gnu_CFLAGS -Qunused-arguments -fcolor-diagnostics
|
||||
remove-options i686_pc_linux_gnu_CFLAGS -Qunused-arguments -fcolor-diagnostics
|
||||
remove-options CXXFLAGS -Qunused-arguments -fcolor-diagnostics
|
||||
remove-options x86_64_pc_linux_gnu_CXXFLAGS -Qunused-arguments -fcolor-diagnostics
|
||||
remove-options i686_pc_linux_gnu_CXXFLAGS -Qunused-arguments -fcolor-diagnostics
|
6
config/paludis/env.conf.d/no-O3.conf
Normal file
6
config/paludis/env.conf.d/no-O3.conf
Normal file
@ -0,0 +1,6 @@
|
||||
remove-options CFLAGS -O3
|
||||
remove-options x86_64_pc_linux_gnu_CFLAGS -O3
|
||||
remove-options i686_pc_linux_gnu_CFLAGS -O3
|
||||
remove-options CXXFLAGS -O3
|
||||
remove-options x86_64_pc_linux_gnu_CXXFLAGS -O3
|
||||
remove-options i686_pc_linux_gnu_CXXFLAGS -O3
|
3
config/paludis/env.conf.d/no-as-needed.conf
Normal file
3
config/paludis/env.conf.d/no-as-needed.conf
Normal file
@ -0,0 +1,3 @@
|
||||
remove-options LDFLAGS -Wl,--as-needed
|
||||
remove-options x86_64_pc_linux_gnu_LDFLAGS -Wl,--as-needed
|
||||
remove-options i686_pc_linux_gnu_LDFLAGS -Wl,--as-needed
|
6
config/paludis/env.conf.d/no-debug.conf
Normal file
6
config/paludis/env.conf.d/no-debug.conf
Normal file
@ -0,0 +1,6 @@
|
||||
add-options CFLAGS -g0
|
||||
add-options x86_64_pc_linux_gnu_CFLAGS -g0
|
||||
add-options i686_pc_linux_gnu_CFLAGS -g0
|
||||
add-options CXXFLAGS -g0
|
||||
add-options x86_64_pc_linux_gnu_CXXFLAGS -g0
|
||||
add-options i686_pc_linux_gnu_CXXFLAGS -g0
|
1
config/paludis/env.conf.d/no-ninja.conf
Normal file
1
config/paludis/env.conf.d/no-ninja.conf
Normal file
@ -0,0 +1 @@
|
||||
CMAKE_MAKEFILE_GENERATOR="emake"
|
1
config/paludis/env.conf.d/no-parallel-build.conf
Normal file
1
config/paludis/env.conf.d/no-parallel-build.conf
Normal file
@ -0,0 +1 @@
|
||||
MAKEOPTS="-j1"
|
27
config/paludis/options.conf
Normal file
27
config/paludis/options.conf
Normal file
@ -0,0 +1,27 @@
|
||||
# system, general, other
|
||||
*/* -X -cups -gtk -gnutls -acpi -bash-completion
|
||||
|
||||
# linguas
|
||||
*/* LINGUAS: en
|
||||
|
||||
# build options
|
||||
*/* build_options: symbols=strip work=remove jobs=8 -optional_tests -recommended_tests -expensive_tests
|
||||
|
||||
# targets
|
||||
*/* targets: -* x86_64-pc-linux-gnu
|
||||
|
||||
# SSL
|
||||
*/* providers: -gnutls -openssl libressl
|
||||
dev-libs/glib-networking providers: gnutls
|
||||
|
||||
# jpeg
|
||||
*/* providers: -ijg-jpeg jpeg-turbo
|
||||
|
||||
# no systemd
|
||||
*/* providers: -systemd eudev rsyslog
|
||||
*/* -systemd
|
||||
*/* providers: -runit -sinit sysvinit
|
||||
|
||||
# paludis
|
||||
sys-apps/paludis pbin search-index
|
||||
|
4
config/paludis/output.conf
Normal file
4
config/paludis/output.conf
Normal file
@ -0,0 +1,4 @@
|
||||
# always_keep_output_logs may be set to 'true' to always keep output logs, even
|
||||
# if a build succeeds.
|
||||
always_keep_output_logs = false
|
||||
|
0
config/paludis/package_env.conf
Normal file
0
config/paludis/package_env.conf
Normal file
Loading…
Reference in New Issue
Block a user