init
This commit is contained in:
commit
68a03488ea
40
builder-chroot.cfg.sh
Executable file
40
builder-chroot.cfg.sh
Executable file
|
@ -0,0 +1,40 @@
|
|||
# The config for building packages in chroots
|
||||
|
||||
cfg_git_repo="$HOME/git/pkgbuilds.git"
|
||||
|
||||
cfg_build_dir="/tmp/build"
|
||||
cfg_repos_dir="$HOME/public"
|
||||
cfg_chroot_dir="/tmp/chroot/build"
|
||||
|
||||
export GIT_DIR='.git'
|
||||
|
||||
cfg_repos=( 'spark' 'spark-extra' )
|
||||
|
||||
cfg_packages=(
|
||||
'spark:spark-rc'
|
||||
'spark:sinit-spark'
|
||||
'spark:smdev'
|
||||
'spark:watchman-sm'
|
||||
'spark:watchman-sm-services-git'
|
||||
'spark:xorg-noudev-conf'
|
||||
|
||||
'spark-extra:zpm'
|
||||
'spark-extra:package-query'
|
||||
|
||||
'spark-extra:eudev'
|
||||
|
||||
'spark-extra:libsystemd-standalone'
|
||||
'spark-extra:systemd-dummy'
|
||||
'spark-extra:uselessd'
|
||||
|
||||
'spark-extra:scron'
|
||||
'spark-extra:sdhcp'
|
||||
'spark-extra:chromium-pepper-flash'
|
||||
'spark-extra:vte3-select-text'
|
||||
'spark-extra:termite'
|
||||
'spark-extra:sinit-sysvcompat'
|
||||
'spark-extra:posh'
|
||||
'spark-extra:teamviewer8'
|
||||
)
|
||||
|
||||
# 'spark-extra:cjdns-git'
|
42
builder-chroot.sh
Executable file
42
builder-chroot.sh
Executable file
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/env bash
|
||||
# A simple script to build packages into multiple repos
|
||||
|
||||
err() { echo "$1" >&2; }
|
||||
|
||||
build_pkg() {
|
||||
local makepkg_output makepkg_exit_code makepkg_status
|
||||
|
||||
IFS=':' read repo package <<< "$1"
|
||||
|
||||
[[ -d "${cfg_build_dir}/${package}" ]] || {
|
||||
err "Package ${package} doesn't exist in ${cfg_build_dir}"
|
||||
return 1
|
||||
}
|
||||
|
||||
[[ -d "${cfg_repos_dir}/${repo}" ]] || {
|
||||
echo "Creating ${cfg_repos_dir}/${repo}"
|
||||
mkdir -p "${cfg_repos_dir}/${repo}" || {
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
echo -n "Building ${package}... "
|
||||
|
||||
cd "${cfg_build_dir}/${package}"
|
||||
sudo /usr/local/bin/makepkg-chroot.sh "${cfg_build_dir}/${package}.chroot" "${cfg_repos_dir}/${repo}"
|
||||
}
|
||||
|
||||
main() {
|
||||
source 'builder-chroot.cfg.sh'
|
||||
|
||||
for i in "${cfg_packages[@]}"; do
|
||||
build_pkg "$i"
|
||||
done
|
||||
|
||||
for i in "${cfg_repos[@]}"; do
|
||||
cd "${cfg_repos_dir}/${i}"
|
||||
repo-add -n "$i.db.tar.gz" *.pkg.tar.xz
|
||||
done
|
||||
}
|
||||
|
||||
main
|
62
makepkg-chroot.sh
Executable file
62
makepkg-chroot.sh
Executable file
|
@ -0,0 +1,62 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Config
|
||||
chroot_base='/var/chroot/root'
|
||||
|
||||
# Functions
|
||||
icat() {
|
||||
while read; do
|
||||
echo -e "$REPLY"
|
||||
done
|
||||
}
|
||||
|
||||
build_script() {
|
||||
icat <<- EOF
|
||||
#!/bin/sh
|
||||
|
||||
pacman -Sy &>pacman.log
|
||||
|
||||
cd '/build'; chown builder:wheel /build
|
||||
sudo -u builder PKGDEST='/pkg' makepkg -s --noconfirm -L &>makepkg.log
|
||||
|
||||
makepkg_exit="\$?"
|
||||
|
||||
case "\$makepkg_exit" in
|
||||
0) echo 'ok';;
|
||||
17) echo 'already built';;
|
||||
*) echo 'FAIL';;
|
||||
esac
|
||||
|
||||
exit "\$makepkg_exit"
|
||||
EOF
|
||||
}
|
||||
|
||||
main() {
|
||||
chroot_dir="$1"
|
||||
pkg_dest_dir="$2"
|
||||
workdir="$PWD"
|
||||
|
||||
[[ "${chroot_dir}" ]] || { usage; exit 1; }
|
||||
|
||||
/usr/local/bin/mount-chroot.sh -s "$chroot_base" -n 'chroot_build' "$chroot_dir"
|
||||
|
||||
mkdir -m777 "$chroot_dir/pkg" "$chroot_dir/build"
|
||||
|
||||
mount --bind "$workdir" "$chroot_dir/build"
|
||||
mount --bind "$pkg_dest_dir" "$chroot_dir/pkg"
|
||||
|
||||
build_script > "${chroot_dir}/build/build.sh"
|
||||
|
||||
#chmod 755 "${chroot_dir}/build/build.sh"
|
||||
chroot "${chroot_dir}" sh /build/build.sh
|
||||
|
||||
if /usr/local/bin/mount-chroot.sh -u "$chroot_dir"; then
|
||||
rm -r "${chroot_dir}"{,.work}
|
||||
else
|
||||
err "Cannot unmount $chroot_dir"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
77
mount-chroot.sh
Executable file
77
mount-chroot.sh
Executable file
|
@ -0,0 +1,77 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
err() { echo "$1" >&2; }
|
||||
|
||||
usage() {
|
||||
cat <<- EOF
|
||||
Usage: "${0##*/}" [options] <chroot>
|
||||
Options:
|
||||
-s chroot base dir
|
||||
-n mount name
|
||||
-u unmount chroot
|
||||
EOF
|
||||
}
|
||||
|
||||
chroot.mount() {
|
||||
for i in "$target_dir" "$chroot_base"; do
|
||||
[[ "$i" ]] || {
|
||||
usage
|
||||
return 1
|
||||
}
|
||||
done
|
||||
|
||||
[[ -d "$chroot_base" ]] || {
|
||||
err "Chroot base ($chroot_base) does not exist."
|
||||
return 1
|
||||
}
|
||||
|
||||
mount_name="${mount_name:-chroot}"
|
||||
|
||||
for i in "$target_dir" "${target_dir}.work"; do
|
||||
[[ -d "$i" ]] || {
|
||||
mkdir -p "$i" || {
|
||||
return 3
|
||||
}
|
||||
}
|
||||
done
|
||||
|
||||
mount -t overlayfs -o lowerdir="$chroot_base",upperdir="$target_dir",workdir="${target_dir}.work" "$mount_name" "$target_dir"
|
||||
mount -t proc "${mount_name}_proc" "${target_dir}/proc"
|
||||
mount --rbind /dev "${target_dir}/dev"
|
||||
mount --rbind /sys "${target_dir}/sys"
|
||||
}
|
||||
|
||||
chroot.umount() {
|
||||
umount --recursive "$target_dir"
|
||||
}
|
||||
|
||||
main() {
|
||||
while [[ "$1" ]]; do
|
||||
case "$1" in
|
||||
-s) chroot_base="$2"; shift;;
|
||||
-n) mount_name="$2"; shift;;
|
||||
-u) action='umount';;
|
||||
|
||||
--) shift; break;;
|
||||
-*)
|
||||
err "Unknown key: $1"
|
||||
usage
|
||||
return 1
|
||||
;;
|
||||
*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
target_dir="$1"
|
||||
action="${action:-mount}"
|
||||
mount_name="${mount_name:-chroot}"
|
||||
|
||||
case "$action" in
|
||||
mount) chroot.mount;;
|
||||
umount) chroot.umount;;
|
||||
esac
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
Loading…
Reference in New Issue
Block a user