mirror of
https://github.com/fsquillace/junest.git
synced 2026-07-20 17:59:38 +00:00
Get the arch-chroot script from the image directly
This commit is contained in:
parent
5d878b5547
commit
55417bc0c4
2 changed files with 2 additions and 200 deletions
198
bin/arch-chroot
198
bin/arch-chroot
|
|
@ -1,198 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
shopt -s extglob
|
||||
|
||||
# generated from util-linux source: libmount/src/utils.c
|
||||
declare -A pseudofs_types=([anon_inodefs]=1
|
||||
[autofs]=1
|
||||
[bdev]=1
|
||||
[binfmt_misc]=1
|
||||
[cgroup]=1
|
||||
[configfs]=1
|
||||
[cpuset]=1
|
||||
[debugfs]=1
|
||||
[devfs]=1
|
||||
[devpts]=1
|
||||
[devtmpfs]=1
|
||||
[dlmfs]=1
|
||||
[fuse.gvfs-fuse-daemon]=1
|
||||
[fusectl]=1
|
||||
[hugetlbfs]=1
|
||||
[mqueue]=1
|
||||
[nfsd]=1
|
||||
[none]=1
|
||||
[pipefs]=1
|
||||
[proc]=1
|
||||
[pstore]=1
|
||||
[ramfs]=1
|
||||
[rootfs]=1
|
||||
[rpc_pipefs]=1
|
||||
[securityfs]=1
|
||||
[sockfs]=1
|
||||
[spufs]=1
|
||||
[sysfs]=1
|
||||
[tmpfs]=1)
|
||||
|
||||
# generated from: pkgfile -vbr '/fsck\..+' | awk -F. '{ print $NF }' | sort
|
||||
declare -A fsck_types=([cramfs]=1
|
||||
[exfat]=1
|
||||
[ext2]=1
|
||||
[ext3]=1
|
||||
[ext4]=1
|
||||
[ext4dev]=1
|
||||
[jfs]=1
|
||||
[minix]=1
|
||||
[msdos]=1
|
||||
[reiserfs]=1
|
||||
[vfat]=1
|
||||
[xfs]=1)
|
||||
|
||||
out() { printf "$1 $2\n" "${@:3}"; }
|
||||
error() { out "==> ERROR:" "$@"; } >&2
|
||||
msg() { out "==>" "$@"; }
|
||||
msg2() { out " ->" "$@";}
|
||||
die() { error "$@"; exit 1; }
|
||||
|
||||
ignore_error() {
|
||||
"$@" 2>/dev/null
|
||||
return 0
|
||||
}
|
||||
|
||||
in_array() {
|
||||
local i
|
||||
for i in "${@:2}"; do
|
||||
[[ $1 = "$i" ]] && return
|
||||
done
|
||||
}
|
||||
|
||||
track_mount() {
|
||||
if [[ -z $CHROOT_ACTIVE_MOUNTS ]]; then
|
||||
CHROOT_ACTIVE_MOUNTS=()
|
||||
trap 'chroot_umount' EXIT
|
||||
fi
|
||||
|
||||
mount "$@" && CHROOT_ACTIVE_MOUNTS=("$2" "${CHROOT_ACTIVE_MOUNTS[@]}")
|
||||
}
|
||||
|
||||
mount_conditionally() {
|
||||
local cond=$1; shift
|
||||
if eval "$cond"; then
|
||||
track_mount "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
api_fs_mount() {
|
||||
mount_conditionally "! mountpoint -q '$1'" "$1" "$1" --bind &&
|
||||
track_mount proc "$1/proc" -t proc -o nosuid,noexec,nodev &&
|
||||
track_mount sys "$1/sys" -t sysfs -o nosuid,noexec,nodev,ro &&
|
||||
ignore_error mount_conditionally "[[ -d '$1/sys/firmware/efi/efivars' ]]" \
|
||||
efivarfs "$1/sys/firmware/efi/efivars" -t efivarfs -o nosuid,noexec,nodev &&
|
||||
track_mount udev "$1/dev" -t devtmpfs -o mode=0755,nosuid &&
|
||||
track_mount devpts "$1/dev/pts" -t devpts -o mode=0620,gid=5,nosuid,noexec &&
|
||||
track_mount shm "$1/dev/shm" -t tmpfs -o mode=1777,nosuid,nodev &&
|
||||
track_mount run "$1/run" -t tmpfs -o nosuid,nodev,mode=0755 &&
|
||||
track_mount tmp "$1/tmp" -t tmpfs -o mode=1777,strictatime,nodev,nosuid
|
||||
}
|
||||
|
||||
chroot_umount() {
|
||||
umount "${CHROOT_ACTIVE_MOUNTS[@]}"
|
||||
}
|
||||
|
||||
valid_number_of_base() {
|
||||
local base=$1 len=${#2} i=
|
||||
|
||||
for (( i = 0; i < len; i++ )); do
|
||||
{ _=$(( $base#${2:i:1} )) || return 1; } 2>/dev/null
|
||||
done
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
mangle() {
|
||||
local i= chr= out=
|
||||
|
||||
unset {a..f} {A..F}
|
||||
|
||||
for (( i = 0; i < ${#1}; i++ )); do
|
||||
chr=${1:i:1}
|
||||
case $chr in
|
||||
[[:space:]\\])
|
||||
printf -v chr '%03o' "'$chr"
|
||||
out+=\\
|
||||
;;
|
||||
esac
|
||||
out+=$chr
|
||||
done
|
||||
|
||||
printf '%s' "$out"
|
||||
}
|
||||
|
||||
unmangle() {
|
||||
local i= chr= out= len=$(( ${#1} - 4 ))
|
||||
|
||||
unset {a..f} {A..F}
|
||||
|
||||
for (( i = 0; i < len; i++ )); do
|
||||
chr=${1:i:1}
|
||||
case $chr in
|
||||
\\)
|
||||
if valid_number_of_base 8 "${1:i+1:3}" ||
|
||||
valid_number_of_base 16 "${1:i+1:3}"; then
|
||||
printf -v chr '%b' "${1:i:4}"
|
||||
(( i += 3 ))
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
out+=$chr
|
||||
done
|
||||
|
||||
printf '%s' "$out${1:i}"
|
||||
}
|
||||
|
||||
dm_name_for_devnode() {
|
||||
read dm_name <"/sys/class/block/${1#/dev/}/dm/name"
|
||||
if [[ $dm_name ]]; then
|
||||
printf '/dev/mapper/%s' "$dm_name"
|
||||
else
|
||||
# don't leave the caller hanging, just print the original name
|
||||
# along with the failure.
|
||||
print '%s' "$1"
|
||||
error 'Failed to resolve device mapper name for: %s' "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
fstype_is_pseudofs() {
|
||||
(( pseudofs_types["$1"] ))
|
||||
}
|
||||
|
||||
fstype_has_fsck() {
|
||||
(( fsck_types["$1"] ))
|
||||
}
|
||||
|
||||
|
||||
usage() {
|
||||
cat <<EOF
|
||||
usage: ${0##*/} chroot-dir [command]
|
||||
|
||||
-h Print this help message
|
||||
|
||||
If 'command' is unspecified, ${0##*/} will launch /bin/sh.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
if [[ -z $1 || $1 = @(-h|--help) ]]; then
|
||||
usage
|
||||
exit $(( $# ? 0 : 1 ))
|
||||
fi
|
||||
|
||||
(( EUID == 0 )) || die 'This script must be run with root privileges'
|
||||
chrootdir=$1
|
||||
shift
|
||||
|
||||
[[ -d $chrootdir ]] || die "Can't create chroot on non-directory %s" "$chrootdir"
|
||||
|
||||
api_fs_mount "$chrootdir" || die "failed to setup API filesystems in chroot %s" "$chrootdir"
|
||||
track_mount /etc/resolv.conf "$chrootdir/etc/resolv.conf" --bind
|
||||
|
||||
SHELL=/bin/sh chroot "$chrootdir" "$@"
|
||||
|
|
@ -96,7 +96,7 @@ function setup_from_file_juju(){
|
|||
|
||||
|
||||
function run_juju(){
|
||||
${JUJU_BIN}/arch-chroot $JUJU_HOME
|
||||
${JUJU_HOME}/usr/bin/arch-chroot $JUJU_HOME
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -119,7 +119,7 @@ function build_image_juju(){
|
|||
mkdir -p ${maindir}/root
|
||||
prepare_build_directory
|
||||
info "Installing pacman and its dependencies..."
|
||||
pacstrap -d ${maindir}/root pacman
|
||||
pacstrap -d ${maindir}/root pacman arch-install-scripts
|
||||
|
||||
info "Compiling and installing yaourt..."
|
||||
mkdir -p ${maindir}/yaourt/{package-query,yaourt}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue