mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 09:10:30 +08:00
Check for custom scripts inside /boot/kvmd-bootconfig.d directory since /boot is accessible by any client to allow users to drop custom scripts they want to run at boot.
156 lines
4.4 KiB
Bash
Executable File
156 lines
4.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# ========================================================================== #
|
|
# #
|
|
# KVMD - The main PiKVM daemon. #
|
|
# #
|
|
# Copyright (C) 2018-2021 Maxim Devaev <mdevaev@gmail.com> #
|
|
# #
|
|
# This program is free software: you can redistribute it and/or modify #
|
|
# it under the terms of the GNU General Public License as published by #
|
|
# the Free Software Foundation, either version 3 of the License, or #
|
|
# (at your option) any later version. #
|
|
# #
|
|
# This program is distributed in the hope that it will be useful, #
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
|
# GNU General Public License for more details. #
|
|
# #
|
|
# You should have received a copy of the GNU General Public License #
|
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
|
# #
|
|
# ========================================================================== #
|
|
|
|
|
|
set -ex
|
|
|
|
if [ `whoami` != root ]; then
|
|
echo "Only root can do that"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$1" != --do-the-thing ]; then
|
|
echo "This script will make some firstboot magic. Don't run it manually."
|
|
exit 1
|
|
fi
|
|
|
|
|
|
# ========== Preparing ==========
|
|
|
|
if [ ! -f /boot/pikvm.txt ]; then
|
|
exit 0
|
|
fi
|
|
source <(dos2unix < /boot/pikvm.txt)
|
|
|
|
rw
|
|
|
|
|
|
# ========== First boot configuration ==========
|
|
|
|
if [ -n "$FIRSTBOOT$FIRST_BOOT" ]; then
|
|
( \
|
|
(umount /etc/machine-id || true) \
|
|
&& echo -n > /etc/machine-id \
|
|
&& systemd-machine-id-setup \
|
|
) || true
|
|
|
|
rm -f /etc/ssh/ssh_host_*
|
|
ssh-keygen -v -A
|
|
|
|
rm -f /etc/kvmd/nginx/ssl/*
|
|
rm -f /etc/kvmd/vnc/ssl/*
|
|
kvmd-gencert --do-the-thing
|
|
kvmd-gencert --do-the-thing --vnc
|
|
|
|
if grep -q 'X-kvmd\.otgmsd' /etc/fstab; then
|
|
umount /dev/mmcblk0p3
|
|
parted /dev/mmcblk0 -a optimal -s resizepart 3 100%
|
|
yes | mkfs.ext4 -F -m 0 /dev/mmcblk0p3
|
|
mount /dev/mmcblk0p3
|
|
fi
|
|
|
|
# fc-cache is required for installed X server
|
|
which fc-cache && fc-cache || true
|
|
fi
|
|
|
|
|
|
# ========== OTG serial ==========
|
|
|
|
if [ -n "$ENABLE_OTG_SERIAL" ]; then
|
|
cat <<end_of_file > /etc/kvmd/override.d/0000-vendor-otg-serial.yaml
|
|
# Generated by kvmd-bootconfig. Do not edit this file!
|
|
otg:
|
|
devices:
|
|
serial:
|
|
enabled: true
|
|
end_of_file
|
|
grep '^ttyGS0$' /etc/securetty || echo ttyGS0 >> /etc/securetty
|
|
mkdir -p /etc/systemd/system/getty@ttyGS0.service.d
|
|
cat <<end_of_file > /etc/systemd/system/getty@ttyGS0.service.d/override.conf
|
|
[Service]
|
|
TTYReset=no
|
|
TTYVHangup=no
|
|
TTYVTDisallocate=no
|
|
end_of_file
|
|
systemctl enable getty@ttyGS0.service
|
|
touch /boot/pikvm-reboot.txt
|
|
fi
|
|
|
|
|
|
# ========== SSH ==========
|
|
|
|
if [ -n "$SSH_PORT" ]; then
|
|
sed -i -e "s/^\s*#*\s*Port\s\+.*$/Port $SSH_PORT/g" /etc/ssh/sshd_config
|
|
fi
|
|
|
|
|
|
# ========== Wi-Fi ==========
|
|
|
|
# Set the regulatory domain for wifi, if defined.
|
|
if [ -n "$WIFI_REGDOM" ]; then
|
|
sed -i \
|
|
-e 's/^\(WIRELESS_REGDOM=.*\)$/#\1/' \
|
|
-e 's/^#\(WIRELESS_REGDOM="'$WIFI_REGDOM'"\)/\1/' \
|
|
/etc/conf.d/wireless-regdom
|
|
fi
|
|
|
|
# If the WIFI_ESSID is defined, configure wlan0
|
|
if [ -n "$WIFI_ESSID" ]; then
|
|
WIFI_IFACE="${WIFI_IFACE:-wlan0}"
|
|
cat <<end_of_file > "/etc/systemd/network/$WIFI_IFACE.network"
|
|
[Match]
|
|
Name=$WIFI_IFACE
|
|
|
|
[Network]
|
|
DHCP=yes
|
|
DNSSEC=no
|
|
|
|
# Use same IP by forcing to use MAC address for clientID
|
|
[DHCP]
|
|
ClientIdentifier=mac
|
|
end_of_file
|
|
wpa_passphrase "$WIFI_ESSID" "$WIFI_PASSWD" > "/etc/wpa_supplicant/wpa_supplicant-$WIFI_IFACE.conf"
|
|
systemctl enable "wpa_supplicant@$WIFI_IFACE.service" || true
|
|
touch /boot/pikvm-reboot.txt
|
|
fi
|
|
|
|
|
|
# ========== Custom scripts ==========
|
|
mkdir -p /boot/kvmd-bootconfig.d
|
|
for script in `ls /etc/kvmd/bootconfig.d | sort`; do
|
|
/boot/kvmd-bootconfig.d/"$script" || true
|
|
done
|
|
|
|
|
|
# ========== Finish ==========
|
|
|
|
rm -f /boot/pikvm.txt
|
|
ro
|
|
|
|
if [ -f /boot/pikvm-reboot.txt ]; then
|
|
rm -f /boot/pikvm-reboot.txt
|
|
echo "kvmd-bootconfig: Reboot after 5 seconds" | tee /dev/kmsg
|
|
sleep 2
|
|
reboot
|
|
sleep 3
|
|
fi
|