forked from mirrored-repos/manjaro-tools
first merging
This commit is contained in:
parent
eaa787147e
commit
09d02fa9ac
17 changed files with 902 additions and 367 deletions
325
basestrap.in
325
basestrap.in
|
@ -11,172 +11,173 @@
|
||||||
shopt -s extglob
|
shopt -s extglob
|
||||||
|
|
||||||
# generated from util-linux source: libmount/src/utils.c
|
# generated from util-linux source: libmount/src/utils.c
|
||||||
declare -A pseudofs_types=([anon_inodefs]=1
|
# declare -A pseudofs_types=([anon_inodefs]=1
|
||||||
[autofs]=1
|
# [autofs]=1
|
||||||
[bdev]=1
|
# [bdev]=1
|
||||||
[binfmt_misc]=1
|
# [binfmt_misc]=1
|
||||||
[cgroup]=1
|
# [cgroup]=1
|
||||||
[configfs]=1
|
# [configfs]=1
|
||||||
[cpuset]=1
|
# [cpuset]=1
|
||||||
[debugfs]=1
|
# [debugfs]=1
|
||||||
[devfs]=1
|
# [devfs]=1
|
||||||
[devpts]=1
|
# [devpts]=1
|
||||||
[devtmpfs]=1
|
# [devtmpfs]=1
|
||||||
[dlmfs]=1
|
# [dlmfs]=1
|
||||||
[fuse.gvfs-fuse-daemon]=1
|
# [fuse.gvfs-fuse-daemon]=1
|
||||||
[fusectl]=1
|
# [fusectl]=1
|
||||||
[hugetlbfs]=1
|
# [hugetlbfs]=1
|
||||||
[mqueue]=1
|
# [mqueue]=1
|
||||||
[nfsd]=1
|
# [nfsd]=1
|
||||||
[none]=1
|
# [none]=1
|
||||||
[pipefs]=1
|
# [pipefs]=1
|
||||||
[proc]=1
|
# [proc]=1
|
||||||
[pstore]=1
|
# [pstore]=1
|
||||||
[ramfs]=1
|
# [ramfs]=1
|
||||||
[rootfs]=1
|
# [rootfs]=1
|
||||||
[rpc_pipefs]=1
|
# [rpc_pipefs]=1
|
||||||
[securityfs]=1
|
# [securityfs]=1
|
||||||
[sockfs]=1
|
# [sockfs]=1
|
||||||
[spufs]=1
|
# [spufs]=1
|
||||||
[sysfs]=1
|
# [sysfs]=1
|
||||||
[tmpfs]=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
|
||||||
|
# }
|
||||||
|
|
||||||
# generated from: pkgfile -vbr '/fsck\..+' | awk -F. '{ print $NF }' | sort
|
# track_mount() {
|
||||||
declare -A fsck_types=([cramfs]=1
|
# if [[ -z $CHROOT_ACTIVE_MOUNTS ]]; then
|
||||||
[exfat]=1
|
# CHROOT_ACTIVE_MOUNTS=()
|
||||||
[ext2]=1
|
# trap 'chroot_umount' EXIT
|
||||||
[ext3]=1
|
# fi
|
||||||
[ext4]=1
|
#
|
||||||
[ext4dev]=1
|
# mount "$@" && CHROOT_ACTIVE_MOUNTS=("$2" "${CHROOT_ACTIVE_MOUNTS[@]}")
|
||||||
[jfs]=1
|
# }
|
||||||
[minix]=1
|
#
|
||||||
[msdos]=1
|
# mount_conditionally() {
|
||||||
[reiserfs]=1
|
# local cond=$1; shift
|
||||||
[vfat]=1
|
# if eval "$cond"; then
|
||||||
[xfs]=1)
|
# 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[@]}"
|
||||||
|
# }
|
||||||
|
|
||||||
out() { printf "$1 $2\n" "${@:3}"; }
|
# valid_number_of_base() {
|
||||||
error() { out "==> ERROR:" "$@"; } >&2
|
# local base=$1 len=${#2} i=
|
||||||
msg() { out "==>" "$@"; }
|
#
|
||||||
msg2() { out " ->" "$@";}
|
# for (( i = 0; i < len; i++ )); do
|
||||||
die() { error "$@"; exit 1; }
|
# { _=$(( $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
|
||||||
|
# }
|
||||||
|
|
||||||
ignore_error() {
|
# fstype_is_pseudofs() {
|
||||||
"$@" 2>/dev/null
|
# (( pseudofs_types["$1"] ))
|
||||||
return 0
|
# }
|
||||||
}
|
#
|
||||||
|
# fstype_has_fsck() {
|
||||||
in_array() {
|
# (( fsck_types["$1"] ))
|
||||||
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"] ))
|
|
||||||
}
|
|
||||||
|
|
||||||
|
source @libdir@/functions.sh
|
||||||
|
|
||||||
newroot=/mnt
|
newroot=/mnt
|
||||||
hostcache=0
|
hostcache=0
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
m4_include(lib/common.sh)
|
# m4_include(lib/common.sh)
|
||||||
|
|
||||||
|
source @libdir@/shared_lib.sh
|
||||||
|
|
||||||
get_profiles(){
|
get_profiles(){
|
||||||
local prof= temp=
|
local prof= temp=
|
||||||
for p in $(ls ${profiledir}/*.set);do
|
for p in $(ls ${profiledir}/*.set);do
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
m4_include(lib/common.sh)
|
#m4_include(lib/common.sh)
|
||||||
|
|
||||||
|
source @libdir@/shared_lib.sh
|
||||||
|
|
||||||
# Source makepkg.conf; fail if it is not found
|
# Source makepkg.conf; fail if it is not found
|
||||||
if [[ -r '/etc/makepkg.conf' ]]; then
|
if [[ -r '/etc/makepkg.conf' ]]; then
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
m4_include(lib/common.sh)
|
#m4_include(lib/common.sh)
|
||||||
|
|
||||||
|
source @libdir@/shared_lib.sh
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
shopt -s extglob
|
shopt -s extglob
|
||||||
|
|
|
@ -3,7 +3,9 @@
|
||||||
# finddeps - find packages that depend on a given depname
|
# finddeps - find packages that depend on a given depname
|
||||||
#
|
#
|
||||||
|
|
||||||
m4_include(lib/common.sh)
|
# m4_include(lib/common.sh)
|
||||||
|
|
||||||
|
source @libdir@/shared_lib.sh
|
||||||
|
|
||||||
match=$1
|
match=$1
|
||||||
|
|
||||||
|
|
332
fstabgen.in
332
fstabgen.in
|
@ -3,172 +3,174 @@
|
||||||
shopt -s extglob
|
shopt -s extglob
|
||||||
|
|
||||||
# generated from util-linux source: libmount/src/utils.c
|
# generated from util-linux source: libmount/src/utils.c
|
||||||
declare -A pseudofs_types=([anon_inodefs]=1
|
# declare -A pseudofs_types=([anon_inodefs]=1
|
||||||
[autofs]=1
|
# [autofs]=1
|
||||||
[bdev]=1
|
# [bdev]=1
|
||||||
[binfmt_misc]=1
|
# [binfmt_misc]=1
|
||||||
[cgroup]=1
|
# [cgroup]=1
|
||||||
[configfs]=1
|
# [configfs]=1
|
||||||
[cpuset]=1
|
# [cpuset]=1
|
||||||
[debugfs]=1
|
# [debugfs]=1
|
||||||
[devfs]=1
|
# [devfs]=1
|
||||||
[devpts]=1
|
# [devpts]=1
|
||||||
[devtmpfs]=1
|
# [devtmpfs]=1
|
||||||
[dlmfs]=1
|
# [dlmfs]=1
|
||||||
[fuse.gvfs-fuse-daemon]=1
|
# [fuse.gvfs-fuse-daemon]=1
|
||||||
[fusectl]=1
|
# [fusectl]=1
|
||||||
[hugetlbfs]=1
|
# [hugetlbfs]=1
|
||||||
[mqueue]=1
|
# [mqueue]=1
|
||||||
[nfsd]=1
|
# [nfsd]=1
|
||||||
[none]=1
|
# [none]=1
|
||||||
[pipefs]=1
|
# [pipefs]=1
|
||||||
[proc]=1
|
# [proc]=1
|
||||||
[pstore]=1
|
# [pstore]=1
|
||||||
[ramfs]=1
|
# [ramfs]=1
|
||||||
[rootfs]=1
|
# [rootfs]=1
|
||||||
[rpc_pipefs]=1
|
# [rpc_pipefs]=1
|
||||||
[securityfs]=1
|
# [securityfs]=1
|
||||||
[sockfs]=1
|
# [sockfs]=1
|
||||||
[spufs]=1
|
# [spufs]=1
|
||||||
[sysfs]=1
|
# [sysfs]=1
|
||||||
[tmpfs]=1)
|
# [tmpfs]=1)
|
||||||
|
#
|
||||||
# generated from: pkgfile -vbr '/fsck\..+' | awk -F. '{ print $NF }' | sort
|
# # generated from: pkgfile -vbr '/fsck\..+' | awk -F. '{ print $NF }' | sort
|
||||||
declare -A fsck_types=([cramfs]=1
|
# declare -A fsck_types=([cramfs]=1
|
||||||
[exfat]=1
|
# [exfat]=1
|
||||||
[ext2]=1
|
# [ext2]=1
|
||||||
[ext3]=1
|
# [ext3]=1
|
||||||
[ext4]=1
|
# [ext4]=1
|
||||||
[ext4dev]=1
|
# [ext4dev]=1
|
||||||
[jfs]=1
|
# [jfs]=1
|
||||||
[minix]=1
|
# [minix]=1
|
||||||
[msdos]=1
|
# [msdos]=1
|
||||||
[reiserfs]=1
|
# [reiserfs]=1
|
||||||
[vfat]=1
|
# [vfat]=1
|
||||||
[xfs]=1)
|
# [xfs]=1)
|
||||||
|
#
|
||||||
out() { printf "$1 $2\n" "${@:3}"; }
|
# out() { printf "$1 $2\n" "${@:3}"; }
|
||||||
error() { out "==> ERROR:" "$@"; } >&2
|
# error() { out "==> ERROR:" "$@"; } >&2
|
||||||
msg() { out "==>" "$@"; }
|
# msg() { out "==>" "$@"; }
|
||||||
msg2() { out " ->" "$@";}
|
# msg2() { out " ->" "$@";}
|
||||||
die() { error "$@"; exit 1; }
|
# die() { error "$@"; exit 1; }
|
||||||
|
#
|
||||||
ignore_error() {
|
# ignore_error() {
|
||||||
"$@" 2>/dev/null
|
# "$@" 2>/dev/null
|
||||||
return 0
|
# return 0
|
||||||
}
|
# }
|
||||||
|
#
|
||||||
in_array() {
|
# in_array() {
|
||||||
local i
|
# local i
|
||||||
for i in "${@:2}"; do
|
# for i in "${@:2}"; do
|
||||||
[[ $1 = "$i" ]] && return
|
# [[ $1 = "$i" ]] && return
|
||||||
done
|
# done
|
||||||
}
|
# }
|
||||||
|
#
|
||||||
track_mount() {
|
# track_mount() {
|
||||||
if [[ -z $CHROOT_ACTIVE_MOUNTS ]]; then
|
# if [[ -z $CHROOT_ACTIVE_MOUNTS ]]; then
|
||||||
CHROOT_ACTIVE_MOUNTS=()
|
# CHROOT_ACTIVE_MOUNTS=()
|
||||||
trap 'chroot_umount' EXIT
|
# trap 'chroot_umount' EXIT
|
||||||
fi
|
# fi
|
||||||
|
#
|
||||||
mount "$@" && CHROOT_ACTIVE_MOUNTS=("$2" "${CHROOT_ACTIVE_MOUNTS[@]}")
|
# mount "$@" && CHROOT_ACTIVE_MOUNTS=("$2" "${CHROOT_ACTIVE_MOUNTS[@]}")
|
||||||
}
|
# }
|
||||||
|
#
|
||||||
mount_conditionally() {
|
# mount_conditionally() {
|
||||||
local cond=$1; shift
|
# local cond=$1; shift
|
||||||
if eval "$cond"; then
|
# if eval "$cond"; then
|
||||||
track_mount "$@"
|
# track_mount "$@"
|
||||||
fi
|
# fi
|
||||||
}
|
# }
|
||||||
|
#
|
||||||
api_fs_mount() {
|
# api_fs_mount() {
|
||||||
mount_conditionally "! mountpoint -q '$1'" "$1" "$1" --bind &&
|
# mount_conditionally "! mountpoint -q '$1'" "$1" "$1" --bind &&
|
||||||
track_mount proc "$1/proc" -t proc -o nosuid,noexec,nodev &&
|
# track_mount proc "$1/proc" -t proc -o nosuid,noexec,nodev &&
|
||||||
track_mount sys "$1/sys" -t sysfs -o nosuid,noexec,nodev,ro &&
|
# track_mount sys "$1/sys" -t sysfs -o nosuid,noexec,nodev,ro &&
|
||||||
ignore_error mount_conditionally "[[ -d '$1/sys/firmware/efi/efivars' ]]" \
|
# ignore_error mount_conditionally "[[ -d '$1/sys/firmware/efi/efivars' ]]" \
|
||||||
efivarfs "$1/sys/firmware/efi/efivars" -t efivarfs -o nosuid,noexec,nodev &&
|
# 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 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 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 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 run "$1/run" -t tmpfs -o nosuid,nodev,mode=0755 &&
|
||||||
track_mount tmp "$1/tmp" -t tmpfs -o mode=1777,strictatime,nodev,nosuid
|
# track_mount tmp "$1/tmp" -t tmpfs -o mode=1777,strictatime,nodev,nosuid
|
||||||
}
|
# }
|
||||||
|
#
|
||||||
chroot_umount() {
|
# chroot_umount() {
|
||||||
umount "${CHROOT_ACTIVE_MOUNTS[@]}"
|
# umount "${CHROOT_ACTIVE_MOUNTS[@]}"
|
||||||
}
|
# }
|
||||||
|
#
|
||||||
valid_number_of_base() {
|
# valid_number_of_base() {
|
||||||
local base=$1 len=${#2} i=
|
# local base=$1 len=${#2} i=
|
||||||
|
#
|
||||||
for (( i = 0; i < len; i++ )); do
|
# for (( i = 0; i < len; i++ )); do
|
||||||
{ _=$(( $base#${2:i:1} )) || return 1; } 2>/dev/null
|
# { _=$(( $base#${2:i:1} )) || return 1; } 2>/dev/null
|
||||||
done
|
# done
|
||||||
|
#
|
||||||
return 0
|
# return 0
|
||||||
}
|
# }
|
||||||
|
#
|
||||||
mangle() {
|
# mangle() {
|
||||||
local i= chr= out=
|
# local i= chr= out=
|
||||||
|
#
|
||||||
unset {a..f} {A..F}
|
# unset {a..f} {A..F}
|
||||||
|
#
|
||||||
for (( i = 0; i < ${#1}; i++ )); do
|
# for (( i = 0; i < ${#1}; i++ )); do
|
||||||
chr=${1:i:1}
|
# chr=${1:i:1}
|
||||||
case $chr in
|
# case $chr in
|
||||||
[[:space:]\\])
|
# [[:space:]\\])
|
||||||
printf -v chr '%03o' "'$chr"
|
# printf -v chr '%03o' "'$chr"
|
||||||
out+=\\
|
# out+=\\
|
||||||
;;
|
# ;;
|
||||||
esac
|
# esac
|
||||||
out+=$chr
|
# out+=$chr
|
||||||
done
|
# done
|
||||||
|
#
|
||||||
printf '%s' "$out"
|
# printf '%s' "$out"
|
||||||
}
|
# }
|
||||||
|
#
|
||||||
unmangle() {
|
# unmangle() {
|
||||||
local i= chr= out= len=$(( ${#1} - 4 ))
|
# local i= chr= out= len=$(( ${#1} - 4 ))
|
||||||
|
#
|
||||||
unset {a..f} {A..F}
|
# unset {a..f} {A..F}
|
||||||
|
#
|
||||||
for (( i = 0; i < len; i++ )); do
|
# for (( i = 0; i < len; i++ )); do
|
||||||
chr=${1:i:1}
|
# chr=${1:i:1}
|
||||||
case $chr in
|
# case $chr in
|
||||||
\\)
|
# \\)
|
||||||
if valid_number_of_base 8 "${1:i+1:3}" ||
|
# if valid_number_of_base 8 "${1:i+1:3}" ||
|
||||||
valid_number_of_base 16 "${1:i+1:3}"; then
|
# valid_number_of_base 16 "${1:i+1:3}"; then
|
||||||
printf -v chr '%b' "${1:i:4}"
|
# printf -v chr '%b' "${1:i:4}"
|
||||||
(( i += 3 ))
|
# (( i += 3 ))
|
||||||
fi
|
# fi
|
||||||
;;
|
# ;;
|
||||||
esac
|
# esac
|
||||||
out+=$chr
|
# out+=$chr
|
||||||
done
|
# done
|
||||||
|
#
|
||||||
printf '%s' "$out${1:i}"
|
# printf '%s' "$out${1:i}"
|
||||||
}
|
# }
|
||||||
|
#
|
||||||
dm_name_for_devnode() {
|
# dm_name_for_devnode() {
|
||||||
read dm_name <"/sys/class/block/${1#/dev/}/dm/name"
|
# read dm_name <"/sys/class/block/${1#/dev/}/dm/name"
|
||||||
if [[ $dm_name ]]; then
|
# if [[ $dm_name ]]; then
|
||||||
printf '/dev/mapper/%s' "$dm_name"
|
# printf '/dev/mapper/%s' "$dm_name"
|
||||||
else
|
# else
|
||||||
# don't leave the caller hanging, just print the original name
|
# # don't leave the caller hanging, just print the original name
|
||||||
# along with the failure.
|
# # along with the failure.
|
||||||
print '%s' "$1"
|
# print '%s' "$1"
|
||||||
error 'Failed to resolve device mapper name for: %s' "$1"
|
# error 'Failed to resolve device mapper name for: %s' "$1"
|
||||||
fi
|
# fi
|
||||||
}
|
# }
|
||||||
|
#
|
||||||
fstype_is_pseudofs() {
|
# fstype_is_pseudofs() {
|
||||||
(( pseudofs_types["$1"] ))
|
# (( pseudofs_types["$1"] ))
|
||||||
}
|
# }
|
||||||
|
#
|
||||||
fstype_has_fsck() {
|
# fstype_has_fsck() {
|
||||||
(( fsck_types["$1"] ))
|
# (( fsck_types["$1"] ))
|
||||||
}
|
# }
|
||||||
|
#
|
||||||
|
|
||||||
|
source @libdir@/functions.sh
|
||||||
|
|
||||||
write_source() {
|
write_source() {
|
||||||
local src=$1 spec= label= uuid= comment=()
|
local src=$1 spec= label= uuid= comment=()
|
||||||
|
|
4
lddd.in
4
lddd.in
|
@ -3,7 +3,9 @@
|
||||||
# lddd - find broken library links on your machine
|
# lddd - find broken library links on your machine
|
||||||
#
|
#
|
||||||
|
|
||||||
m4_include(lib/common.sh)
|
# m4_include(lib/common.sh)
|
||||||
|
|
||||||
|
source @libdir@/shared_lib.sh
|
||||||
|
|
||||||
ifs=$IFS
|
ifs=$IFS
|
||||||
IFS="${IFS}:"
|
IFS="${IFS}:"
|
||||||
|
|
317
lib/functions.sh
Normal file
317
lib/functions.sh
Normal file
|
@ -0,0 +1,317 @@
|
||||||
|
#!/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; }
|
||||||
|
|
||||||
|
# Avoid any encoding problems
|
||||||
|
export LANG=C
|
||||||
|
|
||||||
|
# check if messages are to be printed using color
|
||||||
|
unset ALL_OFF BOLD BLUE GREEN RED YELLOW
|
||||||
|
if [[ -t 2 ]]; then
|
||||||
|
# prefer terminal safe colored and bold text when tput is supported
|
||||||
|
if tput setaf 0 &>/dev/null; then
|
||||||
|
ALL_OFF="$(tput sgr0)"
|
||||||
|
BOLD="$(tput bold)"
|
||||||
|
BLUE="${BOLD}$(tput setaf 4)"
|
||||||
|
GREEN="${BOLD}$(tput setaf 2)"
|
||||||
|
RED="${BOLD}$(tput setaf 1)"
|
||||||
|
YELLOW="${BOLD}$(tput setaf 3)"
|
||||||
|
else
|
||||||
|
ALL_OFF="\e[1;0m"
|
||||||
|
BOLD="\e[1;1m"
|
||||||
|
BLUE="${BOLD}\e[1;34m"
|
||||||
|
GREEN="${BOLD}\e[1;32m"
|
||||||
|
RED="${BOLD}\e[1;31m"
|
||||||
|
YELLOW="${BOLD}\e[1;33m"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
readonly ALL_OFF BOLD BLUE GREEN RED YELLOW
|
||||||
|
|
||||||
|
plain() {
|
||||||
|
local mesg=$1; shift
|
||||||
|
printf "${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
msg() {
|
||||||
|
local mesg=$1; shift
|
||||||
|
printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
msg2() {
|
||||||
|
local mesg=$1; shift
|
||||||
|
printf "${BLUE} ->${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
warning() {
|
||||||
|
local mesg=$1; shift
|
||||||
|
printf "${YELLOW}==> WARNING:${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
error() {
|
||||||
|
local mesg=$1; shift
|
||||||
|
printf "${RED}==> ERROR:${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
stat_busy() {
|
||||||
|
local mesg=$1; shift
|
||||||
|
printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}...${ALL_OFF}" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
stat_done() {
|
||||||
|
printf "${BOLD}done${ALL_OFF}\n" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_workdir() {
|
||||||
|
[[ -z $WORKDIR ]] && WORKDIR=$(mktemp -d --tmpdir "${0##*/}.XXXXXXXXXX")
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
[[ -n $WORKDIR ]] && rm -rf "$WORKDIR"
|
||||||
|
[[ $1 ]] && exit $1
|
||||||
|
}
|
||||||
|
|
||||||
|
abort() {
|
||||||
|
msg 'Aborting...'
|
||||||
|
cleanup 0
|
||||||
|
}
|
||||||
|
|
||||||
|
trap_abort() {
|
||||||
|
trap - EXIT INT QUIT TERM HUP
|
||||||
|
abort
|
||||||
|
}
|
||||||
|
|
||||||
|
trap_exit() {
|
||||||
|
trap - EXIT INT QUIT TERM HUP
|
||||||
|
cleanup
|
||||||
|
}
|
||||||
|
|
||||||
|
die() {
|
||||||
|
error "$*"
|
||||||
|
cleanup 1
|
||||||
|
}
|
||||||
|
|
||||||
|
trap 'trap_abort' INT QUIT TERM HUP
|
||||||
|
trap 'trap_exit' EXIT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ignore_error() {
|
||||||
|
"$@" 2>/dev/null
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
api_fs_mount2() {
|
||||||
|
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 &&
|
||||||
|
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
|
||||||
|
track_mount /etc/resolv.conf "$1/etc/resolv.conf" --bind
|
||||||
|
track_mount ${cache_dirs[0]} "$1/${cache_dirs[0]}" --bind
|
||||||
|
}
|
||||||
|
|
||||||
|
chroot_umount() {
|
||||||
|
umount "${CHROOT_ACTIVE_MOUNTS[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
fstype_is_pseudofs() {
|
||||||
|
(( pseudofs_types["$1"] ))
|
||||||
|
}
|
||||||
|
|
||||||
|
fstype_has_fsck() {
|
||||||
|
(( fsck_types["$1"] ))
|
||||||
|
}
|
||||||
|
|
||||||
|
# in_array() {
|
||||||
|
# local i
|
||||||
|
# for i in "${@:2}"; do
|
||||||
|
# [[ $1 = "$i" ]] && return
|
||||||
|
# done
|
||||||
|
# }
|
||||||
|
##
|
||||||
|
# usage : in_array( $needle, $haystack )
|
||||||
|
# return : 0 - found
|
||||||
|
# 1 - not found
|
||||||
|
##
|
||||||
|
in_array() {
|
||||||
|
local needle=$1; shift
|
||||||
|
local item
|
||||||
|
for item in "$@"; do
|
||||||
|
[[ $item = $needle ]] && return 0 # Found
|
||||||
|
done
|
||||||
|
return 1 # Not Found
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# usage : get_full_version( [$pkgname] )
|
||||||
|
# return : full version spec, including epoch (if necessary), pkgver, pkgrel
|
||||||
|
##
|
||||||
|
get_full_version() {
|
||||||
|
# set defaults if they weren't specified in buildfile
|
||||||
|
pkgbase=${pkgbase:-${pkgname[0]}}
|
||||||
|
epoch=${epoch:-0}
|
||||||
|
if [[ -z $1 ]]; then
|
||||||
|
if [[ $epoch ]] && (( ! $epoch )); then
|
||||||
|
echo $pkgver-$pkgrel
|
||||||
|
else
|
||||||
|
echo $epoch:$pkgver-$pkgrel
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
for i in pkgver pkgrel epoch; do
|
||||||
|
local indirect="${i}_override"
|
||||||
|
eval $(declare -f package_$1 | sed -n "s/\(^[[:space:]]*$i=\)/${i}_override=/p")
|
||||||
|
[[ -z ${!indirect} ]] && eval ${indirect}=\"${!i}\"
|
||||||
|
done
|
||||||
|
if (( ! $epoch_override )); then
|
||||||
|
echo $pkgver_override-$pkgrel_override
|
||||||
|
else
|
||||||
|
echo $epoch_override:$pkgver_override-$pkgrel_override
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
200
manjaro-chroot.in
Executable file
200
manjaro-chroot.in
Executable file
|
@ -0,0 +1,200 @@
|
||||||
|
#!/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"] ))
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
|
||||||
|
source @libdir@/functions.sh
|
||||||
|
|
||||||
|
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" "$@"
|
|
@ -8,7 +8,9 @@
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
m4_include(lib/common.sh)
|
# m4_include(lib/common.sh)
|
||||||
|
|
||||||
|
source @libdir@/shared_lib.sh
|
||||||
|
|
||||||
CHROOT_VERSION='v3'
|
CHROOT_VERSION='v3'
|
||||||
|
|
||||||
|
@ -143,38 +145,38 @@ chroot_lock () {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
track_mount() {
|
# track_mount() {
|
||||||
if [[ -z $CHROOT_ACTIVE_MOUNTS ]]; then
|
# if [[ -z $CHROOT_ACTIVE_MOUNTS ]]; then
|
||||||
CHROOT_ACTIVE_MOUNTS=()
|
# CHROOT_ACTIVE_MOUNTS=()
|
||||||
trap 'chroot_umount' EXIT
|
# trap 'chroot_umount' EXIT
|
||||||
fi
|
# fi
|
||||||
|
#
|
||||||
mount "$@" && CHROOT_ACTIVE_MOUNTS=("$2" "${CHROOT_ACTIVE_MOUNTS[@]}")
|
# mount "$@" && CHROOT_ACTIVE_MOUNTS=("$2" "${CHROOT_ACTIVE_MOUNTS[@]}")
|
||||||
}
|
# }
|
||||||
|
#
|
||||||
mount_conditionally() {
|
# mount_conditionally() {
|
||||||
local cond=$1; shift
|
# local cond=$1; shift
|
||||||
if eval "$cond"; then
|
# if eval "$cond"; then
|
||||||
track_mount "$@"
|
# track_mount "$@"
|
||||||
fi
|
# fi
|
||||||
}
|
# }
|
||||||
|
#
|
||||||
api_fs_mount() {
|
# api_fs_mount2() {
|
||||||
mount_conditionally "! mountpoint -q '$1'" "$1" "$1" --bind &&
|
# mount_conditionally "! mountpoint -q '$1'" "$1" "$1" --bind &&
|
||||||
track_mount proc "$1/proc" -t proc -o nosuid,noexec,nodev &&
|
# track_mount proc "$1/proc" -t proc -o nosuid,noexec,nodev &&
|
||||||
track_mount sys "$1/sys" -t sysfs -o nosuid,noexec,nodev,ro &&
|
# track_mount sys "$1/sys" -t sysfs -o nosuid,noexec,nodev,ro &&
|
||||||
track_mount udev "$1/dev" -t devtmpfs -o mode=0755,nosuid &&
|
# 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 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 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 run "$1/run" -t tmpfs -o nosuid,nodev,mode=0755 &&
|
||||||
track_mount tmp "$1/tmp" -t tmpfs -o mode=1777,strictatime,nodev,nosuid
|
# track_mount tmp "$1/tmp" -t tmpfs -o mode=1777,strictatime,nodev,nosuid
|
||||||
track_mount /etc/resolv.conf "$1/etc/resolv.conf" --bind
|
# track_mount /etc/resolv.conf "$1/etc/resolv.conf" --bind
|
||||||
track_mount ${cache_dirs[0]} "$1/${cache_dirs[0]}" --bind
|
# track_mount ${cache_dirs[0]} "$1/${cache_dirs[0]}" --bind
|
||||||
}
|
# }
|
||||||
|
#
|
||||||
chroot_umount() {
|
# chroot_umount() {
|
||||||
umount "${CHROOT_ACTIVE_MOUNTS[@]}"
|
# umount "${CHROOT_ACTIVE_MOUNTS[@]}"
|
||||||
}
|
# }
|
||||||
|
|
||||||
chroot_run() {
|
chroot_run() {
|
||||||
local dir=$1
|
local dir=$1
|
||||||
|
@ -201,7 +203,7 @@ if [[ -n $RUN ]]; then
|
||||||
|
|
||||||
chroot_lock
|
chroot_lock
|
||||||
if ${nosystemd};then
|
if ${nosystemd};then
|
||||||
api_fs_mount "${working_dir}"
|
api_fs_mount2 "${working_dir}"
|
||||||
else
|
else
|
||||||
build_mount_args
|
build_mount_args
|
||||||
fi
|
fi
|
|
@ -8,7 +8,9 @@
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
m4_include(lib/common.sh)
|
# m4_include(lib/common.sh)
|
||||||
|
|
||||||
|
source @libdir@/shared_lib.sh
|
||||||
|
|
||||||
shopt -s nullglob
|
shopt -s nullglob
|
||||||
|
|
Loading…
Reference in a new issue