forked from mirrored-repos/manjaro-tools
461 lines
17 KiB
Bash
461 lines
17 KiB
Bash
#!/bin/bash
|
|
#
|
|
# 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; version 2 of the License.
|
|
#
|
|
# 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.
|
|
|
|
copy_overlay(){
|
|
if [[ -e $1 ]]; then
|
|
msg2 "Copying [%s] ..." "${1##*/}"
|
|
if [[ -L $1 ]]; then
|
|
cp -a --no-preserve=ownership $1/* $2
|
|
else
|
|
cp -LR $1/* $2
|
|
fi
|
|
fi
|
|
}
|
|
|
|
add_svc_rc(){
|
|
if [[ -f $1/etc/init.d/$2 ]]; then
|
|
msg2 "Setting %s ..." "$2"
|
|
chroot $1 rc-update add $2 default &>/dev/null
|
|
fi
|
|
}
|
|
|
|
add_svc_sd(){
|
|
if [[ -f $1/etc/systemd/system/$2.service ]] || \
|
|
[[ -f $1/usr/lib/systemd/system/$2.service ]]; then
|
|
msg2 "Setting %s ..." "$2"
|
|
chroot $1 systemctl enable $2 &>/dev/null
|
|
fi
|
|
if [[ -f $1/etc/systemd/system/$2 ]] || \
|
|
[[ -f $1/usr/lib/systemd/system/$2 ]]; then
|
|
msg2 "Setting %s ..." "$2"
|
|
chroot $1 systemctl enable $2 &>/dev/null
|
|
fi
|
|
}
|
|
|
|
set_xdm(){
|
|
if [[ -f $1/etc/conf.d/xdm ]]; then
|
|
local conf='DISPLAYMANAGER="'${displaymanager}'"'
|
|
sed -i -e "s|^.*DISPLAYMANAGER=.*|${conf}|" $1/etc/conf.d/xdm
|
|
fi
|
|
}
|
|
|
|
configure_mhwd_drivers(){
|
|
local path=$1${mhwd_repo}/ \
|
|
drv_path=$1/var/lib/mhwd/db/pci/graphic_drivers
|
|
info "Configuring mhwd db ..."
|
|
if [ -z "$(ls $path | grep catalyst-utils 2> /dev/null)" ]; then
|
|
msg2 "Disabling Catalyst driver"
|
|
mkdir -p $drv_path/catalyst/
|
|
echo "" > $drv_path/catalyst/MHWDCONFIG
|
|
fi
|
|
if [ -z "$(ls $path | grep nvidia-340xx-utils 2> /dev/null)" ]; then
|
|
msg2 "Disabling Nvidia 340xx driver"
|
|
mkdir -p $drv_path/nvidia-340xx/
|
|
echo "" > $drv_path/nvidia-340xx/MHWDCONFIG
|
|
msg2 "Disabling Nvidia 340xx Bumblebee driver"
|
|
mkdir -p $drv_path/hybrid-intel-nvidia-340xx-bumblebee/
|
|
echo "" > $drv_path/hybrid-intel-nvidia-340xx-bumblebee/MHWDCONFIG
|
|
fi
|
|
if [ -z "$(ls $path | grep nvidia-390xx-utils 2> /dev/null)" ]; then
|
|
msg2 "Disabling Nvidia 390xx driver"
|
|
mkdir -p $drv_path/nvidia-390xx/
|
|
echo "" > $drv_path/nvidia-390xx/MHWDCONFIG
|
|
msg2 "Disabling Nvidia 390xx Bumblebee driver"
|
|
mkdir -p $drv_path/hybrid-intel-nvidia-390xx-bumblebee/
|
|
echo "" > $drv_path/hybrid-intel-nvidia-390xx-bumblebee/MHWDCONFIG
|
|
fi
|
|
if [ -z "$(ls $path | grep nvidia-418xx-utils 2> /dev/null)" ]; then
|
|
msg2 "Disabling Nvidia 418xx driver"
|
|
mkdir -p $drv_path/nvidia-418xx/
|
|
echo "" > $drv_path/nvidia-418xx/MHWDCONFIG
|
|
msg2 "Disabling Nvidia 418xx Bumblebee driver"
|
|
mkdir -p $drv_path/hybrid-intel-nvidia-418xx-bumblebee/
|
|
echo "" > $drv_path/hybrid-intel-nvidia-418xx-bumblebee/MHWDCONFIG
|
|
fi
|
|
if [ -z "$(ls $path | grep nvidia-430xx-utils 2> /dev/null)" ]; then
|
|
msg2 "Disabling Nvidia 430xx driver"
|
|
mkdir -p $drv_path/nvidia-430xx/
|
|
echo "" > $drv_path/nvidia-430xx/MHWDCONFIG
|
|
msg2 "Disabling Nvidia 430xx Bumblebee driver"
|
|
mkdir -p $drv_path/hybrid-intel-nvidia-430xx-bumblebee/
|
|
echo "" > $drv_path/hybrid-intel-nvidia-430xx-bumblebee/MHWDCONFIG
|
|
fi
|
|
if [ -z "$(ls $path | grep nvidia-435xx-utils 2> /dev/null)" ]; then
|
|
msg2 "Disabling Nvidia 435xx driver"
|
|
mkdir -p $drv_path/nvidia-435xx/
|
|
echo "" > $drv_path/nvidia-435xx/MHWDCONFIG
|
|
msg2 "Disabling Nvidia 435xx Prime driver"
|
|
mkdir -p $drv_path/hybrid-intel-nvidia-435xx-prime/
|
|
echo "" > $drv_path/hybrid-intel-nvidia-435xx-prime/MHWDCONFIG
|
|
fi
|
|
if [ -z "$(ls $path | grep nvidia-440xx-utils 2> /dev/null)" ]; then
|
|
msg2 "Disabling Nvidia 440xx driver"
|
|
mkdir -p $drv_path/nvidia-440xx/
|
|
echo "" > $drv_path/nvidia-440xx/MHWDCONFIG
|
|
msg2 "Disabling Nvidia 440xx Prime driver"
|
|
mkdir -p $drv_path/hybrid-intel-nvidia-440xx-prime/
|
|
echo "" > $drv_path/hybrid-intel-nvidia-440xx-prime/MHWDCONFIG
|
|
fi
|
|
if [ -z "$(ls $path | grep xf86-video-amdgpu 2> /dev/null)" ]; then
|
|
msg2 "Disabling AMD gpu driver"
|
|
mkdir -p $drv_path/xf86-video-amdgpu/
|
|
echo "" > $drv_path/xf86-video-amdgpu/MHWDCONFIG
|
|
fi
|
|
if [ -z "$(ls $path | grep virtualbox-guest-modules 2> /dev/null)" ]; then
|
|
msg2 "Disabling VirtualBox guest driver"
|
|
mkdir -p $drv_path/virtualbox/
|
|
echo "" > $drv_path/virtualbox/MHWDCONFIG
|
|
fi
|
|
local drv_path=$1/var/lib/mhwd/db/pci/network_drivers
|
|
if [ -z "$(ls $path | grep broadcom-wl 2> /dev/null)" ]; then
|
|
msg2 "Disabling broadcom-wl driver"
|
|
mkdir -p $drv_path/broadcom-wl/
|
|
echo "" > $drv_path/broadcom-wl/MHWDCONFIG
|
|
fi
|
|
if [ -z "$(ls $path | grep rt3562sta 2> /dev/null)" ]; then
|
|
msg2 "Disabling rt3562sta driver"
|
|
mkdir -p $drv_path/rt3562sta/
|
|
echo "" > $drv_path/rt3562sta/MHWDCONFIG
|
|
fi
|
|
if [ -z "$(ls $path | grep r8168 2> /dev/null)" ]; then
|
|
msg2 "Disabling r8168 driver"
|
|
mkdir -p $drv_path/r8168/
|
|
echo "" > $drv_path/r8168/MHWDCONFIG
|
|
fi
|
|
}
|
|
|
|
configure_lsb(){
|
|
if [ -e $1/etc/lsb-release ] ; then
|
|
msg2 "Configuring lsb-release"
|
|
sed -i -e "s/^.*DISTRIB_RELEASE.*/DISTRIB_RELEASE=${dist_release}/" $1/etc/lsb-release
|
|
sed -i -e "s/^.*DISTRIB_CODENAME.*/DISTRIB_CODENAME=${dist_codename}/" $1/etc/lsb-release
|
|
fi
|
|
}
|
|
|
|
configure_branding(){
|
|
msg2 "Configuring branding"
|
|
echo "---
|
|
componentName: manjaro
|
|
|
|
# This selects between different welcome texts. When false, uses
|
|
# the traditional 'Welcome to the %1 installer.', and when true,
|
|
# uses 'Welcome to the Calamares installer for %1.'. This allows
|
|
# to distinguish this installer from other installers for the
|
|
# same distribution.
|
|
welcomeStyleCalamares: ${welcomestyle}
|
|
|
|
# Should the welcome image (productWelcome, below) be scaled
|
|
# up beyond its natural size? If false, the image does not grow
|
|
# with the window but remains the same size throughout (this
|
|
# may have surprising effects on HiDPI monitors).
|
|
welcomeExpandingLogo: ${welcomelogo}
|
|
|
|
# Size and expansion policy for Calamares.
|
|
# - "normal" or unset, expand as needed, use *windowSize*
|
|
# - "fullscreen", start as large as possible, ignore *windowSize*
|
|
# - "noexpand", never expand, use *windowSize*
|
|
windowExpanding: ${windowexp}
|
|
|
|
# Size of Calamares window, expressed as w,h. Both w and h
|
|
# may be either pixels (suffix px) or font-units (suffix em).
|
|
# e.g. "800px,600px"
|
|
# "60em,480px"
|
|
# This setting is ignored if "fullscreen" is selected for
|
|
# *windowExpanding*, above. If not set, use constants defined
|
|
# in CalamaresUtilsGui, 800x520.
|
|
windowSize: ${windowsize}
|
|
|
|
# Placement of Calamares window. Either "center" or "free".
|
|
# Whether "center" actually works does depend on the window
|
|
# manager in use (and only makes sense if you're not using
|
|
# *windowExpanding* set to "fullscreen").
|
|
windowPlacement: ${windowplacement}
|
|
|
|
# These are strings shown to the user in the user interface.
|
|
# There is no provision for translating them -- since they
|
|
# are names, the string is included as-is.
|
|
#
|
|
# The four Url strings are the Urls used by the buttons in
|
|
# the welcome screen, and are not shown to the user. Clicking
|
|
# on the "Support" button, for instance, opens the link supportUrl.
|
|
# If a Url is empty, the corresponding button is not shown.
|
|
#
|
|
# bootloaderEntryName is how this installation / distro is named
|
|
# in the boot loader (e.g. in the GRUB menu).
|
|
strings:
|
|
productName: ${dist_name} Linux
|
|
shortProductName: ${dist_name}
|
|
version: ${dist_release}
|
|
shortVersion: ${dist_release}
|
|
versionedName: ${dist_name} Linux ${dist_release} "\"${dist_codename}"\"
|
|
shortVersionedName: ${dist_name} ${dist_release}
|
|
bootloaderEntryName: ${dist_name}
|
|
|
|
# These images are loaded from the branding module directory.
|
|
#
|
|
# productIcon is used as the window icon, and will (usually) be used
|
|
# by the window manager to represent the application. This image
|
|
# should be square, and may be displayed by the window manager
|
|
# as small as 16x16 (but possibly larger).
|
|
# productLogo is used as the logo at the top of the left-hand column
|
|
# which shows the steps to be taken. The image should be square,
|
|
# and is displayed at 80x80 pixels (also on HiDPI).
|
|
# productWelcome is shown on the welcome page of the application in
|
|
# the middle of the window, below the welcome text. It can be
|
|
# any size and proportion, and will be scaled to fit inside
|
|
# the window. Use 'welcomeExpandingLogo' to make it non-scaled.
|
|
# Recommended size is 320x150.
|
|
images:
|
|
productLogo: "logo.png"
|
|
productIcon: "logo.png"
|
|
productWelcome: "languages.png"
|
|
|
|
# The slideshow is displayed during execution steps (e.g. when the
|
|
# installer is actually writing to disk and doing other slow things).
|
|
slideshow: "show.qml"
|
|
|
|
# Colors for text and background components.
|
|
#
|
|
# - sidebarBackground is the background of the sidebar
|
|
# - sidebarText is the (foreground) text color
|
|
# - sidebarTextHighlight sets the background of the selected (current) step.
|
|
# Optional, and defaults to the application palette.
|
|
# - sidebarSelect is the text color of the selected step.
|
|
#
|
|
style:
|
|
sidebarBackground: "\"${sidebarbackground}"\"
|
|
sidebarText: "\"${sidebartext}"\"
|
|
sidebarTextSelect: "\"${sidebartextselect}"\"
|
|
sidebarTextHighlight: "\"${sidebartexthighlight}"\"" > $1/usr/share/calamares/branding/manjaro/branding.desc
|
|
}
|
|
|
|
configure_logind(){
|
|
msg2 "Configuring logind ..."
|
|
local conf=$1/etc/systemd/logind.conf
|
|
sed -i 's/#\(HandleSuspendKey=\)suspend/\1ignore/' "$conf"
|
|
sed -i 's/#\(HandleLidSwitch=\)suspend/\1ignore/' "$conf"
|
|
sed -i 's/#\(HandleHibernateKey=\)hibernate/\1ignore/' "$conf"
|
|
}
|
|
|
|
configure_journald(){
|
|
msg2 "Configuring journald ..."
|
|
local conf=$1/etc/systemd/journald.conf
|
|
sed -i 's/#\(Storage=\)auto/\1volatile/' "$conf"
|
|
}
|
|
|
|
configure_services(){
|
|
info "Configuring services"
|
|
use_apparmor="false"
|
|
apparmor_boot_args=""
|
|
for svc in ${enable_systemd[@]}; do
|
|
add_svc_sd "$1" "$svc"
|
|
[[ "$svc" == "apparmor" ]] && use_apparmor="true"
|
|
done
|
|
for svc in ${enable_systemd_live[@]}; do
|
|
add_svc_sd "$1" "$svc"
|
|
[[ "$svc" == "apparmor" ]] && use_apparmor="true"
|
|
done
|
|
|
|
if [[ ${use_apparmor} == 'true' ]]; then
|
|
msg2 "Enable apparmor kernel parameters"
|
|
apparmor_boot_args="'apparmor=1' 'security=apparmor'"
|
|
fi
|
|
|
|
info "Done configuring services"
|
|
}
|
|
|
|
write_live_session_conf(){
|
|
local path=$1${SYSCONFDIR}
|
|
[[ ! -d $path ]] && mkdir -p $path
|
|
local conf=$path/live.conf
|
|
msg2 "Writing %s" "${conf##*/}"
|
|
echo '# live session configuration' > ${conf}
|
|
echo '' >> ${conf}
|
|
echo '# autologin' >> ${conf}
|
|
echo "autologin=${autologin}" >> ${conf}
|
|
echo '' >> ${conf}
|
|
echo '# login shell' >> ${conf}
|
|
echo "login_shell=${login_shell}" >> ${conf}
|
|
echo '' >> ${conf}
|
|
echo '# live username' >> ${conf}
|
|
echo "username=${username}" >> ${conf}
|
|
echo '' >> ${conf}
|
|
echo '# live password' >> ${conf}
|
|
echo "password=${password}" >> ${conf}
|
|
echo '' >> ${conf}
|
|
echo '# live group membership' >> ${conf}
|
|
echo "addgroups='${addgroups}'" >> ${conf}
|
|
if [[ -n ${smb_workgroup} ]]; then
|
|
echo '' >> ${conf}
|
|
echo '# samba workgroup' >> ${conf}
|
|
echo "smb_workgroup=${smb_workgroup}" >> ${conf}
|
|
fi
|
|
}
|
|
|
|
configure_hosts(){
|
|
sed -e "s|localhost.localdomain|localhost.localdomain ${hostname}|" -i $1/etc/hosts
|
|
}
|
|
|
|
configure_system(){
|
|
configure_logind "$1"
|
|
configure_journald "$1"
|
|
|
|
# Prevent some services to be started in the livecd
|
|
echo 'File created by manjaro-tools. See systemd-update-done.service(8).' \
|
|
| tee "${path}/etc/.updated" >"${path}/var/.updated"
|
|
|
|
msg2 "Disable systemd-gpt-auto-generator"
|
|
ln -sf /dev/null "${path}/usr/lib/systemd/system-generators/systemd-gpt-auto-generator"
|
|
echo ${hostname} > $1/etc/hostname
|
|
}
|
|
|
|
configure_thus(){
|
|
msg2 "Configuring Thus ..."
|
|
source "$1/etc/mkinitcpio.d/${kernel}.preset"
|
|
local conf="$1/etc/thus.conf"
|
|
echo "[distribution]" > "$conf"
|
|
echo "DISTRIBUTION_NAME = \"${dist_name} Linux\"" >> "$conf"
|
|
echo "DISTRIBUTION_VERSION = \"${dist_release}\"" >> "$conf"
|
|
echo "SHORT_NAME = \"${dist_name}\"" >> "$conf"
|
|
echo "[install]" >> "$conf"
|
|
echo "LIVE_MEDIA_SOURCE = \"/run/miso/bootmnt/${iso_name}/${target_arch}/rootfs.sfs\"" >> "$conf"
|
|
echo "LIVE_MEDIA_DESKTOP = \"/run/miso/bootmnt/${iso_name}/${target_arch}/desktopfs.sfs\"" >> "$conf"
|
|
echo "LIVE_MEDIA_TYPE = \"squashfs\"" >> "$conf"
|
|
echo "LIVE_USER_NAME = \"${username}\"" >> "$conf"
|
|
echo "KERNEL = \"${kernel}\"" >> "$conf"
|
|
echo "VMLINUZ = \"$(echo ${ALL_kver} | sed s'|/boot/||')\"" >> "$conf"
|
|
echo "INITRAMFS = \"$(echo ${default_image} | sed s'|/boot/||')\"" >> "$conf"
|
|
echo "FALLBACK = \"$(echo ${fallback_image} | sed s'|/boot/||')\"" >> "$conf"
|
|
|
|
# if [[ -f $1/usr/share/applications/thus.desktop && -f $1/usr/bin/kdesu ]]; then
|
|
# sed -i -e 's|sudo|kdesu|g' $1/usr/share/applications/thus.desktop
|
|
# fi
|
|
}
|
|
|
|
configure_live_image(){
|
|
msg "Configuring [livefs]"
|
|
configure_hosts "$1"
|
|
configure_system "$1"
|
|
configure_services "$1"
|
|
configure_calamares "$1"
|
|
# [[ ${edition} == "sonar" ]] && configure_thus "$1"
|
|
write_live_session_conf "$1"
|
|
msg "Done configuring [livefs]"
|
|
}
|
|
|
|
make_repo(){
|
|
repo-add $1${mhwd_repo}/mhwd.db.tar.gz $1${mhwd_repo}/*pkg.tar*
|
|
}
|
|
|
|
copy_from_cache(){
|
|
local list="${tmp_dir}"/mhwd-cache.list
|
|
chroot-run \
|
|
-r "${mountargs_ro}" \
|
|
-w "${mountargs_rw}" \
|
|
-B "${build_mirror}/${target_branch}" \
|
|
"$1" \
|
|
pacman -v -Syw $2 --noconfirm || return 1
|
|
chroot-run \
|
|
-r "${mountargs_ro}" \
|
|
-w "${mountargs_rw}" \
|
|
-B "${build_mirror}/${target_branch}" \
|
|
"$1" \
|
|
pacman -v -Sp $2 --noconfirm > "$list"
|
|
sed -ni '/pkg.tar/p' "$list"
|
|
sed -i "s/.*\///" "$list"
|
|
|
|
msg2 "Copying mhwd package cache ..."
|
|
rsync -v --files-from="$list" /var/cache/pacman/pkg "$1${mhwd_repo}"
|
|
}
|
|
|
|
chroot_create(){
|
|
[[ "${1##*/}" == "rootfs" ]] && local flag="-L"
|
|
setarch "${target_arch}" \
|
|
mkchroot ${mkchroot_args[*]} ${flag} $@
|
|
}
|
|
|
|
clean_iso_root(){
|
|
msg2 "Deleting isoroot [%s] ..." "${1##*/}"
|
|
rm -rf --one-file-system "$1"
|
|
}
|
|
|
|
chroot_clean(){
|
|
msg "Cleaning up ..."
|
|
for image in "$1"/*fs; do
|
|
[[ -d ${image} ]] || continue
|
|
local name=${image##*/}
|
|
if [[ $name != "mhwdfs" ]]; then
|
|
msg2 "Deleting chroot [%s] (%s) ..." "$name" "${1##*/}"
|
|
lock 9 "${image}.lock" "Locking chroot '${image}'"
|
|
if [[ "$(stat -f -c %T "${image}")" == btrfs ]]; then
|
|
{ type -P btrfs && btrfs subvolume delete "${image}"; } #&> /dev/null
|
|
fi
|
|
rm -rf --one-file-system "${image}"
|
|
fi
|
|
done
|
|
exec 9>&-
|
|
rm -rf --one-file-system "$1"
|
|
}
|
|
|
|
clean_up_image(){
|
|
msg2 "Cleaning [%s]" "${1##*/}"
|
|
|
|
local path
|
|
if [[ ${1##*/} == 'mhwdfs' ]]; then
|
|
path=$1/var
|
|
if [[ -d $path/lib/mhwd ]]; then
|
|
mv $path/lib/mhwd $1 &> /dev/null
|
|
fi
|
|
if [[ -d $path ]]; then
|
|
find "$path" -mindepth 0 -delete &> /dev/null
|
|
fi
|
|
if [[ -d $1/mhwd ]]; then
|
|
mkdir -p $path/lib
|
|
mv $1/mhwd $path/lib &> /dev/null
|
|
fi
|
|
path=$1/etc
|
|
if [[ -d $path ]]; then
|
|
find "$path" -mindepth 0 -delete &> /dev/null
|
|
fi
|
|
else
|
|
[[ -f "$1/etc/locale.gen.bak" ]] && mv "$1/etc/locale.gen.bak" "$1/etc/locale.gen"
|
|
[[ -f "$1/etc/locale.conf.bak" ]] && mv "$1/etc/locale.conf.bak" "$1/etc/locale.conf"
|
|
path=$1/boot
|
|
if [[ -d "$path" ]]; then
|
|
find "$path" -name 'initramfs*.img' -delete &> /dev/null
|
|
fi
|
|
path=$1/var/lib/pacman/sync
|
|
if [[ -d $path ]]; then
|
|
find "$path" -type f -delete &> /dev/null
|
|
fi
|
|
path=$1/var/cache/pacman/pkg
|
|
if [[ -d $path ]]; then
|
|
find "$path" -type f -delete &> /dev/null
|
|
fi
|
|
path=$1/var/log
|
|
if [[ -d $path ]]; then
|
|
find "$path" -type f -delete &> /dev/null
|
|
fi
|
|
path=$1/var/tmp
|
|
if [[ -d $path ]]; then
|
|
find "$path" -mindepth 1 -delete &> /dev/null
|
|
fi
|
|
path=$1/tmp
|
|
if [[ -d $path ]]; then
|
|
find "$path" -mindepth 1 -delete &> /dev/null
|
|
fi
|
|
fi
|
|
find "$1" -name *.pacnew -name *.pacsave -name *.pacorig -delete
|
|
file=$1/boot/grub/grub.cfg
|
|
if [[ -f "$file" ]]; then
|
|
rm $file
|
|
fi
|
|
}
|