Separate proot, qemu, groot into packages

This commit is contained in:
Filippo Squillace 2020-03-22 17:33:59 +01:00
parent d1285908ae
commit 6592bc9bd2
9 changed files with 173 additions and 43 deletions

View file

@ -39,8 +39,8 @@ usage() {
echo -e " -d, --delete Delete $NAME from ${JUNEST_HOME}"
echo
echo -e " n[s] Access via Linux Namespaces using BubbleWrap (Default action)"
echo -e " -b, --backend-args <args> Arguments for GRoot backend program"
echo -e " ($CMD groot -b \"--help\" to check out the bwrap options)"
echo -e " -b, --backend-args <args> Arguments for bwrap backend program"
echo -e " ($CMD ns -b \"--help\" to check out the bwrap options)"
echo -e " -n, --no-copy-files Do not copy common etc files into $NAME environment"
echo
echo -e " p[root] Access via PRoot"

View file

@ -69,7 +69,8 @@ $SUDO pacman $PACMAN_OPTIONS -S $(pacman -Sg base-devel | cut -d ' ' -f 2 | grep
info "Checking basic executables work..."
$SUDO pacman -Qi pacman 1> /dev/null
/opt/proot/proot-$ARCH --help 1> /dev/null
/usr/bin/proot --help 1> /dev/null
/usr/bin/groot --help 1> /dev/null
repo_package1=tree
echo "Checking ${repo_package1} package from official repo..."

View file

@ -23,8 +23,12 @@ function _install_pkg_from_aur(){
function _install_pkg(){
local maindir=$1
local pkgbuilddir=$2
builtin cd ${pkgbuilddir}
# Generate a working directory because sources will be downloaded to there
working_dir=$(TMPDIR=/tmp mktemp -d -t junest-wd.XXXXXXXXXX)
cp -R "$pkgbuilddir"/* "$working_dir"
builtin cd ${working_dir}
makepkg -sfcd
makepkg --printsrcinfo > ${pkgbuilddir}/.SRCINFO
sudo pacman --noconfirm --root ${maindir}/root -U *.pkg.tar.xz
}
@ -35,34 +39,6 @@ function _prepare() {
sudo pacman -S --noconfirm git arch-install-scripts
}
function _install_proot_and_qemu(){
local maindir="$1"
local main_repo=https://s3-eu-west-1.amazonaws.com/${CMD}-repo
proot_link=${main_repo}/proot
qemu_link=${main_repo}/qemu
info "Installing proot static binaries"
sudo bash -c "
mkdir -p '${maindir}/root/opt/proot/'
curl '$proot_link/proot-x86_64' > '${maindir}/root/opt/proot/proot-x86_64'
curl '$proot_link/proot-arm' > '${maindir}/root/opt/proot/proot-arm'
chmod -R 755 '${maindir}/root/opt/proot/'
"
info "Installing qemu static binaries"
sudo bash -c "
mkdir -p '${maindir}/root/opt/qemu/'
if [[ $ARCH == 'arm' ]]
then
curl '${qemu_link}/arm/qemu-arm-static-x86_64' > '${maindir}/root/opt/qemu/qemu-arm-static-x86_64'
elif [[ $ARCH == 'x86_64' ]]
then
curl '${qemu_link}/x86_64/qemu-x86_64-static-arm' > '${maindir}/root/opt/qemu/qemu-x86_64-static-arm'
fi
chmod -R 755 '${maindir}/root/opt/qemu/'
"
}
function build_image_env(){
umask 022
@ -84,7 +60,7 @@ function build_image_env(){
# bwrap command belongs to bubblewrap
sudo pacstrap -G -M -d ${maindir}/root pacman coreutils bubblewrap
if [[ $(uname -m) != *"arm"* ]]
if [[ ${ARCH} != "arm" ]]
then
# x86_64 does not have any mirror set by default...
sudo bash -c "echo 'Server = $DEFAULT_MIRROR' >> ${maindir}/root/etc/pacman.d/mirrorlist"
@ -92,13 +68,14 @@ function build_image_env(){
sudo mkdir -p ${maindir}/root/run/lock
_install_pkg ${maindir} "$JUNEST_BASE/pkgs/sudo-fake"
_install_pkg ${maindir} "$JUNEST_BASE/pkgs/proot-static"
_install_pkg ${maindir} "$JUNEST_BASE/pkgs/qemu-static"
_install_pkg ${maindir} "$JUNEST_BASE/pkgs/groot-git"
info "Installing yay..."
sudo pacman --noconfirm -S go
_install_pkg_from_aur ${maindir} "yay"
_install_proot_and_qemu "${maindir}"
echo "Generating the metadata info"
sudo install -d -m 755 "${maindir}/root/etc/${CMD}"
sudo bash -c "echo 'JUNEST_ARCH=$ARCH' > ${maindir}/root/etc/${CMD}/info"

View file

@ -21,7 +21,6 @@ NO_CONFIG_FOUND=108
UNPRIVILEGED_USERNS_DISABLED=109
JUNEST_HOME=${JUNEST_HOME:-~/.${CMD}}
JUNEST_BASE=${JUNEST_BASE:-${JUNEST_HOME}/opt/junest}
JUNEST_TEMPDIR=${JUNEST_TEMPDIR:-/tmp}
# The update of the variable PATH ensures that the executables are
@ -34,15 +33,17 @@ UNAME=uname
ARCH_LIST=('x86_64' 'x86' 'arm')
HOST_ARCH=$($UNAME -m)
if [ $HOST_ARCH == "i686" ] || [ $HOST_ARCH == "i386" ]
# To check all available architectures look here:
# https://wiki.archlinux.org/index.php/PKGBUILD#arch
if [[ $HOST_ARCH == "i686" ]] || [[ $HOST_ARCH == "i386" ]]
then
ARCH="x86"
LD_LIB="${JUNEST_HOME}/lib/ld-linux.so.2"
elif [ $HOST_ARCH == "x86_64" ]
elif [[ $HOST_ARCH == "x86_64" ]]
then
ARCH="x86_64"
LD_LIB="${JUNEST_HOME}/lib64/ld-linux-x86-64.so.2"
elif [[ $HOST_ARCH =~ .*(arm).* ]]
elif [[ $HOST_ARCH =~ .*(arm).* ]] || [[ $HOST_ARCH == "aarch64" ]]
then
ARCH="arm"
LD_LIB="${JUNEST_HOME}/lib/ld-linux-armhf.so.3"
@ -66,8 +67,8 @@ ORIGIN_WD=$(pwd)
SH=("/bin/sh" "--login")
# List of executables that are run in the host OS:
PROOT="${JUNEST_HOME}/opt/proot/proot-${ARCH}"
GROOT=${JUNEST_BASE}/bin/groot
PROOT="${JUNEST_HOME}/usr/bin/proot"
GROOT="${JUNEST_HOME}/usr/bin/groot"
CLASSIC_CHROOT=chroot
WGET="wget --no-check-certificate"
CURL="curl -L -J -O -k"

View file

@ -33,7 +33,7 @@ function _run_env_with_qemu(){
warn "Emulating $NAME via QEMU..."
[ -e ${qemu_symlink} ] || \
ln_cmd -s ${JUNEST_HOME}/opt/qemu/${qemu_bin} ${qemu_symlink}
ln_cmd -s ${JUNEST_HOME}/bin/${qemu_bin} ${qemu_symlink}
proot_args="-q ${qemu_symlink} $proot_args"
fi
shift

58
pkgs/groot-git/PKGBUILD Normal file
View file

@ -0,0 +1,58 @@
# Maintainer: Filippo Squillace <feel dot sqoox at gmail dot com>
# More details on how to change this file:
# https://wiki.archlinux.org/index.php/PKGBUILD
# https://wiki.archlinux.org/index.php/Creating_packages
# https://wiki.archlinux.org/index.php/Arch_User_Repository#Submitting_packages
pkgname=groot-git
pkgver=1.0.1
pkgrel=1
pkgdesc=""
arch=('any')
url="https://github.com/fsquillace/groot"
license=('GPL')
groups=()
depends=('coreutils')
makedepends=()
provides=('groot')
conflicts=()
replaces=()
backup=()
options=()
#install=
noextract=()
source=('groot::git+https://github.com/fsquillace/groot.git#branch=master')
md5sums=('SKIP')
pkgver() {
cd "$srcdir/${pkgname%-git}"
# The examples below are not absolute and need to be adapted to each repo. The
# primary goal is to generate version numbers that will increase according to
# pacman's version comparisons with later commits to the repo. The format
# VERSION='VER_NUM.rREV_NUM.HASH', or a relevant subset in case VER_NUM or HASH
# are not available, is recommended.
# Git, tags available
printf "%s" "$(git describe --tags | sed 's/\([^-]*-\)g/r\1/;s/-/./g')"
# Git, no tags available
# printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
build() {
:
}
package() {
cd "$srcdir/${pkgname%-git}"
install -d -m 755 "${pkgdir}/usr/bin"
install -m 755 "${srcdir}/${pkgname%-git}/bin/groot" ${pkgdir}/usr/bin/groot
}
# vim:set ts=2 sw=2 et:

View file

@ -0,0 +1,43 @@
# Maintainer: Filippo Squillace <feel dot sqoox at gmail dot com>
# More details on how to change this file:
# https://wiki.archlinux.org/index.php/PKGBUILD
# https://wiki.archlinux.org/index.php/Creating_packages
# https://wiki.archlinux.org/index.php/Arch_User_Repository#Submitting_packages
pkgname=proot-static
_pkgname=proot
pkgver=5.1.0
pkgrel=1
pkgdesc="chroot, mount --bind, and binfmt_misc without privilege/setup. Static binary only"
arch=('any')
url="https://proot-me.github.io/"
license=('GPL')
groups=()
depends=()
makedepends=()
provides=('proot')
conflicts=('proot' 'proot-bin')
backup=()
options=()
#install=
source=()
md5sums=()
noextract=()
MAIN_REPO=https://s3-eu-west-1.amazonaws.com/junest-repo
PROOT_LINK=${MAIN_REPO}/proot
source_x86_64=("${_pkgname}"::"$PROOT_LINK/proot-x86_64")
source_i686=("${_pkgname}"::"$PROOT_LINK/proot-x86")
source_arm=("${_pkgname}"::"$PROOT_LINK/proot-arm")
md5sums_x86_64=('14080705dd45a6bafa20e909a68072cb')
md5sums_i686=('b1c08236b56d121e04e9e29b197d0eeb')
md5sums_arm=('8218c5f00e77e2e6e04c372ced27c7e7')
package() {
echo "Installing proot static binaries"
install -d -m 755 "${pkgdir}/usr/bin/"
install -m 755 "${srcdir}/${_pkgname}" ${pkgdir}/usr/bin/proot
}
# vim:set ts=2 sw=2 et:

50
pkgs/qemu-static/PKGBUILD Normal file
View file

@ -0,0 +1,50 @@
# Maintainer: Filippo Squillace <feel dot sqoox at gmail dot com>
# More details on how to change this file:
# https://wiki.archlinux.org/index.php/PKGBUILD
# https://wiki.archlinux.org/index.php/Creating_packages
# https://wiki.archlinux.org/index.php/Arch_User_Repository#Submitting_packages
pkgname=qemu-static
pkgver=2.3.0
pkgrel=1
pkgdesc="Statically linked binaries of Qemu with user emulation. Useful for containers/chroot environment with binfmt."
arch=('any')
url="http://wiki.qemu.org"
license=('GPL2')
groups=()
depends=()
makedepends=()
provides=()
conflicts=()
backup=()
options=()
#install=
source=()
md5sums=()
noextract=()
MAIN_REPO=https://s3-eu-west-1.amazonaws.com/junest-repo
QEMU_LINK=$MAIN_REPO/qemu
source_x86_64=("${QEMU_LINK}/x86_64/qemu-x86_64-static-x86" "${QEMU_LINK}/x86_64/qemu-x86_64-static-arm")
source_i686=("${QEMU_LINK}/x86/qemu-x86-static-x86_64" "${QEMU_LINK}/x86/qemu-x86_64-static-arm")
md5sums_x86_64=('8a706d734f8c790743a8114dda4c344a' '3ced729c95d2514f35d4899e944a4582')
md5sums_x86=('c28d5049193dbce75efa0c8655d71427' 'f75fd15722fcc2914e3de0b0a46eb982')
source_arm=("${QEMU_LINK}/arm/qemu-arm-static-x86_64" "${QEMU_LINK}/arm/qemu-arm-static-x86")
md5sums_arm=('bd9de1927aae4eb26dc0e5615159a616' 'a7c2b6ca53fa166f0c06ec76cc5edd7d')
source_armv6h=("${QEMU_LINK}/arm/qemu-arm-static-x86_64" "${QEMU_LINK}/arm/qemu-arm-static-x86")
md5sums_armv6h=('bd9de1927aae4eb26dc0e5615159a616' 'a7c2b6ca53fa166f0c06ec76cc5edd7d')
source_armv7h=("${QEMU_LINK}/arm/qemu-arm-static-x86_64" "${QEMU_LINK}/arm/qemu-arm-static-x86")
md5sums_armv7h=('bd9de1927aae4eb26dc0e5615159a616' 'a7c2b6ca53fa166f0c06ec76cc5edd7d')
source_aarch64=("${QEMU_LINK}/arm/qemu-arm-static-x86_64" "${QEMU_LINK}/arm/qemu-arm-static-x86")
md5sums_aarch64=('bd9de1927aae4eb26dc0e5615159a616' 'a7c2b6ca53fa166f0c06ec76cc5edd7d')
package() {
echo "Installing qemu static binaries"
install -d -m 755 "${pkgdir}/usr/bin"
install -m 755 "${srcdir}"/qemu-* ${pkgdir}/usr/bin
}
# vim:set ts=2 sw=2 et:

View file

@ -153,7 +153,7 @@ function test_qemu() {
}
RANDOM=100 ARCH=x86_64 assertCommandSuccess _run_env_with_qemu ""
assertEquals "$(echo -e "-s $JUNEST_HOME/opt/qemu/qemu-arm-static-x86_64 /tmp/qemu-arm-static-x86_64-100\n-q /tmp/qemu-arm-static-x86_64-100")" "$(cat $STDOUTF)"
assertEquals "$(echo -e "-s $JUNEST_HOME/bin/qemu-arm-static-x86_64 /tmp/qemu-arm-static-x86_64-100\n-q /tmp/qemu-arm-static-x86_64-100")" "$(cat $STDOUTF)"
}
source $JUNEST_ROOT/tests/utils/shunit2