Add grumble and xbps-builder container
parent
e51702a32d
commit
a715aa4524
@ -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…
Reference in New Issue