2021 Updated Nemesis Base Modules
Posted: 09 Mar 2021, 23:24
Yes, that was the script I meant.
I answered to your PM.
I answered to your PM.
Code: Select all
perl-uri
003-lxde added :
Code: Select all
atkmm
cairomm
dunst
epdfview
file-roller
galculator
gconf
gcr
giblib
glibmm
gnome-keyring
gparted
gpicview
gtk-engine-murrine
gtk3
gtkmm3
13lock
iso-codes
json-glib
leafpad
libappindicator-gtk3
libcanberra
libcloudproviders
libdbusmenu-glib
libdbusmenu-gtk3
libfm
libfm-extra
libfm-gtk2
libgnome-keyring
libgtop
libindicator-gtk3
libnma
libnotify
libsigc++
libxss
lxappearance
lxappearance-obconf
lxde-common
lxhotkey
lxinput
lxlauncher
lxmenu-data
lxmusic
lxpanel
lxrandr
lxsession
lxtask
lxterminal
menu-cache
mobile-broadband-provider-info
network-manager-applet
nm-connection-editor
pangomm
pcmanfm
poppler
poppler-glib
rest
scrot
sound-theme-freedesktop
vte3
wayland-protocols
xcb-util-xrm
xmms2
This is a gift. With recent update, mousepad (0.5.5-2) was resizing the window unexpectedly, so I've been able to fixit by installing the previous version (0.5.4-1). Just download and downgrade:ncmprhnsbl wrote: ↑16 Mar 2021, 12:49added /etc/pacman.d/archive-mirror and archive-mirror-arch mirror links for "frozen" archive
Code: Select all
pacman -U mousepad-0.5.4-1-x86_64.pkg.tar.zst
Ok, fixed with the usual:
Code: Select all
$ glib-compile-schemas /usr/share/glib-2.0/schemas
yep, in march : https://github.com/archlinux/svntogit-p ... 5eb9b7203a
Code: Select all
login=root base_only copy2ram
Code: Select all
[[ $EUID -ne 0 ]] && su -c "$SC $*"
Code: Select all
[[ $EUID -eq 0 ]] || su -c "$0"; [[ $? -eq 1 ]] && exit
Code: Select all
#!/bin/bash
# UPnemesis-base (alias upbase)
# Updates NEMESIS base modules ( $PORTDIR/base )
#
# https://forum.porteus.org/viewtopic.php?p=85205#p85205
#
[[ $EUID -eq 0 ]] || su -c "$0" #FIXME [[ $? -ne 0 ]] && exit
confirm() { echo; tput bold; tput setaf 6; read -n1 -rsp "$1"; tput sgr0; echo -e "\n"; [[ $REPLY =~ ^[Yy]$ ]]; }
warn() { echo; echo "$(tput setaf 1) $1 $(tput sgr0)"; echo; };
[ ! $(grep -o 'base_only' /proc/cmdline) ] && warn "Please start Nemesis with **Always Fresh** boot parameters" && exit
mirrorlist-toggle ### Allow updating base
the_end() {
cd /tmp/updBASE || exit
[[ -z $(\ls -A LOCALES) ]] || dir2xzm LOCALES LOCALES.xzm
rm -r LOCALES "$outMOD" >/dev/null 2>&1
echo " All Done!"; echo "Your files are here: $PWD"; xdg-open . & disown ### FIXME // exo-open . // thunar .
unset pkgAdd pkgRem outMOD
eval "exit $?"
}
trap the_end SIGHUP SIGINT SIGTERM #SIGQUIT EXIT HUP INT TERM
### stat -c '%A %a %G %g %n' $(find ./usr/bin -mindepth 1 -maxdepth 1 '(' -type f -not -perm 0755 ')') -o '(' -type d -not -perm 0755 ')' ### -o '(' -type f -not -perm 0644 ')') #FIXME
fixPERMS() {
chmod -f 711 "$1"/var/db/sudo/ >/dev/null 2>&1
chmod -f 700 "$1"/var/db/sudo/lectured/ "$1"/var/lib/NetworkManager/ "$1"/etc/NetworkManager/system-connections/ >/dev/null 2>&1
chmod -f 750 "$1"/root "$1"/etc/sudoers.d/ "$1"/etc/openvpn/{client,server}/ "$1"/{usr/share,etc}/polkit-1/rules.d/ >/dev/null 2>&1
chmod -f 755 "$1"/etc "$1"/etc/local.d "$1"/usr "$1"/usr/local "$1"/usr/local/bin >/dev/null 2>&1
chmod -f 555 "$1"/{proc,sys}/ "$1"/srv/ftp >/dev/null 2>&1
chmod -f 775 "$1"/var/games >/dev/null 2>&1
chmod -f 1777 "$1"/var/{spool/mail,tmp} >/dev/null 2>&1
find "$1"/usr/share/icons -type d -exec chmod 755 {} + >/dev/null 2>&1
find "$1"/usr/share/icons -type f -exec chmod 644 {} + >/dev/null 2>&1
}
### Bypass adwaita-icon-theme
remADWAITA() {
[ -d "$1"/usr/share/icons/Adwaita ] || return
rm "$1"/usr/share/mime/packages/freedesktop.org.xml "$1"/usr/lib/gtk-2.0/2.10.0/engines/libadwaita.so >/dev/null 2>&1
rm -r "$1"/usr/share/icons/{Adwaita,Adwaita-dark,HighContrast} >/dev/null 2>&1 #FIXME
}
### [[ $? = 1 ]]
prepareSYS() {
fixPERMS ""
### WORKAROUND to --> "Please ensure you have a connection and try again. Exit code: 1" /// caused by /etc/local.d/firewall.start
setup-pman || { pacman-db-upgrade; haveged; pacman-key --init; pacman-key --populate archlinux artix; pkill haveged; update-ca-trust; pacman -Sy; }
[[ $(pacman -Qu | wc -l) -eq 0 ]] || pacman -Syyu --overwrite '*' ### --ignore '*' >/dev/null
mkdir /tmp/updBASE || exit ### avoid iterations
clear; echo " Main system: updated "; echo #FIXME
}
patchCORE() {
# mount -t proc proc proc/
# mount -t sysfs sys sys/
# mount --bind /dev dev/
# mount -t devpts pts dev/pts/ rw,mode=0620,gid=5 0 0
# umount -R "$1"/{proc,sys,dev}
#for mp in proc sys dev dev/pts run; do mount --bind /$mp /tmp/"$outMOD"/$mp; done &
#chroot /tmp/"$outMOD" /bin/bash
### Pre/Post transaction hooks
# *** WARNING: USE THEM AT YOUR OWN RISK ***
# THESE ARE SOME TASKS ('HOOKS') EXECUTED AFTER PACMAN FINISHES UPDATING PACKAGES
# YOU CAN FIND THESE LOCATED AT: /usr/share/libalpm/hooks/
# THEY NEED TO BE EXECUTED IN REAL ENVIRONMENT, SO YOU NEED TO chroot PRIOR TO USE THEM
# MOST OF THEM WILL FAIL UNLESS YOU RECREATE A INSTALLED SYSTEM WITH THE NEEDED MOUNTPOINTS
# *** YOU'VE BEEN WARNED ***
pacman-db-upgrade -r /tmp/updBASE/"$outMOD"
sysusers --root=/tmp/updBASE/"$outMOD"/ ### emulates '20-sysusers.hook' execution in our target root #FIXME
tmpfiles --root=/tmp/updBASE/"$outMOD"/ --create #FIXME
# usr/bin/update-ca-trust
# usr/bin/gio-querymodules usr/lib/gio/modules
# usr/bin/gtk-query-immodules-3.0 --update-cache
# usr/bin/gdk-pixbuf-query-loaders --update-cache
# usr/share/libalpm/scripts/gtk-update-icon-cache
# glib-compile-schemas usr/share/glib-2.0/schemas
# usr/share/libalpm/scripts/openrc-hook sysctl
# usr/share/libalpm/scripts/openrc-hook reexec
# usr/share/libalpm/scripts/dconf-update
# usr/share/libalpm/scripts/openrc-hook reload dbus
# umount -R {proc,sys,dev} ### WARNING
#for mp in proc sys dev dev/pts; do mount --bind /$mp /$mp; done &
return
}
updateBASE() {
[ -d /tmp/updBASE ] || prepareSYS
cd /tmp/updBASE || exit
[ -d LOCALES ] || mkdir -p LOCALES
PS3=$'\n'$'\e[00;36mPlease, select base module to update or exit (1-8): \e[0m'
select outMOD in 003-lxde 003-mate 003-xfce 002-xtra 002-gui 05-devel 001-core end #FIXME
do
pkgAdd=""
pkgRem=""
case $outMOD in
*lxde) pkgAdd=""; pkgRem="";; ### --overwrite '*' #FIXME
*mate) pkgAdd=""; pkgRem="";; ### --overwrite '*' #FIXME
*xfce) pkgAdd=""; pkgRem="";; ### --overwrite '*' #FIXME
*xtra) pkgAdd=""; pkgRem="";; ### --overwrite '*' #FIXME
*gui) pkgAdd=""; pkgRem="";; ### --overwrite '*' #FIXME
*devel) pkgAdd=""; pkgRem="";; ### --overwrite '*' #FIXME
*core) pkgAdd=""; pkgRem="";; ### --overwrite '*';; ### --ignore '*' #FIXME
end*) the_end;;
esac
#outMOD="$(basename "$(\ls -1 "$PORTDIR"/base/*$outMOD*)" | cut -d- -f-2)" ### \ls escapes user alias ;) #FIXME
break
done
### rsync -a /mnt/live/memory/images/$outMOD*.xzm/ "$outMOD" ### unsquash uses parallel processing and seems to be faster #FIXME
### -b, --dbpath <path> set an alternate database location --cachedir "/var/cache/pacman/pkg" #FIXME
unsquashfs -f -d "$outMOD" /mnt/live/memory/copy2ram/"$outMOD"*
cp -au --parents /var/lib/pacman/{sync/,local/ALPM_DB_VERSION} "$outMOD"
if [[ $(pacman -Qur "$outMOD" | wc -l) -eq 0 ]]; then warn "$outMOD is up to date"; rm -r "$outMOD"; return; fi
pacman -Qqnr "$outMOD" | pacman -Sddur "$outMOD" --overwrite '*' --noconfirm --needed - ### --ignore '*'
### pacman -r "$outMOD" --cachedir="/var/cache/pacman/pkg" -U /var/cache/pacman/pkg/*.{zst,xz}
### Add / Remove packages --> Useful i.e. to avoid duplicate database entries
[[ -z $pkgAdd ]] || eval "pacman -Sddr $outMOD $pkgAdd"
[[ -z $pkgRem ]] || eval "pacman -Rddr $outMOD $pkgRem"
#pacman -Qqmr $outMOD | pacman -Rddr $outMOD - ### Qq existing Qqn native Qqm foreign (aur,etc.), Qqt unrequired Qqe explicit QQd dependencies // pacman -Qet explicitly installed and not required as dependencies
cd /tmp/updBASE/"$outMOD" || exit
### ADDED Get usr locale environment from cheatcodes and $LANG env variable
KMAP=$(grep -Eo " kmap=[^ ]+" /proc/cmdline | cut -d= -f2)
[[ -z $LANG ]] && LANG="$KMAP" || LANG="${LANG%.*}"
[[ -z $LANG ]] && warn "Couldn't set your locale config" ### get_locale
### find usr/share/locale \( -name 'e[ns]_[EU]S' -o -name 'e[ns]' -o -iname 'locale.alias' \) -exec cp -au --parents {} /tmp/LOCALES \;
find usr/share/locale \( -name "en" -o -name "en_US" -o -name "$KMAP" -o -name "$LANG" -o -iname 'locale.alias' \) -exec cp -au --parents {} /tmp/updBASE/LOCALES \;
unset KMAP
### strip out ~ 270 MB from core stuff
[[ "$outMOD" = "001-core" ]] && {
#patchCORE ### OMIT BY DEFAULT chgrp root etc/shadow*
rm -r usr/lib/{libasan,libgfortran,libgo,libtsan}.so* usr/lib/*.a usr/bin/js78* lib/pkgconfig usr/share/i18n/charmaps/*.gz >/dev/null 2>&1 #FIXME libgomp, seems to be necessary for ffmpeg
}
rm -r usr/share/{doc,gir-1.0,gtk-doc,info,licenses,locale,man} usr/include/* usr/lib/systemd/* tmp/* var/lib/pacman/{sync/,local/ALPM_DB_VERSION} >/dev/null 2>&1
cd /tmp/updBASE || exit
fixPERMS "$outMOD"
[ -d "$outMOD"/home/guest ] && chown -R 1000.1000 "$outMOD"/home/guest >/dev/null 2>&1
#confirm "Press any key when ready "
mv "$outMOD"/var/log/pacman.log "$outMOD"-pacman.log >/dev/null 2>&1
dir2xzm "$outMOD" "$outMOD-$(date '+%Y%m%d').xzm"
rm -r "$outMOD"
}
# Main loop
while confirm "Shall we update [y/*]? "; do updateBASE; done
warn " Aborted. Exit code: $?"
Code: Select all
PS3=$'\n'$'\e[00;36mPlease, select base module to update or exit (1-6): \e[0m'
select outMOD in 003-lxde 003-mate 003-xfce 002-xtra 002-gui 05-devel 001-core end #FIXME
do
Code: Select all
#!/usr/bin/env bash
# ------------------------------------------------------
# update-base
# Updates NEMESIS base modules ( $PORTDIR/base )
# Author: M. Eerie jul-2020-2021
# https://forum.porteus.org/viewtopic.php?p=85455#p85455
# ======================================================
[[ $EUID -eq 0 ]] || su -c "$0"
confirm() { echo; tput setaf 6; read -n1 -rsp "$1"; tput sgr0; echo -e "\n"; [[ $REPLY =~ ^[Yy]$ ]]; }
warn() { echo; tput bold; for i in {1,0,1,0,1}; do echo "$(tput sc)$(tput setaf $i) $1 $(tput rc)$(tput kri)"; sleep 0.1; done; tput sgr0; echo; }; notify() { echo; echo "$(tput setaf 3) $1 $(tput sgr0)"; echo; };
[ ! "$(grep -o 'base_only' /proc/cmdline)" ] && warn "Please start Nemesis with **Always Fresh** boot parameters" && exit
mirrorlist-toggle ### Allow updating base modules
the_end() {
cd /tmp/updBASE || exit
[[ -z $(\ls -A LOCALES) ]] || dir2xzm LOCALES LOCALES.xzm
rm -r LOCALES "$bMOD" >/dev/null 2>&1
echo " All Done!"; echo "Your files are here: $PWD"; xdg-open . & disown ### exo-open .
unset KMAP LANG pkgAdd pkgRem outdated dBX bMOD
eval "exit $?"
}
abort() {
warn "Aborted Exit code: $?"
}
trap abort SIGHUP SIGINT SIGTERM #SIGQUIT EXIT HUP INT TERM
##
##
##
####### ####### ### PREPARATION
##
##
##
### Canonicalize Permissions. Try to put system permissions truncated by rootcopy, etc. into standard values
### stat -c '%A %a %G %g %n' $(find $1/{etc,usr} '(' -type f -not -perm 0644 ')' -o '(' -type d -not -perm 0755 ')')
fixPERMS() {
[ -z "$1" ] || { warn "Resetting permissions on: $1" && confirm "Press any key when ready "; }
chmod -f 711 "$1"/var/db/sudo/ >/dev/null 2>&1
chmod -f 700 "$1"/var/db/sudo/lectured/ "$1"/var/lib/NetworkManager/ "$1"/etc/NetworkManager/system-connections/ >/dev/null 2>&1
chmod -f 750 "$1"/root "$1"/etc/sudoers.d/ "$1"/etc/openvpn/{client,server}/ "$1"/{usr/share,etc}/polkit-1/rules.d/ >/dev/null 2>&1
chmod -f 755 "$1"/etc "$1"/etc/local.d "$1"/usr "$1"/usr/local "$1"/usr/local/bin >/dev/null 2>&1
chmod -f 555 "$1"/{proc,sys}/ "$1"/srv/ftp >/dev/null 2>&1
chmod -f 775 "$1"/var/games >/dev/null 2>&1
chmod -f 1777 "$1"/var/{spool/mail,tmp} >/dev/null 2>&1
find "$1"/usr/share/icons -type d -exec chmod 755 {} + >/dev/null 2>&1
find "$1"/usr/share/icons -type f -exec chmod 644 {} + >/dev/null 2>&1
find "$1"/usr/share/icons -type d -exec chown 0.0 {} + >/dev/null 2>&1
find "$1"/usr/share/icons -type f -exec chown 0.0 {} + >/dev/null 2>&1
chown -R $USER:$USER "$1"$HOME >/dev/null 2>&1
sed -i 's/wheel/0/' "$1"/usr/share/polkit-1/rules.d/50-default.rules >/dev/null 2>&1 ### FIX root/admin password issue
}
### Bypass adwaita-icon-theme (This could be deprecated by now)
remADWAITA() {
[ -d "$1"/usr/share/icons/Adwaita ] || return
rm "$1"/usr/share/mime/packages/freedesktop.org.xml "$1"/usr/lib/gtk-2.0/2.10.0/engines/libadwaita.so >/dev/null 2>&1
rm -r "$1"/usr/share/icons/{Adwaita,Adwaita-dark,HighContrast} >/dev/null 2>&1 #FIXME
}
prepareSYS() {
fixPERMS ""
### WORKAROUND to --> "Please ensure you have a connection and try again. Exit code: 1" /// caused by /etc/local.d/firewall.start
setup-pman || { pacman-db-upgrade; haveged; pacman-key --init; pacman-key --populate archlinux artix; pkill haveged; update-ca-trust; pacman -Sy; }
[[ $(pacman -Qu | wc -l) -eq 0 ]] || pacman -Syu --overwrite '*' ### --ignore '*' >/dev/null
mkdir -p /tmp/updBASE/LOCALES || exit ### avoid iterations
clear; echo " Main system: updated "; echo
}
##
##
##
####### ####### ### UPDATE PACKAGES
##
##
##
updateBASE() {
clear
[ -d /tmp/updBASE ] || prepareSYS
cd /tmp/updBASE || exit
[ -d LOCALES ] || mkdir -p LOCALES
PS3=$'\n'$'\e[00;36mPlease, select base module to update or exit (1-9): \e[0m'
select bMOD in 003-lxde 003-lxqt 003-mate 003-xfce 002-xtra 002-gui 05-devel 001-core end
do
pkgAdd=""
pkgRem=""
case $bMOD in
*lxde|*lxqt|*xfce|*mate) pkgAdd=""; pkgRem="";;
*xtra) pkgAdd=""; pkgRem="";;
*gui) pkgAdd=""; pkgRem="";;
*devel) pkgAdd=""; pkgRem="";;
*core) pkgAdd=""; pkgRem="";; ### --ignore '*'
end*) the_end;;
esac
break
done
### rsync -a /mnt/live/memory/images/$bMOD*.xzm/ "$bMOD" ### unsquash uses parallel processing and seems to be faster
unsquashfs -f -d "$bMOD" "$PORTDIR/base/$bMOD"* || exit
dBX="$(pacman-conf DBPath)"; pCache="$(pacman-conf CacheDir)"
ln -s "$dBX"sync "$bMOD$dBX" && ln -s "$dBX"local/ALPM_DB_VERSION "$bMOD$dBX"local
outdated="$(pacman -Qqur $bMOD)"
[[ -z "$outdated" ]] && { notify "$bMOD is up to date"; rm -r "$bMOD"; return; }
### Firstly remove explicit packages. Should you get conflicting packages OR duplicate database entries (coming from two different base modules) you can get rid of them here)
[[ -z "$pkgRem" ]] || eval "pacman -Rddr $bMOD $pkgRem"
if [[ "$bMOD" != 001-core ]]; then
pacman -b "$bMOD$dBX" --overwrite '*' --noconfirm --needed -Sddr "$bMOD" - <<<"$outdated"
else
### We are FORCING partial upgrades... <-- https://wiki.archlinux.org/title/System_maintenance#Partial_upgrades_are_unsupported
for mp in proc sys dev; do mount -B /$mp "$bMOD"/$mp/; done &
fakeroot -- pacman --overwrite '*' --noconfirm -Sddur "$bMOD" - <<<"$outdated" ### fakechroot fakeroot -- pacman ...
umount -R "$bMOD"/{proc,sys,dev} >/dev/null 2>&1
### Should any of the above cannot be dismounted, the next line will find the culprit:
### sudo ls -l /proc/*/root | grep "$bMOD"
### Alternate method to avoid scriptlets (post update hooks) NOT RECOMMENDED
### find "$pCache" -iname "*.xz" -o -iname "*.zst" -exec tar -xvpf {} -C "$bMOD" 2>/dev/null 2>&1 \;
### rm $bMOD/{.PKGINFO,.INSTALL,.MTREE,.BUILDINFO}
### pacman --dbonly -b $bMOD$dBX -Sdd --overwrite '*' --noconfirm - <<<"$outdated"
### \ls /usr/share/libalpm/hooks
fi
### Add user-resquested packages ***without dependencies***
[[ -z "$pkgAdd" ]] || eval "pacman -Sddr $bMOD $pkgAdd"
### Qq existing | Qqn native | Qqm foreign (aur,etc.) | Qqe explicit | Qqd dependencies | Qqt unrequired | -Qet explicitly installed and not required as dependencies
###TODO Process alien/orphan packages
# trizens="$(pacman -Qqmr $bMOD)"
# orphan=$(pacman -Qqdtr $bMOD)
# if [[ -n "$orphan" ]]; then warn "There seems to be orphan/foreign packages in $bMOD";
# while warn "Would you like to remove them? [y/*] "
# do
###TODO Prompt the user which ones to remove
# pacman -Rddr $bMOD - <<<"$orphan"
# done
# return
# fi
##
##
##
####### ####### ### LOCALES
##
##
##
cd /tmp/updBASE/"$bMOD" || exit
### Get usr locale environment from cheatcodes and $LANG env variable
KMAP=$(grep -Eo " kmap=[^ ]+" /proc/cmdline | cut -d= -f2)
[[ -z $LANG ]] && LANG="$KMAP" || LANG="${LANG%.*}"
[[ -z $LANG ]] && warn "Couldn't set your locale config" ### get_locale
find usr/share/locale \( -name "en" -o -name "en_US" -o -name "$KMAP" -o -name "$LANG" -o -iname 'locale.alias' \) -exec cp -au --parents {} /tmp/updBASE/LOCALES \;
unset KMAP
##
##
##
####### ####### ### STRIP & BUILD
##
##
##
### FIXME Bypass 05-devel from being stripped
[[ "$bMOD" = "05-devel" ]] || {
rm -r usr/lib/{libasan,libtsan,libgfortran,libgo}.so* usr/share/{gir-1.0,info,licenses,man} usr/lib/*.a usr/bin/js78* lib/pkgconfig usr/include/* >/dev/null 2>&1 #libgomp, is needed by ffmpeg
}
rm -r usr/share/{doc,gtk-doc,locale} usr/share/i18n/charmaps/*.gz usr/lib/systemd/* tmp/* >/dev/null 2>&1
rm var/lib/pacman/{sync,local/ALPM_DB_VERSION} >/dev/null 2>&1
cd /tmp/updBASE || exit
fixPERMS "$bMOD"
#confirm "Press any key when ready "
mv "$bMOD"/var/log/pacman.log "$bMOD"-pacman.log >/dev/null 2>&1
dir2xzm "$bMOD" "$bMOD-$(date '+%Y%m%d').xzm"
rm -r "$bMOD"
}
# Main loop
while confirm "Shall we update [y/*]? "; do updateBASE; done
### tput flash
the_end
# 8 8 8""""8 8""""8 8""""8 ""8"" 8"""" 8""""8 8""""8 8""""8 8""""
# 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
# 8e 8 8eeee8 8e 8 8eeee8 8e 8eeee 8eeee8ee 8eeee8 8eeeee 8eeee
# 88 8 88 88 8 88 8 88 88 eeee 88 8 88 8 88 88
# 88 8 88 88 8 88 8 88 88 88 8 88 8 e 88 88
# 88ee8 88 88eee8 88 8 88 88eee 88eeeee8 88 8 8eee88 88eee
I will try it out later today and I will let you know what happen.M. Eerie wrote: ↑10 Nov 2021, 12:52Reworked script. Fakeroot included. Still needs fine-tuning to deal with root account.
Code: Select all
#!/usr/bin/env bash # ------------------------------------------------------ # update-base # Updates NEMESIS base modules ( $PORTDIR/base ) # Author: M. Eerie jul-2020-2021 # https://forum.porteus.org/viewtopic.php?p=85455#p85455 # ====================================================== [[ $EUID -eq 0 ]] || su -c "$0" confirm() { echo; tput setaf 6; read -n1 -rsp "$1"; tput sgr0; echo -e "\n"; [[ $REPLY =~ ^[Yy]$ ]]; } warn() { echo; echo "$(tput setaf 1) $(tput bold) $(tput blink) $1 $(tput sgr0)"; echo; }; notify() { echo; echo "$(tput setaf 3) $1 $(tput sgr0)"; echo; }; [ ! $(grep -o 'base_only' /proc/cmdline) ] && warn "Please start Nemesis with **Always Fresh** boot parameters" && exit mirrorlist-toggle ### Allow updating base modules the_end() { cd /tmp/updBASE || exit [[ -z $(\ls -A LOCALES) ]] || dir2xzm LOCALES LOCALES.xzm rm -r LOCALES "$bMOD" >/dev/null 2>&1 echo " All Done!"; echo "Your files are here: $PWD"; xdg-open . & disown ### exo-open . unset pkgAdd pkgRem outdated dBX bMOD eval "exit $?" } trap the_end SIGHUP SIGINT SIGTERM ### stat -c '%A %a %G %g %n' $(find ./usr/bin -mindepth 1 -maxdepth 1 '(' -type f -not -perm 0755 ')') -o '(' -type d -not -perm 0755 ')' ### -o '(' -type f -not -perm 0644 ')') #TODO DEBUG fixPERMS() { # warn "Resetting permissions on: $1"; confirm "Press any key when ready " chmod -f 711 "$1"/var/db/sudo/ >/dev/null 2>&1 chmod -f 700 "$1"/var/db/sudo/lectured/ "$1"/var/lib/NetworkManager/ "$1"/etc/NetworkManager/system-connections/ >/dev/null 2>&1 chmod -f 750 "$1"/root "$1"/etc/sudoers.d/ "$1"/etc/openvpn/{client,server}/ "$1"/{usr/share,etc}/polkit-1/rules.d/ >/dev/null 2>&1 chmod -f 755 "$1"/etc "$1"/etc/local.d "$1"/usr "$1"/usr/local "$1"/usr/local/bin >/dev/null 2>&1 chmod -f 555 "$1"/{proc,sys}/ "$1"/srv/ftp >/dev/null 2>&1 chmod -f 775 "$1"/var/games >/dev/null 2>&1 chmod -f 1777 "$1"/var/{spool/mail,tmp} >/dev/null 2>&1 find "$1"/usr/share/icons -type d -exec chmod 755 {} + >/dev/null 2>&1 find "$1"/usr/share/icons -type f -exec chmod 644 {} + >/dev/null 2>&1 find "$1"/usr/share/icons -type d -exec chown 0.0 {} + >/dev/null 2>&1 find "$1"/usr/share/icons -type f -exec chown 0.0 {} + >/dev/null 2>&1 [ -d "$1"/home/guest ] && chown -R 1000.1000 "$1"/home/guest >/dev/null 2>&1 } ### Bypass adwaita-icon-theme remADWAITA() { [ -d "$1"/usr/share/icons/Adwaita ] || return rm "$1"/usr/share/mime/packages/freedesktop.org.xml "$1"/usr/lib/gtk-2.0/2.10.0/engines/libadwaita.so >/dev/null 2>&1 rm -r "$1"/usr/share/icons/{Adwaita,Adwaita-dark,HighContrast} >/dev/null 2>&1 #FIXME } prepareSYS() { fixPERMS "" ### WORKAROUND to --> "Please ensure you have a connection and try again. Exit code: 1" /// caused by /etc/local.d/firewall.start setup-pman || { pacman-db-upgrade; haveged; pacman-key --init; pacman-key --populate archlinux artix; pkill haveged; update-ca-trust; pacman -Sy; } [[ $(pacman -Qu | wc -l) -eq 0 ]] || pacman -Syu --overwrite '*' ### --ignore '*' >/dev/null mkdir /tmp/updBASE || exit ### avoid iterations clear; echo " Main system: updated "; echo } updateBASE() { clear [ -d /tmp/updBASE ] || prepareSYS cd /tmp/updBASE || exit [ -d LOCALES ] || mkdir -p LOCALES PS3=$'\n'$'\e[00;36mPlease, select base module to update or exit (1-8): \e[0m' select bMOD in 003-lxde 003-mate 003-xfce 002-xtra 002-gui 05-devel 001-core end #FIXME do pkgAdd="" pkgRem="" case $bMOD in *lxde|*xfce|*mate) pkgAdd=""; pkgRem="";; *xtra) pkgAdd=""; pkgRem="";; *gui) pkgAdd=""; pkgRem="xf86-input-void";; *devel) pkgAdd=""; pkgRem="";; *core) pkgAdd=""; pkgRem="";; ### --ignore '*' end*) the_end;; esac break done ### rsync -a /mnt/live/memory/images/$bMOD*.xzm/ "$bMOD" ### unsquash uses parallel processing and seems to be faster unsquashfs -f -d "$bMOD" "/mnt/live/memory/copy2ram/$bMOD"* dBX="$(pacman-conf DBPath)" ###;cCH="$(pacman-conf CacheDir)" ln -s "$dBX"sync "$bMOD$dBX" && ln -s "$dBX"local/ALPM_DB_VERSION "$bMOD$dBX"local ### Firstly, remove conflicting packages (also avoid duplicate database entries) [[ -z "$pkgRem" ]] || eval "pacman -Rddr $bMOD $pkgRem" outdated="$(pacman -Qqur $bMOD)" if [[ -z "$outdated" ]]; then notify "$bMOD is up to date"; rm -r "$bMOD"; return; fi if [[ "$bMOD" != 001-core ]]; then pacman -Sddur "$bMOD" --overwrite '*' --noconfirm --needed - <<<"$outdated" ### Add user-resquested packages ***without dependencies*** [[ -z "$pkgAdd" ]] || eval "pacman -Sddur $bMOD $pkgAdd" else for mp in proc sys dev; do mount -B /$mp "$bMOD"/$mp/; done & fakeroot -- "$bMOD"/usr/bin/pacman -Sddu --overwrite '*' --noconfirm --noscriptlet - <<<"$outdated" #FIXME omit scriptlets to prevent permission issues ###chroot "$bMOD" /bin/bash; pacman -Sddu --overwrite '*' --noconfirm - <<<"$outdated"; ###exit from chroot must be done manually #TODO switch_root ??? umount -R "$bMOD"/{proc,sys,dev} >/dev/null 2>&1 fi ###TODO Process orphan packages # orphan="$(pacman -Qqmr $bMOD)" # if [[ ! -z "$orphan" ]]; then warn "There seems to be orphan/foreign packages in $bMOD"; # while warn "Would you like to remove them? [y/*] " # do ###TODO Prompt the user which ones to remove # pacman -Rddr $bMOD - <<<"$orphan" # done # return # fi ### Save locales cd /tmp/updBASE/"$bMOD" || exit ### Get usr locale environment from cheatcodes and $LANG env variable KMAP=$(grep -Eo " kmap=[^ ]+" /proc/cmdline | cut -d= -f2) [[ -z $LANG ]] && LANG="$KMAP" || LANG="${LANG%.*}" [[ -z $LANG ]] && warn "Couldn't set your locale config" ### get_locale find usr/share/locale \( -name "en" -o -name "en_US" -o -name "$KMAP" -o -name "$LANG" -o -iname 'locale.alias' \) -exec cp -au --parents {} /tmp/updBASE/LOCALES \; unset KMAP ### strip out ~ 270 MB from core stuff [[ "$bMOD" = "001-core" ]] && { #patchCORE ### TODO execute scriptlets? rm -r usr/lib/{libasan,libgfortran,libgo,libtsan}.so* usr/lib/*.a usr/bin/js78* lib/pkgconfig usr/share/i18n/charmaps/*.gz >/dev/null 2>&1 #FIXME libgomp, seems to be necessary for ffmpeg } rm -r usr/share/{doc,gir-1.0,gtk-doc,info,licenses,locale,man} usr/include/* usr/lib/systemd/* tmp/* >/dev/null 2>&1 rm var/lib/pacman/{sync,local/ALPM_DB_VERSION} >/dev/null 2>&1 cd /tmp/updBASE || exit fixPERMS "$bMOD" #confirm "Press any key when ready " mv "$bMOD"/var/log/pacman.log "$bMOD"-pacman.log >/dev/null 2>&1 dir2xzm "$bMOD" "$bMOD-$(date '+%Y%m%d').xzm" rm -r "$bMOD" } # Main loop while confirm "Shall we update [y/*]? "; do updateBASE; done warn " Aborted. Exit code: $?"