Add grumble and xbps-builder container

master
eater 6 years ago
parent e51702a32d
commit a715aa4524
Signed by: eater
GPG Key ID: 656785D50BE51C0A

@ -0,0 +1,15 @@
FROM d.xr.to/xbps-builder AS builder
RUN git pull;
COPY files/template /_workdir/srcpkgs/grumble/template
RUN ./xbps-src pkg grumble
FROM d.xr.to/base AS main
LABEL maintainer="=@eater.me"
COPY --from=builder /_workdir/hostdir/binpkgs /tmp/xbps
RUN xbps-install -SyR /tmp/xbps grumble && xbps-remove -Oo && rm -rf /var/cache/xbps/* /tmp/xbps
RUN mkdir /grumble
COPY files/grumble.ini /grumble/grumble.ini
VOLUME /grumble
EXPOSE 64738/tcp
EXPOSE 64738/udp
EXPOSE 443/tcp
CMD grumble --datadir /grumble

@ -0,0 +1,63 @@
# Grumble configuration file.
#
# The commented out settings represent the defaults.
# Options here may be overridden by virtual server specific configuration.
# Make sure to enclose values containing # or ; in double quotes or backticks.
# Address to bind the listeners to.
#host = 0.0.0.0
# port is the port to bind the native Mumble protocol to.
# webport is the port to bind the WebSocket Mumble protocol to.
# They are incremented for each virtual server (if set globally).
#port = 64738
#webport = 443
# "Message of the day" HTML string sent to connecting clients.
welcometext = "Welcome to this server running <b>Grumble</b> on <b>Void</b>."
# Password to join the server.
#serverpassword =
# Maximum bandwidth (in bits per second) per client for voice.
# Grumble does not yet enforce this limit, but some clients nicely follow it.
bandwidth = 288000
# Maximum number of concurrent clients.
#users = 1000
#usersperchannel = 0
#textmessagelength = 5000
#imagemessagelength = 131072
#allowhtml
# The default channel is the channel (by ID) new users join.
# The root channel (ID = 0) is the default.
#defaultchannel = 0
# Whether users will rejoin the last channel they were in.
#rememberchannel
# Whether to include server OS info in ping response.
#sendversion
# Whether to respond to pings from the Connect dialog.
#allowping
# Path to the log file (relative to the data directory).
logfile = /dev/stdout
# Path to TLS certificate and key (relative to the data directory).
# The certificate needs to have the entire chain concatenated to be valid.
# If these paths do not exist, Grumble will autogenerate a certificate.
#sslCert = cert.pem
#sslKey = key.pem
# Options for public server registration.
# All of these have to be set to make the server public.
# registerName additionally sets the name of the root channel.
# registerPassword is a simple, arbitrary secret to guard your registration. Don't lose it.
#registerName =
#registerHostname =
#registerPassword =
#registerUrl =

@ -0,0 +1,14 @@
# Template file for 'grumble'
pkgname=grumble
version=1.0.0
revision=1
short_desc="nada"
build_style="go"
go_import_path=mumble.info/grumble
go_package="${go_import_path}/cmd/grumble"
license="BAD"
homepage="https://github.com/mumble-voip/grumble"
_branch="config"
distfiles="https://github.com/rubenseyer/grumble/archive/${_branch}.tar.gz"
wrksrc="${pkgname}-${_branch}"
checksum="18fa4170114adef1b40b18e421e924eeff51b0f1c0109d8c735c937e7b32a758"

@ -0,0 +1,5 @@
FROM d.xr.to/base
COPY files/fakedchroot.sh /_fakedchroot.sh
COPY files/setup-fakedchroot.sh /
RUN bash /setup-fakedchroot.sh && rm /setup-fakedchroot.sh
WORKDIR '/_workdir'

@ -0,0 +1,26 @@
# `d.xr.to/xbps-builder`
```bash
docker pull d.xr.to/xbps-builder
```
A simple pre-configured container to build void packages in, [void-linux/void-packages](https://github.com/void-linux/void-packages)
is checked out in `/_workdir` which is also the current workdir
Building an image inside a Dockerfile and installing it
it in a target docker container looks like the following
```Dockerfile
FROM d.xr.to/xbps-builder AS builder
RUN git pull
RUN ./xbps-src pkg docker
FROM d.xr.to/base
COPY --from=builder /_workdir/hostdir /tmp/xbps
RUN xbps-install -SyR /tmp/xbps docker \
&& xbps-remove -Oo \
&& rm -rf /var/cache/xbps/* /tmp/xbps
```
# Warning
This xbps-builder is bootstrapped with some very bad magic, so if you hit an issue, please create an issue!

@ -0,0 +1,80 @@
#!/bin/sh
#
# This chroot script uses bad design
#
fake_mount() {
#
# Fake mount works by removing the dir, and replacing it with a symlink
# This created the illusion of a bind.
#
local FROM="$1";
local TO="$2"
if [ -d "$TO" ]; then
rmdir "$TO";
fi
ln -s "$FROM" "$TO";
}
fake_umount() {
#
# Remove the symlink and recreate the dir
#
rm "$1";
mkdir "$1";
}
readonly MASTERDIR="$1"
readonly DISTDIR="$2"
readonly HOSTDIR="$3"
readonly EXTRA_ARGS="$4"
readonly CMD="$5"
shift 5
if [ -z "$MASTERDIR" -o -z "$DISTDIR" ]; then
echo "$0 MASTERDIR/DISTDIR not set"
exit 1
fi
fake_mount $DISTDIR $MASTERDIR/void-packages;
if [ ! -z "$HOSTDIR" ]; then
fake_mount $HOSTDIR $MASTERDIR/host;
fi
ITEMS="";
# xbps-src may send some other binds, parse them here
while getopts 'b:' c -- "$EXTRA_ARGS"; do
# Skip everything that's not a bind
[ "$c" = "b" ] || continue;
_FROM="$(cut -d: -f1 <<< "$OPTARG")";
_TO="$(cut -d: -f2 <<< "$OPTARG")";
fake_mount "${_FROM}" "${_TO}";
# Save created mounts so we can clean them up later
ITEMS+="${_TO} "
done
CURR_DIR="${PWD}";
# To give the illusion we entered the chroot, cd to /
cd /;
# Tell xbps-src that we are "in the chroot".
IN_CHROOT=1 $CMD $@;
# Save exit code for after clean up
X="$?";
# cd back to the old pwd, so everything is the same again
cd "$CURR_DIR";
if [ ! -z "$HOSTDIR" ]; then
fake_umount $MASTERDIR/host;
fi
fake_umount $MASTERDIR/void-packages;
# "umount" on demand created "mounts"
for i in $ITEMS; do
fake_umount "$i";
done
# Exit with the returned exit code
exit "$X";

@ -0,0 +1,37 @@
#!/usr/bin/env bash
set -e;
readonly WORKDIR="/_workdir"
# Install base utils required for downloading latest void packages and running xbps-src
xbps-install -Sy xtools base-devel chroot-git chroot-util-linux tar wget coreutils
# Clone void-packages into workdir, with depth 1, as template history is irrelevant
git clone --depth 1 'https://github.com/void-linux/void-packages.git' "${WORKDIR}";
cd "${WORKDIR}";
# Copy fakedchroot chroot style into chroot-style dir and make it executable
cp /_fakedchroot.sh "${WORKDIR}/common/chroot-style/fakedchroot.sh";
chmod a+x "${WORKDIR}/common/chroot-style/fakedchroot.sh";
# If masterdir exists: remove it, because we will replace it with a symlink
if [ -d "${WORKDIR}/masterdir" ]; then
rm "${WORKDIR}/masterdir";
fi
# Make $WORKDIR/masterdir point to /
ln -s / "${WORKDIR}/masterdir";
# Tell xbps-src to used our new chroot style: fakedchroot
echo XBPS_CHROOT_CMD=fakedchroot >> etc/conf;
# Tell xbps-src we init'd the chroot
touch "${WORKDIR}/masterdir/.xbps_chroot_init"
# Since base-chroot has some conflicts with a normal base, replace the check with true
sed -i 's:check_installed_pkg base-chroot-0.1_1:true:' common/xbps-src/shutils/common.sh
# Install the non-conflicting dependencies of base-chroot anyway
xbps-install -Sy $(xbps-query -Rx base-chroot | grep -v 'bash\|texinfo');
# Clean up cache
rm -rf /var/cache/xbps/*;
Loading…
Cancel
Save