simplified staging
This commit is contained in:
parent
026da2dfa0
commit
7b4fc61061
2 changed files with 15 additions and 80 deletions
|
|
@ -5,6 +5,7 @@ ENV DEBIAN_FRONTEND=noninteractive
|
||||||
# Install base packages and enable the dosemu2 PPA
|
# Install base packages and enable the dosemu2 PPA
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y --no-install-recommends \
|
apt-get install -y --no-install-recommends \
|
||||||
|
software-properties-common \
|
||||||
gnupg \
|
gnupg \
|
||||||
openssh-server \
|
openssh-server \
|
||||||
busybox-static \
|
busybox-static \
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ SVARDOS_ROOT="${SVARDOS_ROOT:-/opt/svardos}"
|
||||||
SVARDOS_BASE="${SVARDOS_BASE:-${SVARDOS_ROOT}/base}"
|
SVARDOS_BASE="${SVARDOS_BASE:-${SVARDOS_ROOT}/base}"
|
||||||
ALLOW_MODE="${DOS_ALLOW_MODE:-all}"
|
ALLOW_MODE="${DOS_ALLOW_MODE:-all}"
|
||||||
DEFAULT_DOS_USER="dosuser"
|
DEFAULT_DOS_USER="dosuser"
|
||||||
INSTALL_SENTINEL=".svardos_installed"
|
INSTALL_SENTINEL_NAME=".svardos_installed"
|
||||||
|
|
||||||
if [ "$(id -u)" -eq 0 ]; then
|
if [ "$(id -u)" -eq 0 ]; then
|
||||||
DOS_USER="${DEFAULT_DOS_USER}"
|
DOS_USER="${DEFAULT_DOS_USER}"
|
||||||
|
|
@ -30,7 +30,9 @@ fi
|
||||||
|
|
||||||
DOSEMU_DIR="${DOS_HOME}/.dosemu"
|
DOSEMU_DIR="${DOS_HOME}/.dosemu"
|
||||||
C_DRIVE="${DOSEMU_DIR}/drive_c"
|
C_DRIVE="${DOSEMU_DIR}/drive_c"
|
||||||
INSTALL_MARKER="${DOSEMU_DIR}/${INSTALL_SENTINEL}"
|
INSTALL_SENTINEL_PATH="${DOSEMU_DIR}/${INSTALL_SENTINEL_NAME}"
|
||||||
|
DOSEMU_ARGS=()
|
||||||
|
|
||||||
detect_dosemu_args() {
|
detect_dosemu_args() {
|
||||||
local mode="${DOS_TERMINAL_MODE:-auto}"
|
local mode="${DOS_TERMINAL_MODE:-auto}"
|
||||||
if [ "${mode}" = "auto" ]; then
|
if [ "${mode}" = "auto" ]; then
|
||||||
|
|
@ -64,38 +66,7 @@ if [ "$(id -u)" -eq 0 ] && [ ! -d "${ENV_DIR}" ]; then
|
||||||
mkdir -p "${ENV_DIR}"
|
mkdir -p "${ENV_DIR}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
set_install_marker() {
|
reset_drive_c() {
|
||||||
touch "${INSTALL_MARKER}"
|
|
||||||
if [ "$(id -u)" -eq 0 ]; then
|
|
||||||
chown "${DOS_USER}:${DOS_USER}" "${INSTALL_MARKER}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
has_svardos_installation() {
|
|
||||||
if [ -f "${C_DRIVE}/COMMAND.COM" ] || [ -f "${C_DRIVE}/command.com" ]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
if [ -d "${C_DRIVE}/SVARDOS/BIN" ] || [ -d "${C_DRIVE}/svardos/bin" ]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
needs_install() {
|
|
||||||
if [ "${DOS_FORCE_INSTALL:-0}" = "1" ]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
if [ -f "${INSTALL_MARKER}" ]; then
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
if has_svardos_installation; then
|
|
||||||
set_install_marker
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
stage_initial_install() {
|
|
||||||
if [ ! -d "${SVARDOS_BASE}" ] || [ -z "$(ls -A "${SVARDOS_BASE}")" ]; then
|
if [ ! -d "${SVARDOS_BASE}" ] || [ -z "$(ls -A "${SVARDOS_BASE}")" ]; then
|
||||||
echo "SvarDOS base directory ${SVARDOS_BASE} is empty. Aborting." >&2
|
echo "SvarDOS base directory ${SVARDOS_BASE} is empty. Aborting." >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
|
@ -116,41 +87,6 @@ stage_initial_install() {
|
||||||
echo "SvarDOS base staged to ${C_DRIVE}"
|
echo "SvarDOS base staged to ${C_DRIVE}"
|
||||||
}
|
}
|
||||||
|
|
||||||
run_headless_install() {
|
|
||||||
local log_file="${DOSEMU_DIR}/install.log"
|
|
||||||
local comspec=''
|
|
||||||
if [ -f "${C_DRIVE}/CMD.COM" ]; then
|
|
||||||
comspec='C:\CMD.COM'
|
|
||||||
elif [ -f "${C_DRIVE}/COMMAND.COM" ]; then
|
|
||||||
comspec='C:\COMMAND.COM'
|
|
||||||
else
|
|
||||||
echo "SvarDOS provisioning failed: no command interpreter found on ${C_DRIVE}." >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
local command="${comspec} /C AUTOEXEC.BAT"
|
|
||||||
local status
|
|
||||||
|
|
||||||
if [ "$(id -u)" -eq 0 ]; then
|
|
||||||
runuser -u "${DOS_USER}" -- dosemu -dumb -K "${C_DRIVE}" -E "${command}" >"${log_file}" 2>&1
|
|
||||||
status=$?
|
|
||||||
else
|
|
||||||
dosemu -dumb -K "${C_DRIVE}" -E "${command}" >"${log_file}" 2>&1
|
|
||||||
status=$?
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${status}" -ne 0 ]; then
|
|
||||||
echo "SvarDOS provisioning failed (dosemu exit ${status}). See ${log_file} for details." >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f "${C_DRIVE}/INSTALL.BAT" ]; then
|
|
||||||
echo "SvarDOS provisioning did not complete successfully (INSTALL.BAT still present). See ${log_file}." >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
sync_allowed_content() {
|
sync_allowed_content() {
|
||||||
allowed_entries=()
|
allowed_entries=()
|
||||||
local mode="${ALLOW_MODE}"
|
local mode="${ALLOW_MODE}"
|
||||||
|
|
@ -199,20 +135,18 @@ apply_templates() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
if needs_install; then
|
detect_dosemu_args
|
||||||
stage_initial_install
|
|
||||||
echo "Running initial SvarDOS provisioning..."
|
if [ "${DOS_FORCE_INSTALL:-0}" = "1" ] || [ ! -f "${INSTALL_SENTINEL_PATH}" ]; then
|
||||||
if run_headless_install; then
|
reset_drive_c
|
||||||
set_install_marker
|
touch "${INSTALL_SENTINEL_PATH}"
|
||||||
echo "SvarDOS provisioning complete."
|
if [ "$(id -u)" -eq 0 ]; then
|
||||||
echo "Disconnecting. Reconnect via SSH to start the SvarDOS shell."
|
chown "${DOS_USER}:${DOS_USER}" "${INSTALL_SENTINEL_PATH}"
|
||||||
exit 0
|
|
||||||
else
|
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
echo "Reusing existing SvarDOS installation on ${C_DRIVE}" >&2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
detect_dosemu_args
|
|
||||||
sync_allowed_content
|
sync_allowed_content
|
||||||
apply_templates
|
apply_templates
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue