kylin-os-installer/scripts/oem.sh

263 lines
5.9 KiB
Bash
Executable File

#!/bin/bash
set -e
cfgFile=/usr/share/kylin-os-installer/ky-installer.cfg
logFile=/var/log/installer/kylin-os-installer-oem.log
if [[ -f /etc/xdg/autostart/oem-qc.desktop ]]; then
sudo rm -f /etc/xdg/autostart/oem-qc.desktop
fi
userName=
timeZone=
password=
autoLogin=
userDefGroup=
msg() {
echo "$(date +'%Y-%m-%d %H:%M:%S') $*" >> $logFile
}
get_value()
{
indexStr=$1
valueStr=
valueStr=$(grep "^$indexStr=" "$cfgFile")
valueStr=${valueStr##*=}
echo "${valueStr}"
}
get_value_bytearray() {
local key=$1
local value
value=$(grep "^$key" "$cfgFile")
# TODO, 连续空格有问题
if ! egrep -q '^password=.?@ByteArray' $cfgFile; then
echo "${value#*=}"
return 0
fi
value1=$(echo "${value#*\(}")
echo "${value1%)*}"
}
set_timezone()
{
timeZone=$(get_value "timezone")
#msg "Set timezone to $timeZone"
ln -sf /usr/share/zoneinfo/$timeZone /etc/localtime
hwclock -w
}
set_user()
{
userName=$(get_value "username")
password=$(get_value_bytearray "password")
autoLogin=$(get_value "autologin")
KUID=1000
#msg "Set user $userName"
useradd -m -s /bin/bash -u "${KUID}" "${userName}"
usermod -c "${userName}" "${userName}"
echo "$userName:$password" | chpasswd
}
add_groups()
{
userName=$(get_value "username")
userDefGroup=(adm cdrom sudo dip plugdev lpadmin sambashare debian-tor libvirtd lxd)
for item in ${userDefGroup[*]}; do
adduser $userName $item || true
done
}
set_auto_login()
{
if [[ "${autoLogin}" == "1" ]]; then
if [[ -d /etc/lightdm ]]; then
LightDMCustomFile=/etc/lightdm/lightdm.conf
autoLoginParam="autologin-guest=false\n\
autologin-user=$userName\n\
autologin-user-timeout=0"
if ! grep -qs '^autologin-user' ${LightDMCustomFile}; then
if ! grep -qs '^\[Seat:\*\]' ${LightDMCustomFile}; then
echo '[Seat:*]' >>${LightDMCustomFile}
fi
sed -i "s/\[Seat:\*\]/\[SeatDefaults]\n${AutologinParameters}/" ${LightDMCustomFile}
# oem config scenario
else
#sed -i "s/^\(\(str *\)\?autologin-user\)=.*$/\1=${USERNAME}/g;" /etc/lightdm/lightdm.conf
sed -i "s/^autologin-user=.*$/autologin-user=${userName}/g" ${LightDMCustomFile}
fi
fi
else
if [[ -f /etc/lightdm/lightdm.conf ]]; then
rm -f /etc/lightdm/lightdm.conf
fi
fi
}
set_language()
{
language=$(get_value "language")
echo "zh_CN.UTF-8 UTF-8
en_US.UTF-8 UTF-8" > /etc/locale.gen
#msg "Set language $language"
echo "LANG=$language.UTF-8" > /etc/default/locale
if [[ "$language" == "zh_CN" ]]; then
echo "LANGUAGE=\"zh_CN:zh\"" >> /etc/default/locale
fi
locale-gen
if [[ -f /lib/systemd/system/accounts-daemon.service ]]; then
systemctl restart accounts-daemon || true
fi
}
set_hostname()
{
HOSTNAME=$(get_value "hostname")
echo "${HOSTNAME}" >/etc/hostname
hostnamectl set-hostname "${HOSTNAME}"
echo -e "127.0.0.1\tlocalhost
127.0.1.1\t${HOSTNAME}
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
" >/etc/hosts
# bug 39277, 重启蓝牙服务
if [[ -f /lib/systemd/system/bluetooth.service ]]; then
/bin/systemctl restart bluetooth.service || true
fi
}
remove_packages()
{
# remove package list
packages_list_remove=(
kylin-os-installer
casper
ukui-installer-wayland
ubiquity
)
for i in ${packages_list_remove[*]}; do
if dpkg -l | grep -q $i; then
msg "移除 $i"
apt purge -y $i
fi
done
}
remove_oem_service() {
if [[ -f /lib/systemd/system/oem-config.service ]]; then
/bin/systemctl disable oem-config.service || true
/bin/systemctl disable oem-config.target || true
rm -f /lib/systemd/system/oem-config.*
/bin/systemctl --no-block isolate graphical.target || true
fi
# if [[ -f /etc/xdg/autostart/oem-qc.desktop ]]; then
# rm -f /etc/xdg/autostart/oem-qc.desktop
# fi
if [[ -f /usr/share/kylin-os-installer/data/oem-qc.desktop ]]; then
rm -f /usr/share/kylin-os-installer/data/oem-qc.desktop
fi
if [[ -f /etc/xdg/autostart/kylin-os-installer.desktop ]]; then
rm -f /etc/xdg/autostart/kylin-os-installer.desktop
fi
if [[ -f /usr/share/kylin-os-installer/data/oem-unlock.desktop ]]; then
rm -f /usr/share/kylin-os-installer/data/oem-unlock.desktop
fi
if [[ -f /etc/xdg/autostart/oem-unlock.desktop ]]; then
rm -f /etc/xdg/autostart/oem-unlock.desktop
fi
if [[ -f /usr/sbin/oem-unlock ]]; then
rm -f /usr/sbin/oem-unlock
fi
}
delete_oem_user() {
if getent passwd 'oem' >/dev/null; then
if [[ -f /etc/sudoers.d/oem ]]; then
rm -f /etc/sudoers.d/oem
fi
pkill -u 'oem' || true
userdel --force --remove 'oem' || true
fi
}
set_test_mode() {
if grep -q 'test-mode=true' ${cfgFile}; then
userName=$(get_value "username")
# sudo 免密
echo "${userName} ALL=(ALL) NOPASSWD: ALL" >/etc/sudoers.d/${userName}
if [[ ! -z "$DISPLAY" ]]; then
xset s off -dpms
fi
fi
}
restart_lightdm()
{
systemctl restart lightdm
}
set_language >>${logFile}
set_timezone >>${logFile}
set_hostname >>${logFile}
set_user >>${logFile}
add_groups >>${logFile}
set_test_mode >>${logFile}
set_auto_login >>${logFile}
remove_oem_service >>${logFile}
systemctl start delete-oem-user.service
case $1 in
'user')
set_user
;;
'host')
set_hostname
;;
'time')
set_timezone
;;
'locale')
set_language
;;
'autologin')
set_auto_login
;;
'addgroup')
add_groups
;;
'unload')
rm_ky_installer
;;
'logout')
restart_lightdm
;;
esac