Bump first version

This commit is contained in:
Daniele Rondina
2018-06-11 17:21:58 +02:00
commit f8af8d50b9
4 changed files with 363 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
*.swp
+43
View File
@@ -0,0 +1,43 @@
# Sabayon ISO Builder image
ARG USER=sabayon
ARG CUSTOM_IMAGE_PREFIX=
# Set arch
ARG TARGET_ARCH=amd64
FROM ${USER}/${CUSTOM_IMAGE_PREFIX}base-${TARGET_ARCH}
MAINTAINER geaaru <geaaru@sabayonlinux.org>
# Add sabayon-stuff files
ADD ./scripts/sabayon_molecules.sh /sabayon_molecules.sh
# Set locales to en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
ARG SABAYON_MOLECULES_DIR=/sabayon
ENV SABAYON_MOLECULES_DIR=${SABAYON_MOLECULES_DIR}
ARG SABAYON_MOLECULES_GITURL=https://github.com/Sabayon/molecules.git
ENV SABAYON_MOLECULES_GITURL=${SABAYON_MOLECULES_GITURL}
ARG SABAYON_MOLECULES_GIT_OPTS=
ENV SABAYON_MOLECULES_GIT_OPTS=${SABAYON_MOLECULES_GIT_OPTS}
ARG SABAYON_MOLECULES_ENVFILE=
ENV SABAYON_MOLECULES_ENVFILE=${SABAYON_MOLECULES_ENVFILE}
ARG CACHEBUST=1
RUN chmod a+x /sabayon_molecules.sh && \
/sabayon_molecules.sh init && \
/sabayon_molecules.sh phase1 && \
/sabayon_molecules.sh clean
# Set environment variables.
ENV HOME ${SABAYON_MOLECULES_DIR}
# Define working directory.
WORKDIR ${SABAYON_MOLECULES_DIR}
# Docker service requirement for systemd mode.
#VOLUME ["/sys/fs/cgroup"]
# Define default command.
ENTRYPOINT ["/usr/bin/tini", "-s", "--", "/sabayon_molecules.sh", "run"]
+57
View File
@@ -0,0 +1,57 @@
# ISO Builder Image
Docker Image for build Sabayon ISO images that use [iso_build.sh](https://github.com/Sabayon/molecules.git).
Image has two mode:
* SystemD Mode: when SABAYON_MOLECULES_SYSTEMD_MODE is equal to 1 container is
started with SytemdD service and a Docker in Docker service and use internal
Docker service for retrieve Spinbase image to use for create ISO images.
This mode require mount of /sys/fs/cgroup volume.
* Normal Mode: when SABAYON_MOLECULES_SYSTEMD_MODE is equal to 0 container
use Docker Host service. This require volume
## Usage
Example of SystemD Mode:
```
$#. docker run --init --device /dev/fuse --tmpfs /run --tmpfs /tmp \
-v /bigdisk/molecules-chroots:/chroots \
-v /bigdisk/molecules-sources:/sources \
-v /sabayon/iso:/iso \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--rm --name build-sab-iso \
--cap-add=SYS_PTRACE --cap-add=SYS_ADMIN --cap-add=NET_ADMIN --cap-add=MKNOD \
--device=/dev/loop-control:/dev/loop-control \
--device=/dev/loop0:/dev/loop0 \
--device=/dev/loop1:/dev/loop1 \
-e COLUMNS=200 -e LINES=400 \
-e SABAYON_MOLECULES_CHROOTS=/chroots \
-e SABAYON_MOLECULES_SOURCES=/sources \
-e SABAYON_MOLECULES_ISO=/iso \
sabayon/isobuilder-amd64
```
On example it is overrided default chroots and sources directory for use disk with more
space.
ISOs will be available on /sabayon/iso host directory.
| Env Variable | Default | Description |
| SABAYON_MOLECULES_GITURL | https://github.com/Sabayon/molecules.git | Git Repository of Sabayon Molecules configurations. |
| SABAYON_MOLECULES_GIT_OPTS | - | Permit to define additional git clone options, like use a specific branch. |
| SABAYON_MOLECULES_DIR | /sabayon | Molecule work directory |
| SABAYON_MOLECULES_CHROOTS | - | If present permit to mount in binding path to molecules chroots directory |
| SABAYON_MOLECULES_SOURCES | - | If present permit to mount in binding selected path to molecules sources directory. |
| SABAYON_MOLECULES_ISO | - | If present permit to mount in binding selected path to molecules iso directory |
| SABAYON_MOLECULES_ENVFILE | $(pwd)/confs/iso_build.env | Optional file to sources for override environment variables. |
| SABAYON_MOLECULES_SYSTEMD_MODE | 0 | Enable SystemD Mode (1) or not (0).
| SABAYON_MOLECULES_POSTSCRIPT | - | Define post script to execute. |
+262
View File
@@ -0,0 +1,262 @@
#!/bin/bash
# Author: Geaaru, geaaru@sabayonlinux.org
SABAYON_MOLECULES_GITURL=${SABAYON_MOLECULES_GITURL:-https://github.com/Sabayon/molecules.git}
SABAYON_MOLECULES_GIT_OPTS=${SABAYON_MOLECULES_GIT_OPTS:-}
SABAYON_MOLECULES_DIR=${SABAYON_MOLECULES_DIR:-/sabayon}
SABAYON_MOLECULES_CHROOTS=${SABAYON_MOLECULES_CHROOTS:-}
SABAYON_MOLECULES_SOURCES=${SABAYON_MOLECULES_SOURCES:-}
SABAYON_MOLECULES_ISO=${SABAYON_MOLECULES_ISO:-}
SABAYON_MOLECULES_ENVFILE=${SABAYON_MOLECULES_ENVFILE:-$(pwd)/confs/iso_build.env}
SABAYON_MOLECULES_SYSTEMD_MODE=${SABAYON_MOLECULES_SYSTEMD_MODE:-0}
SABAYON_MOLECULES_POSTSCRIPT=${SABAYON_MOLECULES_POSTSCRIPT:-}
sabayon_molecules_info () {
local args=$@
local info_args=""
if [ "${args}"x != ""x ] ; then
info_args="SABAYON_MOLECULES_RUN_ARGS = ${args}"
fi
echo "
SABAYON_MOLECULES_GITURL = ${SABAYON_MOLECULES_GITURL}
SABAYON_MOLECULES_GIT_OPTS = ${SABAYON_MOLECULES_GIT_OPTS}
SABAYON_MOLECULES_DIR = ${SABAYON_MOLECULES_DIR}
SABAYON_MOLECULES_ENVFILE = ${SABAYON_MOLECULES_ENVFILE}
SABAYON_MOLECULES_SYSTEMD_MODE = ${SABAYON_MOLECULES_SYSTEMD_MODE}
SABAYON_MOLECULES_ISO = ${SABAYON_MOLECULES_ISO}
SABAYON_MOLECULES_CHROOTS = ${SABAYON_MOLECULES_CHROOTS}
SABAYON_MOLECULES_SOURCES = ${SABAYON_MOLECULES_SOURCES}
${info_args}
"
return 0
}
PACKAGES_TO_ADD=(
"mail-mta/postfix"
"net-p2p/mktorrent-borg"
"sys-fs/dosfstools"
"dev-util/molecule"
"dev-vcs/git"
"app-misc/ca-certificates"
"app-emulation/docker"
"app-emulation/docker-companion"
"sys-process/tini"
# For isohybrid
"sys-boot/syslinux"
)
FILES_TO_REMOVE=(
"/etc/entropy/packages/license.accept"
)
sabayon_init_env () {
local mirror_name=${1:-sabayonlinux.org}
if [[ -z "${SABAYON_SKIP_MIRRORSORT}" || "${SABAYON_SKIP_MIRRORSORT}" == "0" ]] ; then
equo repo mirrorsort ${mirror_name}
fi
if [[ -z "${SABAYON_SKIP_SYNC}" || "${SABAYON_SKIP_SYNC}" == "0" ]] ; then
equo up || return 1
fi
if [[ -z "${SABAYON_SKIP_UPGRADE}" || "${SABAYON_SKIP_UPGRADE}" == "0" ]] ; then
ETP_NONINTERACTIVE=1 equo u || return 1
echo -5 | equo conf update || return 1
fi
return 0
}
sabayon_molecules_init () {
local mirror_name=${1:-sabayonlinux.org}
sabayon_molecules_info
mkdir -p /usr/portage/licenses || return 1
rsync -av "rsync://rsync.at.gentoo.org/gentoo-portage/licenses/" \
"/usr/portage/licenses/" && ls /usr/portage/licenses -1 | xargs -0 > /etc/entropy/packages/license.accept || return 1
if [[ -z "${SABAYON_SKIP_MIRRORSORT}" || "${SABAYON_SKIP_MIRRORSORT}" == "0" ]] ; then
equo repo mirrorsort ${mirror_name}
fi
if [[ -z "${SABAYON_SKIP_SYNC}" || "${SABAYON_SKIP_SYNC}" == "0" ]] ; then
equo up || return 1
fi
if [[ -z "${SABAYON_SKIP_UPGRADE}" || "${SABAYON_SKIP_UPGRADE}" == "0" ]] ; then
ETP_NONINTERACTIVE=1 equo u || return 1
echo -5 | equo conf update || return 1
fi
export ETP_NONINTERACTIVE=1
return 0
}
sabayon_molecules_phase1 () {
equo i "${PACKAGES_TO_ADD[@]}" || return 1
echo -5 | equo conf update || return 1
mkdir /etc/systemd/system/docker.service.d || return 1
echo "
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock -D
" >> /etc/systemd/system/docker.service.d/00gentoo.conf || return 1
# Disable systemd-journal-flush. Doesn't start correctly
systemctl disable systemd-journal-flush.service
ln -s /dev/null /etc/systemd/system/systemd-journal-flush.service
# Disable systemd-update-utmp. Doesn't start correctly
systemctl disable systemd-update-utmp.service
ln -s /dev/null /etc/systemd/system/systemd-update-utmp.service
systemctl enable docker || return 1
return 0
}
sabayon_molecules_clean () {
# Cleaning equo package cache
equo cleanup || return 1
# Cleanup
rm -rf "${FILES_TO_REMOVE[@]}" || return 1
return 0
}
sabayon_molecules_echo () {
local msg=$@
echo "
-------------------------------------------------------------------------------
$@
-------------------------------------------------------------------------------
"
return 0
}
sabayon_molecules_run () {
shift
local opts=$@
local systemctl=/usr/bin/systemctl
local journaltcl=/usr/bin/journalctl
# Load environment variables
if [ -e "${SABAYON_MOLECULES_ENVFILE}" ] ; then
echo "Sourcing file ${SABAYON_MOLECULES_ENVFILE}..."
source ${SABAYON_MOLECULES_ENVFILE}
fi
sabayon_molecules_info || return 1
if [ ${SABAYON_MOLECULES_SYSTEMD_MODE} -eq 1 ] ; then
sabayon_molecules_echo "Starting SYSTEMD"
exec /sbin/init --system --show-status=true &
sabayon_molecules_echo "Waiting for systemd starting...sleep 5"
sleep 5
sabayon_molecules_echo "FAILED SYSTEMD SERVICES"
$systemctl --failed || return 1
sabayon_molecules_echo "Systemd Services Status"
$systemctl status || return 1
sabayon_molecules_echo "JOURNALCTL BOOTSTRAP LOG"
$journaltcl -b --no-pager
fi
sabayon_molecules_echo \
"Clone repository ${SABAYON_MOLECULES_GITURL} to ${SABAYON_MOLECULES_DIR}"
git clone ${SABAYON_MOLECULES_GITURL} ${SABAYON_MOLECULES_GIT_OPTS} \
${SABAYON_MOLECULES_DIR} || return 1
# TODO: Fix this on molecules tree
mkdir ${SABAYON_MOLECULES_DIR}/iso
echo "Repository ${SABAYON_MOLECULES_GITURL} installed correctly."
if [ -n "${SABAYON_MOLECULES_CHROOTS}" ] ; then
echo "Mount ${SABAYON_MOLECULES_CHROOTS} to ${SABAYON_MOLECULES_DIR}/chroots..."
mount -o bind ${SABAYON_MOLECULES_CHROOTS} ${SABAYON_MOLECULES_DIR}/chroots || return 1
fi
if [ -n "${SABAYON_MOLECULES_SOURCES}" ] ; then
echo "Mount ${SABAYON_MOLECULES_SOURCES} to ${SABAYON_MOLECULES_DIR}/sources..."
mount -o bind ${SABAYON_MOLECULES_SOURCES} ${SABAYON_MOLECULES_DIR}/sources || return 1
fi
if [ -n "${SABAYON_MOLECULES_ISO}" ] ; then
echo "Mount ${SABAYON_MOLECULES_ISO} to ${SABAYON_MOLECULES_DIR}/iso..."
mount -o bind ${SABAYON_MOLECULES_ISO} ${SABAYON_MOLECULES_DIR}/iso || return 1
fi
# NOTE: loop is needed for mount image
# Example of docker run command:
# docker run --init --device /dev/fuse --cap-add=MKNOD --tmpfs /run --tmpfs /tmp \
# -v /sdpool/molecules-chroots:/chroots \
# -v /sdpool/molecules-sources:/sources \
# -v /sdpool/iso:/iso \
# -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
# --rm --name test --cap-add=SYS_PTRACE --cap-add=SYS_ADMIN \
# --cap-add=NET_ADMIN \
# --device=/dev/loop-control:/dev/loop-control
# --device=/dev/loop0:/dev/loop0
# --device=/dev/loop1:/dev/loop1
# -e COLUMNS=200 -e LINES=400
# -e SABAYON_MOLECULES_CHROOTS=/chroots
# -e SABAYON_MOLECULES_SOURCES=/sources
# -e SABAYON_MOLECULES_ISO=/iso
# sabayon/isobuilder-amd64
local date_end=""
local date_start=$(date +%s)
sabayon_molecules_echo "START iso_build.sh script."
${SABAYON_MOLECULES_DIR}/scripts/iso_build.sh $@ || return 1
date_end=$(date +%s)
sabayon_molecules_echo \
"END iso_build.sh script. Build process time: $((${date_end} - ${date_start})) secs."
if [ -e "${SABAYON_MOLECULES_POSTSCRIPT}" ] ; then
echo "Sourcing POST script file ${SABAYON_MOLECULES_POSTSCRIPT}..."
source ${SABAYON_MOLECULES_POSTSCRIPT}
fi
return 0
}
case $1 in
init)
sabayon_molecules_init
;;
phase1)
sabayon_molecules_phase1
;;
run)
sabayon_molecules_run $@
;;
clean)
sabayon_molecules_clean
;;
*)
echo "Use init|phase1|run|clean"
exit 1
esac
exit $?
# vim: ts=2 sw=2 expandtab