forked from Spark/builder
new tools
Signed-off-by: fbt <fbt@fleshless.org>
This commit is contained in:
parent
8bfeda98ac
commit
e705636929
|
@ -1,54 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
# A simple script to build packages into multiple repos
|
|
||||||
|
|
||||||
err() { echo "$1" >&2; }
|
|
||||||
|
|
||||||
build_pkg() {
|
|
||||||
declare package repo
|
|
||||||
|
|
||||||
package="$1"
|
|
||||||
repo="$2"
|
|
||||||
|
|
||||||
echo -n "Building ${repo}/${package}... "
|
|
||||||
|
|
||||||
cd "/tmp/build-${package}"
|
|
||||||
sudo /usr/local/bin/makepkg-chroot.sh "${cfg_build_dir}/${package}.chroot" "${cfg_repos_dir}/${repo}"
|
|
||||||
}
|
|
||||||
|
|
||||||
main() {
|
|
||||||
source 'builder-chroot.cfg'
|
|
||||||
|
|
||||||
package="$1"
|
|
||||||
repo_name="$2"
|
|
||||||
|
|
||||||
# if [[ -f "/tmp/build-${package}/.spark.repo" ]]; then
|
|
||||||
# repo_name=$( <"/tmp/build-${package}/.spark.repo" )
|
|
||||||
# else
|
|
||||||
# err "Repo not specified, not building package."
|
|
||||||
# return 1
|
|
||||||
# fi
|
|
||||||
|
|
||||||
if [[ ! -d "${cfg_repos_dir}/${repo_name}" ]]; then
|
|
||||||
echo "Creating ${cfg_repos_dir}/${repo_name}"
|
|
||||||
mkdir -p "${cfg_repos_dir}/${repo_name}" || {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
|
|
||||||
build_pkg "$package" "$repo_name"
|
|
||||||
|
|
||||||
cd "${cfg_repos_dir}/${repo_name}"
|
|
||||||
|
|
||||||
printf 'Cleaning the %s repo...\n' "$repo_name"
|
|
||||||
"$HOME/scripts/repo-clean" > repo_clean.log
|
|
||||||
|
|
||||||
printf 'Signing packages...\n'
|
|
||||||
"$HOME/scripts/repo-sign" > repo_sign.log
|
|
||||||
|
|
||||||
printf 'Adding packages to the %s repo...\n' "$repo_name"
|
|
||||||
repo-add -n "${repo_name}.db.tar.gz" *.pkg.tar.xz &> update.log
|
|
||||||
|
|
||||||
printf 'Done\n'
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
|
@ -1,9 +0,0 @@
|
||||||
# The config for building packages in chroots
|
|
||||||
|
|
||||||
cfg_git_repo="$HOME/git/pkgbuilds.git"
|
|
||||||
|
|
||||||
cfg_build_dir="/tmp"
|
|
||||||
cfg_repos_dir="$HOME/public"
|
|
||||||
cfg_chroot_dir="/tmp/chroot"
|
|
||||||
|
|
||||||
export GIT_DIR='.git'
|
|
|
@ -1,9 +0,0 @@
|
||||||
# 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'
|
|
|
@ -1,48 +0,0 @@
|
||||||
#!/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
|
|
||||||
|
|
||||||
repo="$1"
|
|
||||||
package="$2"
|
|
||||||
|
|
||||||
[[ -d "${cfg_build_dir}/repos/${repo}/${package}" ]] || {
|
|
||||||
err "Package ${package} doesn't exist in ${cfg_build_dir}/repos/${repo}"
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
[[ -d "${cfg_repos_dir}/${repo}" ]] || {
|
|
||||||
echo "Creating ${cfg_repos_dir}/${repo}"
|
|
||||||
mkdir -p "${cfg_repos_dir}/${repo}" || {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
echo -n "Building ${repo}/${package}... "
|
|
||||||
|
|
||||||
cd "${cfg_build_dir}/repos/${repo}/${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_build_dir}/repos"/*; do
|
|
||||||
repo_name="${i##*/}"
|
|
||||||
repos+=( "$repo_name" )
|
|
||||||
|
|
||||||
for r in "$i"/*; do
|
|
||||||
build_pkg "$repo_name" "${r##*/}"
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
for i in "${repos[@]}"; do
|
|
||||||
cd "${cfg_repos_dir}/${i}"
|
|
||||||
repo-add -n "${i}.db.tar.gz" *.pkg.tar.xz
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
main
|
|
70
lxf
Executable file
70
lxf
Executable file
|
@ -0,0 +1,70 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
mkconf() {
|
||||||
|
for i in "${includes[@]}"; do
|
||||||
|
echo "lxc.include = $lxf_conf_dir/$i.conf"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "lxc.rootfs.path = $lxf_cont_dir/$cont_name/rootfs"
|
||||||
|
echo "lxc.uts.name = $cont_name"
|
||||||
|
}
|
||||||
|
|
||||||
|
mount_cont() {
|
||||||
|
ov-mount -n "$cont_name" "$rootfs" "$cont_dir/rootfs"
|
||||||
|
}
|
||||||
|
|
||||||
|
lxf_conf_dir='/etc/lxf/conf'
|
||||||
|
lxf_cont_dir='/var/lib/lxf/cont'
|
||||||
|
lxf_rootfs_dir='/var/lib/lxf/fs'
|
||||||
|
|
||||||
|
[[ -f '/etc/lxf.conf' ]] && source '/etc/lxf.conf'
|
||||||
|
|
||||||
|
while (( $# )); do
|
||||||
|
case $1 in
|
||||||
|
(-i) includes+=( "$2" ); shift;;
|
||||||
|
(-r) rootfs="$2"; shift;;
|
||||||
|
|
||||||
|
(--cont-dir) lxf_cont_dir=$2; shift;;
|
||||||
|
(--conf-dir) lxf_conf_dir=$2; shift;;
|
||||||
|
|
||||||
|
(--) shift; break;;
|
||||||
|
(-*) echo "Unknown key: $1" >&2: exit 1;;
|
||||||
|
(*) break;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
action=$1; shift; [[ $action ]] || exit 1
|
||||||
|
cont_name=$1; shift; [[ $cont_name ]] || exit 1
|
||||||
|
|
||||||
|
cont_dir="$lxf_cont_dir/$cont_name"
|
||||||
|
|
||||||
|
case $action in
|
||||||
|
(create|new)
|
||||||
|
[[ "$rootfs" ]] || exit 1
|
||||||
|
rootfs="$lxf_rootfs_dir/$rootfs"
|
||||||
|
|
||||||
|
[[ -d "$cont_dir" ]] && {
|
||||||
|
printf 'Container already exists: %s\n' "$cont_dir" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
mkdir -p "$cont_dir" || exit $?
|
||||||
|
|
||||||
|
mkconf > "$cont_dir/config"
|
||||||
|
mount_cont
|
||||||
|
;;
|
||||||
|
|
||||||
|
(mount)
|
||||||
|
mountpoint -q "$cont_dir/rootfs" && {
|
||||||
|
printf 'Container already mounted: %s\n' "$cont_dir/rootfs" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
mount_cont
|
||||||
|
;;
|
||||||
|
|
||||||
|
(umount) umount "$cont_dir/rootfs";;
|
||||||
|
esac
|
|
@ -1,62 +0,0 @@
|
||||||
#!/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';;
|
|
||||||
3) 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 "$@"
|
|
||||||
|
|
44
makepkg-overlay
Executable file
44
makepkg-overlay
Executable file
|
@ -0,0 +1,44 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
umount "$cnt_dir/rootfs"
|
||||||
|
}
|
||||||
|
|
||||||
|
wrk_dir='/home/lxc'
|
||||||
|
pkg_url=$1
|
||||||
|
pkg_dest=$2
|
||||||
|
|
||||||
|
cnt="_makepkg.$$"
|
||||||
|
cnt_dir="$wrk_dir/containers/$cnt"
|
||||||
|
|
||||||
|
trap 'cleanup' INT TERM EXIT
|
||||||
|
|
||||||
|
lxf -r builder -i builder new "$cnt"
|
||||||
|
|
||||||
|
# Add the build script
|
||||||
|
cp "$wrk_dir/files/buildpackage" "$cnt_dir/rootfs/init"
|
||||||
|
chmod 755 "$cnt_dir/rootfs/init"
|
||||||
|
|
||||||
|
# Tell it where to fetch the package
|
||||||
|
echo "$pkg_url" > "$cnt_dir/rootfs/repo"
|
||||||
|
|
||||||
|
# Start the container
|
||||||
|
lxc-start -n "$cnt" -F; lxc_exit=$?
|
||||||
|
(( lxc_exit )) && exit "$lxc_exit"
|
||||||
|
|
||||||
|
# Put the artifacts where asked to
|
||||||
|
[[ "$pkg_dest" ]] && {
|
||||||
|
artifacts=( "$cnt_dir/rootfs/buildroot/"*.pkg.* )
|
||||||
|
|
||||||
|
for i in "${artifacts[@]}"; do
|
||||||
|
i_name="${i##*/}"
|
||||||
|
|
||||||
|
printf 'Found artifact: %s\n' "$i_name"
|
||||||
|
|
||||||
|
if [[ -f "$pkg_dest/$i_name" ]]; then
|
||||||
|
echo "$pkg_dest/$i_name already exists, not overwriting."
|
||||||
|
else
|
||||||
|
cp -vn "$i" "$pkg_dest"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
|
@ -1,77 +0,0 @@
|
||||||
#!/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 overlay -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