initial commit
This commit is contained in:
commit
f614a4ee87
71
common
Normal file
71
common
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
out() { printf "$1 $2\n" "${@:3}"; }
|
||||||
|
error() { out "==> ERROR:" "$@"; }
|
||||||
|
msg() { out "==>" "$@"; }
|
||||||
|
msg2() { out " ->" "$@";}
|
||||||
|
die() { error "$@"; exit 1; }
|
||||||
|
|
||||||
|
in_array() {
|
||||||
|
local i
|
||||||
|
for i in "${@:2}"; do
|
||||||
|
[[ $1 = "$i" ]] && return
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
api_fs_mount() {
|
||||||
|
mount -t proc proc "$1/proc" -o nosuid,noexec,nodev || return 1
|
||||||
|
mount -t sysfs sys "$1/sys" -o nosuid,noexec,nodev || return 1
|
||||||
|
mount -t devtmpfs udev "$1/dev" -o mode=0755,nosuid || return 1
|
||||||
|
mount -t devpts devpts "$1/dev/pts" -o mode=0620,gid=5,nosuid,noexec || return 1
|
||||||
|
mount -t tmpfs shm "$1/dev/shm" -o mode=1777,nosuid,nodev || return 1
|
||||||
|
mount -t tmpfs run "$1/run" -o nosuid,nodev,mode=0755 || return 1
|
||||||
|
mount -t tmpfs tmp "$1/tmp" -o mode=1777,strictatime,nodev,nosuid,size=50M || return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
api_fs_umount() {
|
||||||
|
umount \
|
||||||
|
"$1/tmp" \
|
||||||
|
"$1/run" \
|
||||||
|
"$1/dev/shm" \
|
||||||
|
"$1/dev/pts" \
|
||||||
|
"$1/dev" \
|
||||||
|
"$1/sys" \
|
||||||
|
"$1/proc"
|
||||||
|
}
|
||||||
|
|
||||||
|
fstype_is_pseudofs() {
|
||||||
|
# list taken from util-linux source: libmount/src/utils.c
|
||||||
|
local pseudofs_types=('anon_inodefs'
|
||||||
|
'autofs'
|
||||||
|
'bdev'
|
||||||
|
'binfmt_misc'
|
||||||
|
'cgroup'
|
||||||
|
'configfs'
|
||||||
|
'cpuset'
|
||||||
|
'debugfs'
|
||||||
|
'devfs'
|
||||||
|
'devpts'
|
||||||
|
'devtmpfs'
|
||||||
|
'dlmfs'
|
||||||
|
'fuse.gvfs-fuse-daemon'
|
||||||
|
'fusectl'
|
||||||
|
'hugetlbfs'
|
||||||
|
'mqueue'
|
||||||
|
'nfsd'
|
||||||
|
'none'
|
||||||
|
'pipefs'
|
||||||
|
'proc'
|
||||||
|
'pstore'
|
||||||
|
'ramfs'
|
||||||
|
'rootfs'
|
||||||
|
'rpc_pipefs'
|
||||||
|
'securityfs'
|
||||||
|
'sockfs'
|
||||||
|
'spufs'
|
||||||
|
'sysfs'
|
||||||
|
'tmpfs')
|
||||||
|
|
||||||
|
in_array "$1" "${pseudofs_types[@]}"
|
||||||
|
}
|
||||||
|
|
94
genfstab
Executable file
94
genfstab
Executable file
@ -0,0 +1,94 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
. ./common
|
||||||
|
|
||||||
|
shopt -s extglob
|
||||||
|
|
||||||
|
write_source() {
|
||||||
|
local tag= spec=
|
||||||
|
|
||||||
|
if (( bylabel )); then
|
||||||
|
tag=LABEL
|
||||||
|
spec=$(lsblk -rno LABEL "$1" 2>/dev/null)
|
||||||
|
elif (( byuuid )); then
|
||||||
|
tag=UUID
|
||||||
|
spec=$(lsblk -rno UUID "$1" 2>/dev/null)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $spec ]]; then
|
||||||
|
printf '# %s\n' "$source"
|
||||||
|
printf '%-20s' "$tag=$spec"
|
||||||
|
else
|
||||||
|
printf '%-20s' "$source"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
root=/mnt
|
||||||
|
|
||||||
|
while getopts ':LUr:' flag; do
|
||||||
|
case $flag in
|
||||||
|
L)
|
||||||
|
bylabel=1
|
||||||
|
;;
|
||||||
|
U)
|
||||||
|
byuuid=1
|
||||||
|
;;
|
||||||
|
r)
|
||||||
|
# trim trailing slashes
|
||||||
|
root=${OPTARG%%+(/)}
|
||||||
|
;;
|
||||||
|
?)
|
||||||
|
die '%s: invalid option -- '\''%s'\' "${0##*/}" "$OPTARG"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
shift $(( OPTIND - 1 ))
|
||||||
|
|
||||||
|
if (( bylabel && byuuid )); then
|
||||||
|
die "cannot specify both -U and -L"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# handle block devices
|
||||||
|
findmnt -Recvruno SOURCE,TARGET,FSTYPE,VFS-OPTIONS "$root" |
|
||||||
|
while read -r source target fstype opts; do
|
||||||
|
# default 5th and 6th columns
|
||||||
|
dump=0 pass=2
|
||||||
|
|
||||||
|
# this is root
|
||||||
|
target=${target#$root}
|
||||||
|
if [[ $target = ?(/) ]]; then
|
||||||
|
target=/
|
||||||
|
pass=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# we don't fsck pseudofs
|
||||||
|
if fstype_is_pseudofs "$fstype"; then
|
||||||
|
continue
|
||||||
|
pass=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# write one line
|
||||||
|
write_source "$source"
|
||||||
|
printf '\t%-10s' "$target" "$fstype" "$opts"
|
||||||
|
printf '\t%s %s' "$dump" "$pass"
|
||||||
|
printf '\n\n'
|
||||||
|
done
|
||||||
|
|
||||||
|
# handle swaps devices
|
||||||
|
{
|
||||||
|
# ignore header
|
||||||
|
read
|
||||||
|
|
||||||
|
while read -r device _ _ _ prio; do
|
||||||
|
options=defaults
|
||||||
|
if [[ $prio != -1 ]]; then
|
||||||
|
options+=,pri=$prio
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf -v device '%b' "$device"
|
||||||
|
|
||||||
|
printf '%-20s\t%-10s\t%-10s\t%-10s\t0 0\n' "$device" 'none' 'swap' "$options"
|
||||||
|
done
|
||||||
|
} </proc/swaps
|
||||||
|
|
||||||
|
# vim: et ts=2 sw=2 ft=sh :
|
45
pacstrap
Executable file
45
pacstrap
Executable file
@ -0,0 +1,45 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#
|
||||||
|
# Assumptions:
|
||||||
|
# 1) User has partitioned, formatted, and mounted partitions on /mnt
|
||||||
|
# 2) Network is functional
|
||||||
|
# 3) Arguments passed to the script are valid pacman targets
|
||||||
|
# 4) A valid mirror appears in /etc/pacman.d/mirrorlist
|
||||||
|
#
|
||||||
|
|
||||||
|
source ./common
|
||||||
|
|
||||||
|
declare newroot=/mnt
|
||||||
|
|
||||||
|
while getopts ':r:' flag; do
|
||||||
|
case $flag in
|
||||||
|
r)
|
||||||
|
newroot=$OPTARG
|
||||||
|
;;
|
||||||
|
?)
|
||||||
|
die '%s: invalid option -- '\''%s'\' "${0##*/}" "$OPTARG"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
shift $(( OPTIND - 1 ))
|
||||||
|
|
||||||
|
if (( $# )); then
|
||||||
|
packages=("$@")
|
||||||
|
else
|
||||||
|
packages=('base' 'base-devel')
|
||||||
|
fi
|
||||||
|
|
||||||
|
rootdev=$(findmnt -runo SOURCE "$newroot") || die '%s is not a mountpoint!' "$newroot"
|
||||||
|
|
||||||
|
# create obligatory directories
|
||||||
|
msg 'Creating install root at %s' "$newroot"
|
||||||
|
mkdir -p "$newroot/var/lib/pacman" /mnt/{dev,proc,sys,run,tmp,etc}
|
||||||
|
|
||||||
|
# mount API filesystems
|
||||||
|
api_fs_mount "$newroot"
|
||||||
|
|
||||||
|
msg 'Installing packages to %s' "$newroot"
|
||||||
|
pacman -r "$newroot" -Sy "${package[@]}"
|
||||||
|
|
||||||
|
api_fs_mount "$newroot"
|
Loading…
Reference in New Issue
Block a user