Rocky Linux byl vydán v nové stabilní verzi 9.4. Přehled novinek v poznámkách k vydání.
Dellu byla odcizena databáze zákazníků (jméno, adresa, seznam zakoupených produktů) [Customer Care, Bleeping Computer].
V lednu byl otevřen editor kódů Zed od autorů editoru Atom a Tree-sitter. Tenkrát běžel pouze na macOS. Byl napevno svázán s Metalem. Situace se ale postupně mění. V aktuálním příspěvku Kdy Zed na Linuxu? na blogu Zedu vývojáři popisují aktuální stav. Blíží se alfa verze.
O víkendu 11. a 12. května lze navštívit Maker Faire Prague, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.
Byl vydán Fedora Asahi Remix 40, tj. linuxová distribuce pro Apple Silicon vycházející z Fedora Linuxu 40.
Představena byla služba Raspberry Pi Connect usnadňující vzdálený grafický přístup k vašim Raspberry Pi z webového prohlížeče. Odkudkoli. Zdarma. Zatím v beta verzi. Detaily v dokumentaci.
Byla vydána verze R14.1.2 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5). Přehled novinek v poznámkách k vydání, podrobnosti v seznamu změn.
Dnešním dnem lze již také v Česku nakupovat na Google Store (telefony a sluchátka Google Pixel).
Apple představil (keynote) iPad Pro s čipem Apple M4, předělaný iPad Air ve dvou velikostech a nový Apple Pencil Pro.
Richard Biener oznámil vydání verze 14.1 (14.1.0) kolekce kompilátorů pro různé programovací jazyky GCC (GNU Compiler Collection). Jedná se o první stabilní verzi řady 14. Přehled změn, nových vlastností a oprav a aktualizovaná dokumentace na stránkách projektu. Některé zdrojové kódy, které bylo možné přeložit s předchozími verzemi GCC, bude nutné upravit.
Podíváme se blíže na skript uninstall.sh, který šíří Princeton Instruments ve svém Picam_SDK-v2.6.0.run.
#!/bin/sh # Default variables START_DIR=`dirname $0` START_DIR=`cd $START_DIR; pwd` echo "Start_DIR is" $START_DIR USR_LIB=/usr/lib64 USR_LOC_LIB=/usr/local/lib64 INSTALL_ROOT=$START_DIR PI_ROOT=`cd ..; pwd` PLEORA_ROOT=`cd $START_DIR/../../pleora; pwd` REMOVE_LINKS=yes INSTALL_DIR_OVERWRITE=yes # Initial screen clear echo -n "Remove Picam SDK installed in directory '$INSTALL_ROOT' (yes/no) ? " read ANSWER if [ ! "$ANSWER" = "yes" ]; then echo "Uninstall cancelled." exit; fi if [ ! -w $INSTALL_ROOT ]; then echo "You do not have write permissions to '$INSTALL_ROOT'." echo "Run installer as super user (root)." exit 1 fi echo "Removing software on $INSTALL_ROOT" if [ -d $PI_ROOT ]; then rm -rf $PI_ROOT fi #pleora removal if [ -d $PLEORA_ROOT ]; then rm -rf $PLEORA_ROOT fi if [ "$REMOVE_LINKS" = "yes" ]; then rm -rf $USR_LOC_LIB/libPv* rm -rf $USR_LOC_LIB/libEb* rm -rf $USR_LOC_LIB/libPt* rm -rf $USR_LOC_LIB/libEbuser* rm -rf $USR_LOC_LIB/liblog* rm -rf $USR_LOC_LIB/libapr* rm -rf $USR_LOC_LIB/libG* rm -rf $USR_LOC_LIB/liblog* rm -rf $USR_LOC_LIB/libM* # Picam references rm -rf /var/run/pits rm -rf $USR_LOC_LIB/libpi* rm -rf $USR_LOC_LIB/*.dat rm -rf /etc/ld.so.conf.d/picam.conf fi echo "Removal complete." echo "" echo ""
Skript se zachová třemi různými způsoby, dle toho odkud je zavolán. Před příkazy rm -rf
dáme echo
, abychom zjistili co se stane, ale bez následků.
Smaže co má:
# /opt/PrincetonInstruments/picam/ # ./uninstall.sh Remove Picam SDK installed in directory '/opt/PrincetonInstruments/picam' (yes/no) ? yes Removing software on /opt/PrincetonInstruments/picam rm -rf /opt/PrincetonInstruments rm -rf /opt/pleora
Zachrání nás inteligentní chování příkazu rm, jinak by nám smazal celý /:
rm: it is dangerous to operate recursively on `/' rm: use --no-preserve-root to override this failsafe
# cd /root # /opt/PrincetonInstruments/picam/uninstall.sh Remove Picam SDK installed in directory '/opt/PrincetonInstruments/picam' (yes/no) ? yes Removing software on /opt/PrincetonInstruments/picam rm -rf / rm -rf /opt/pleora
Smaže nám celý /home:
# cd /home/user # /opt/PrincetonInstruments/picam/uninstall.sh Remove Picam SDK installed in directory '/opt/PrincetonInstruments/picam' (yes/no) ? yes Removing software on /opt/PrincetonInstruments/picam rm -rf /home rm -rf /opt/pleora
Chyba je na následujících řádcích:
START_DIR=`cd $START_DIR; pwd` PI_ROOT=`cd ..; pwd`
Autor si neuvědomil, že spouští příkaz cd
v subshellu, takže pracovní adresář v nadřízeném shellu zůstane stejný.
Pokud by se skript alespoň před spuštěním rm -rf
zeptal, zda-li má smazat adresář XY, byla by větší šance, že si toho uživatel všimne.
V případě, že by se skript správně otestoval, tak by tato chyba neprobublala až k zákazníkovi.
Takže ponaučení na závěr. Nevěřte nikomu. Není od věci mrknou co je obsahem skriptu uninstall.sh, obzvláště pokud není příliš dlouhý. A do třetice. Zálohovat, zálohovat, zálohovat.
UPDATE: David ještě správně poukázal na řádek:
START_DIR=`dirname $0`
Skript by v případě zavolání, pomocí symbolického linku z jiného adresáře, také selhal.
Šlo by to vylepšit voláním:
START_DIR=$(readlink -f ${BASH_SOURCE[0]})
Tiskni Sdílej:
Pokud jsem něco neopomněl, tak by to mělo jít např. takto:
readlink -f ${BASH_SOURCE[0]}
readlink
by tě mohlo zajímat:
includepath="$( cd -P "$( dirname "$0" )" && pwd )"
Autor si neuvědomil, že spouští příkaz cd v subshellu, takže pracovní adresář v nadřízeném shellu zůstane stejný.Tak v tom problém teda opravdu není.
Autorovi nikdo z nás do hlavy samozřejmě nevidí, ale nevidíme tam ani Tobě, takže klidně svou myšlenku rozveď.
START_DIR=`dirname $0`Tohle prostě v $0 dostane cestu toho, jak byl program zavolanej...