POSIX rewrite: init.bash
This commit is contained in:
parent
5b732eba04
commit
01f0cb9923
@ -49,7 +49,7 @@ install -v -D -m 755 ./src/archbox-desktop $PREFIX/bin/archbox-desktop
|
||||
install -v -D -m 755 ./src/exec $PREFIX/share/archbox/bin/exec
|
||||
install -v -D -m 755 ./src/enter $PREFIX/share/archbox/bin/enter
|
||||
install -v -D -m 755 ./src/chroot_setup $PREFIX/share/archbox/chroot_setup
|
||||
install -v -D -m 755 ./src/init.bash $PREFIX/share/archbox/bin/init
|
||||
install -v -D -m 755 ./src/init $PREFIX/share/archbox/bin/init
|
||||
install -v -D -m 755 ./src/uth.bash $PREFIX/share/archbox/bin/uth
|
||||
|
||||
grep 'PREFIX=' $ETC_DIR/archbox.conf >/dev/null 2>&1 || cat << EOF >> $ETC_DIR/archbox.conf
|
||||
|
@ -3,7 +3,7 @@
|
||||
. /etc/archbox.conf >/dev/null 2>&1
|
||||
. /tmp/archbox_env >/dev/null 2>&1
|
||||
|
||||
REQ_ENV="DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR DISPLAY=$DISPLAY WAYLAND_DISPLAY=$WAYLAND_DISPLAY"
|
||||
REQ_ENV="DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS} XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR} DISPLAY=${DISPLAY} WAYLAND_DISPLAY=${WAYLAND_DISPLAY}"
|
||||
|
||||
ENV="$REQ_ENV $ENV_VAR"
|
||||
COMMAND="$@"
|
||||
|
2
src/exec
2
src/exec
@ -3,7 +3,7 @@
|
||||
. /etc/archbox.conf >/dev/null 2>&1
|
||||
. /tmp/archbox_env >/dev/null 2>&1
|
||||
|
||||
REQ_ENV="DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR DISPLAY=$DISPLAY WAYLAND_DISPLAY=$WAYLAND_DISPLAY"
|
||||
REQ_ENV="DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS} XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR} DISPLAY=${DISPLAY} WAYLAND_DISPLAY=${WAYLAND_DISPLAY}"
|
||||
|
||||
ENV="$REQ_ENV $ENV_VAR"
|
||||
COMMAND="$@"
|
||||
|
121
src/init
Normal file
121
src/init
Normal file
@ -0,0 +1,121 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /etc/archbox.conf
|
||||
|
||||
# Text colors/formatting
|
||||
red="\033[38;5;1"
|
||||
green="\033[38;5;2"
|
||||
bold="\033[1m"
|
||||
reset="\033[m"
|
||||
|
||||
err(){
|
||||
printf "${red}${bold}%s${reset}\n" "==> $*" 1>&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
msg(){
|
||||
printf "${green}${bold}%s${reset}\n" "==> $*" 1>&2
|
||||
}
|
||||
|
||||
rbind(){
|
||||
if mount | grep "${CHROOT}"${1} >/dev/null 2>&1; then
|
||||
msg "${CHROOT}${1} already mounted."
|
||||
else
|
||||
mount -R $1 "${CHROOT}"${1}
|
||||
msg "${CHROOT}${1} mounted!"
|
||||
fi
|
||||
if [ $2 = "make-rslave" ]; then
|
||||
mount --make-rslave ${CHROOT}${1}
|
||||
fi
|
||||
}
|
||||
|
||||
rbind_diff() {
|
||||
if mount | grep "${CHROOT}"${2}; then
|
||||
msg "$CHROOT$2 already mounted."
|
||||
else
|
||||
mount -R $1 "${CHROOT}"${2}
|
||||
msg "${CHROOT}${2} mounted!"
|
||||
fi
|
||||
}
|
||||
|
||||
bindproc() {
|
||||
if mount | grep "${CHROOT}"/proc; then
|
||||
msg "${CHROOT}/proc already mounted."
|
||||
else
|
||||
mount -t proc /proc "${CHROOT}"/proc
|
||||
msg "${CHROOT}/proc mounted!")
|
||||
fi
|
||||
}
|
||||
|
||||
rmbind() {
|
||||
umount_args=-R
|
||||
[ $LAZY_UMOUNT = "yes" ] && umount_args=-Rl
|
||||
if mount | grep "${CHROOT}"${1}; then
|
||||
umount $umount_args "${CHROOT}"${1}
|
||||
msg "${CHROOT}${1} unmounted!"
|
||||
fi
|
||||
}
|
||||
|
||||
case $1 in
|
||||
start)
|
||||
bindproc
|
||||
rbind /tmp
|
||||
rbind /sys make-rslave
|
||||
rbind /dev make-rslave
|
||||
[ $MOUNT_RUN = "yes" ] && rbind /run
|
||||
if [ $MOUNT_MOD = "yes" ]; then
|
||||
rbind "$(readlink -f /lib/modules)"
|
||||
rbind /boot
|
||||
fi
|
||||
[ -d /var/lib/dbus ] && rbind /var/lib/dbus
|
||||
for i in $SHARED_FOLDER; do
|
||||
if [ $i = *:* ]; then
|
||||
source=$(printf "%s" "$i" | sed 's/:.*//')
|
||||
target=$(printf "%s" "$i" | sed 's/.*://')
|
||||
mkdir -p "${CHROOT}"${target}
|
||||
rbind_diff $source $target;
|
||||
else
|
||||
rbind $i;
|
||||
fi
|
||||
done
|
||||
msg "Starting services"
|
||||
for j in $SERVICES; do
|
||||
if [ $j = *:* ]; then
|
||||
delay=$(printf "%s" "$j" | sed 's/.*://')
|
||||
service=$(printf "%s" "$j" | sed 's/:.*//')
|
||||
chroot "$CHROOT" /bin/su -c "/usr/local/bin/archboxctl exec $service" > /dev/null 2>&1 &
|
||||
sleep $delay
|
||||
else
|
||||
chroot "$CHROOT" /bin/su -c "/usr/local/bin/archboxctl exec $j" > /dev/null 2>&1 &
|
||||
fi
|
||||
done
|
||||
if [ -e /etc/archbox.rc ]; then
|
||||
cp /etc/archbox.rc /tmp/archbox.rc
|
||||
chmod +x /tmp/archbox.rc
|
||||
chroot "$CHROOT" /bin/su -c '/tmp/archbox.rc' > /tmp/archbox.rc.log 2>&1
|
||||
rm /tmp/archbox.rc
|
||||
fi
|
||||
exit 0
|
||||
;;
|
||||
stop)
|
||||
rmbind /proc
|
||||
rmbind /tmp
|
||||
rmbind /sys
|
||||
rmbind /dev
|
||||
[ $MOUNT_RUN = "yes" ] && rmbind /run
|
||||
if [ $MOUNT_MOD = "yes" ]; then
|
||||
rmbind $(readlink -f /lib/modules)
|
||||
rmbind /boot
|
||||
fi
|
||||
rmbind /var/lib/dbus
|
||||
for i in $SHARED_FOLDER; do
|
||||
if [ $i = *:* ]; then
|
||||
target=$(printf "%s" "$i" | sed 's/.*://')
|
||||
rmbind $target;
|
||||
else
|
||||
rmbind $i;
|
||||
fi
|
||||
done
|
||||
exit 0
|
||||
;;
|
||||
esac
|
@ -1,94 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
source /etc/archbox.conf
|
||||
|
||||
msg(){
|
||||
echo "$(tput bold)$(tput setaf 2)==> $@ $(tput sgr0)"
|
||||
}
|
||||
|
||||
rbind() {
|
||||
[[ $(mount | grep $CHROOT$1) ]] && msg "$CHROOT$1 already mounted." \
|
||||
|| (mount -R $1 $CHROOT$1 && msg "$CHROOT$1 mounted!")
|
||||
[[ $2 = "make-rslave" ]] && mount --make-rslave $CHROOT$1
|
||||
}
|
||||
|
||||
rbind_diff() {
|
||||
[[ $(mount | grep $CHROOT$2) ]] && msg "$CHROOT$2 already mounted." \
|
||||
|| (mount -R $1 $CHROOT$2 && msg "$CHROOT$2 mounted!")
|
||||
}
|
||||
|
||||
bindproc() {
|
||||
[[ $(mount | grep $CHROOT/proc) ]] && msg "$CHROOT/proc already mounted." \
|
||||
|| (mount -t proc /proc $CHROOT/proc && msg "$CHROOT/proc mounted!")
|
||||
}
|
||||
|
||||
rmbind() {
|
||||
umount_args=-R
|
||||
[[ $LAZY_UMOUNT = "yes" ]] && umount_args=-Rl
|
||||
[[ $(mount | grep $CHROOT$1) ]] && umount $umount_args $CHROOT$1 \
|
||||
&& msg "$CHROOT$1 unmounted!"
|
||||
}
|
||||
|
||||
case $1 in
|
||||
start)
|
||||
bindproc
|
||||
rbind /tmp
|
||||
rbind /sys make-rslave
|
||||
rbind /dev make-rslave
|
||||
[[ $MOUNT_RUN = "yes" ]] && rbind /run
|
||||
if [[ $MOUNT_MOD = "yes" ]]; then
|
||||
rbind $(readlink -f /lib/modules)
|
||||
rbind /boot
|
||||
fi
|
||||
[[ -d /var/lib/dbus ]] && rbind /var/lib/dbus
|
||||
for i in ${SHARED_FOLDER[@]}; do
|
||||
if [[ $i = *:* ]]; then
|
||||
source=$(echo $i | sed 's/:.*//')
|
||||
target=$(echo $i | sed 's/.*://')
|
||||
mkdir -p $CHROOT$target
|
||||
rbind_diff $source $target;
|
||||
else
|
||||
rbind $i;
|
||||
fi
|
||||
done
|
||||
msg "Starting services"
|
||||
for j in ${SERVICES[@]}; do
|
||||
if [[ $j = *:* ]]; then
|
||||
delay=$(echo $j | sed 's/.*://')
|
||||
service=$(echo $j | sed 's/:.*//')
|
||||
chroot $CHROOT /bin/su -c "/usr/local/bin/archboxctl exec $service" > /dev/null 2>&1 &
|
||||
sleep $delay
|
||||
else
|
||||
chroot $CHROOT /bin/su -c "/usr/local/bin/archboxctl exec $j" > /dev/null 2>&1 &
|
||||
fi
|
||||
done
|
||||
if [[ -e /etc/archbox.rc ]]; then
|
||||
cp /etc/archbox.rc /tmp/archbox.rc
|
||||
chmod +x /tmp/archbox.rc
|
||||
chroot $CHROOT /bin/su -c '/tmp/archbox.rc' > /tmp/archbox.rc.log 2>&1
|
||||
rm /tmp/archbox.rc
|
||||
fi
|
||||
exit 0
|
||||
;;
|
||||
stop)
|
||||
rmbind /proc
|
||||
rmbind /tmp
|
||||
rmbind /sys
|
||||
rmbind /dev
|
||||
[[ $MOUNT_RUN = "yes" ]] && rmbind /run
|
||||
if [[ $MOUNT_MOD = "yes" ]]; then
|
||||
rmbind $(readlink -f /lib/modules)
|
||||
rmbind /boot
|
||||
fi
|
||||
rmbind /var/lib/dbus
|
||||
for i in ${SHARED_FOLDER[@]}; do
|
||||
if [[ $i = *:* ]]; then
|
||||
target=$(echo $i | sed 's/.*://')
|
||||
rmbind $target;
|
||||
else
|
||||
rmbind $i;
|
||||
fi
|
||||
done
|
||||
exit 0
|
||||
;;
|
||||
esac
|
Loading…
Reference in New Issue
Block a user