mirror of
git://slackware.nl/current.git
synced 2024-12-28 09:59:53 +01:00
752db33dbe
a/grep-3.11-x86_64-1.txz: Upgraded. a/pkgtools-15.1-noarch-5.txz: Rebuilt. installpkg, removepkg, upgradepkg: make all of these scripts accept either --dry-run or --warn for consistency. Thanks to Brent Spillner. d/poke-3.2-x86_64-1.txz: Upgraded. kde/akonadi-23.04.1-x86_64-1.txz: Upgraded. kde/akonadi-calendar-23.04.1-x86_64-1.txz: Upgraded. kde/akonadi-calendar-tools-23.04.1-x86_64-1.txz: Upgraded. kde/akonadi-contacts-23.04.1-x86_64-1.txz: Upgraded. kde/akonadi-import-wizard-23.04.1-x86_64-1.txz: Upgraded. kde/akonadi-mime-23.04.1-x86_64-1.txz: Upgraded. kde/akonadi-notes-23.04.1-x86_64-1.txz: Upgraded. kde/akonadi-search-23.04.1-x86_64-1.txz: Upgraded. kde/akonadiconsole-23.04.1-x86_64-1.txz: Upgraded. kde/akregator-23.04.1-x86_64-1.txz: Upgraded. kde/alligator-23.04.1-x86_64-1.txz: Upgraded. kde/analitza-23.04.1-x86_64-1.txz: Upgraded. kde/ark-23.04.1-x86_64-1.txz: Upgraded. kde/artikulate-23.04.1-x86_64-1.txz: Upgraded. kde/attica-5.106.0-x86_64-1.txz: Upgraded. kde/audiocd-kio-23.04.1-x86_64-1.txz: Upgraded. kde/baloo-5.106.0-x86_64-1.txz: Upgraded. kde/baloo-widgets-23.04.1-x86_64-1.txz: Upgraded. kde/blinken-23.04.1-x86_64-1.txz: Upgraded. kde/bluez-qt-5.106.0-x86_64-1.txz: Upgraded. kde/bomber-23.04.1-x86_64-1.txz: Upgraded. kde/bovo-23.04.1-x86_64-1.txz: Upgraded. kde/breeze-icons-5.106.0-noarch-1.txz: Upgraded. kde/calendarsupport-23.04.1-x86_64-1.txz: Upgraded. kde/cantor-23.04.1-x86_64-1.txz: Upgraded. kde/cervisia-23.04.1-x86_64-1.txz: Upgraded. kde/dolphin-23.04.1-x86_64-1.txz: Upgraded. kde/dolphin-plugins-23.04.1-x86_64-1.txz: Upgraded. kde/dragon-23.04.1-x86_64-1.txz: Upgraded. kde/elisa-23.04.1-x86_64-1.txz: Upgraded. kde/eventviews-23.04.1-x86_64-1.txz: Upgraded. kde/extra-cmake-modules-5.106.0-x86_64-1.txz: Upgraded. kde/falkon-23.04.1-x86_64-1.txz: Upgraded. kde/ffmpegthumbs-23.04.1-x86_64-1.txz: Upgraded. kde/filelight-23.04.1-x86_64-1.txz: Upgraded. kde/frameworkintegration-5.106.0-x86_64-1.txz: Upgraded. kde/ghostwriter-23.04.1-x86_64-1.txz: Upgraded. kde/granatier-23.04.1-x86_64-1.txz: Upgraded. kde/grantlee-editor-23.04.1-x86_64-1.txz: Upgraded. kde/grantleetheme-23.04.1-x86_64-1.txz: Upgraded. kde/gwenview-23.04.1-x86_64-1.txz: Upgraded. kde/incidenceeditor-23.04.1-x86_64-1.txz: Upgraded. kde/itinerary-23.04.1-x86_64-1.txz: Upgraded. kde/juk-23.04.1-x86_64-1.txz: Upgraded. kde/k3b-23.04.1-x86_64-1.txz: Upgraded. kde/kactivities-5.106.0-x86_64-1.txz: Upgraded. kde/kactivities-stats-5.106.0-x86_64-1.txz: Upgraded. kde/kaddressbook-23.04.1-x86_64-1.txz: Upgraded. kde/kalarm-23.04.1-x86_64-1.txz: Upgraded. kde/kalendar-23.04.1-x86_64-1.txz: Upgraded. kde/kalgebra-23.04.1-x86_64-1.txz: Upgraded. kde/kalzium-23.04.1-x86_64-1.txz: Upgraded. kde/kamera-23.04.1-x86_64-1.txz: Upgraded. kde/kamoso-23.04.1-x86_64-1.txz: Upgraded. kde/kanagram-23.04.1-x86_64-1.txz: Upgraded. kde/kapidox-5.106.0-x86_64-1.txz: Upgraded. kde/kapman-23.04.1-x86_64-1.txz: Upgraded. kde/kapptemplate-23.04.1-x86_64-1.txz: Upgraded. kde/karchive-5.106.0-x86_64-1.txz: Upgraded. kde/kate-23.04.1-x86_64-1.txz: Upgraded. kde/katomic-23.04.1-x86_64-1.txz: Upgraded. kde/kauth-5.106.0-x86_64-1.txz: Upgraded. kde/kbackup-23.04.1-x86_64-1.txz: Upgraded. kde/kblackbox-23.04.1-x86_64-1.txz: Upgraded. kde/kblocks-23.04.1-x86_64-1.txz: Upgraded. kde/kbookmarks-5.106.0-x86_64-1.txz: Upgraded. kde/kbounce-23.04.1-x86_64-1.txz: Upgraded. kde/kbreakout-23.04.1-x86_64-1.txz: Upgraded. kde/kbruch-23.04.1-x86_64-1.txz: Upgraded. kde/kcachegrind-23.04.1-x86_64-1.txz: Upgraded. kde/kcalc-23.04.1-x86_64-1.txz: Upgraded. kde/kcalendarcore-5.106.0-x86_64-1.txz: Upgraded. kde/kcalutils-23.04.1-x86_64-1.txz: Upgraded. kde/kcharselect-23.04.1-x86_64-1.txz: Upgraded. kde/kcmutils-5.106.0-x86_64-1.txz: Upgraded. kde/kcodecs-5.106.0-x86_64-1.txz: Upgraded. kde/kcolorchooser-23.04.1-x86_64-1.txz: Upgraded. kde/kcompletion-5.106.0-x86_64-1.txz: Upgraded. kde/kconfig-5.106.0-x86_64-1.txz: Upgraded. kde/kconfigwidgets-5.106.0-x86_64-1.txz: Upgraded. kde/kcontacts-5.106.0-x86_64-1.txz: Upgraded. kde/kcoreaddons-5.106.0-x86_64-1.txz: Upgraded. kde/kcrash-5.106.0-x86_64-1.txz: Upgraded. kde/kcron-23.04.1-x86_64-1.txz: Upgraded. kde/kdav-5.106.0-x86_64-1.txz: Upgraded. kde/kdbusaddons-5.106.0-x86_64-1.txz: Upgraded. kde/kde-cli-tools-5.27.5-x86_64-2.txz: Rebuilt. [PATCH] kinfo: Use kcmshell5 with Plasma *5*. Thanks to marav. kde/kde-dev-scripts-23.04.1-x86_64-1.txz: Upgraded. kde/kde-dev-utils-23.04.1-x86_64-1.txz: Upgraded. kde/kde-inotify-survey-23.04.1-x86_64-1.txz: Upgraded. kde/kdebugsettings-23.04.1-x86_64-1.txz: Upgraded. kde/kdeclarative-5.106.0-x86_64-1.txz: Upgraded. kde/kdeconnect-kde-23.04.1-x86_64-1.txz: Upgraded. kde/kded-5.106.0-x86_64-1.txz: Upgraded. kde/kdeedu-data-23.04.1-x86_64-1.txz: Upgraded. kde/kdegraphics-mobipocket-23.04.1-x86_64-1.txz: Upgraded. kde/kdegraphics-thumbnailers-23.04.1-x86_64-1.txz: Upgraded. kde/kdelibs4support-5.106.0-x86_64-1.txz: Upgraded. kde/kdenetwork-filesharing-23.04.1-x86_64-1.txz: Upgraded. kde/kdenlive-23.04.1-x86_64-1.txz: Upgraded. kde/kdepim-addons-23.04.1-x86_64-1.txz: Upgraded. kde/kdepim-runtime-23.04.1-x86_64-1.txz: Upgraded. kde/kdesdk-kio-23.04.1-x86_64-1.txz: Upgraded. kde/kdesdk-thumbnailers-23.04.1-x86_64-1.txz: Upgraded. kde/kdesignerplugin-5.106.0-x86_64-1.txz: Upgraded. kde/kdesu-5.106.0-x86_64-1.txz: Upgraded. kde/kdev-php-23.04.1-x86_64-1.txz: Upgraded. kde/kdev-python-23.04.1-x86_64-1.txz: Upgraded. kde/kdevelop-23.04.1-x86_64-1.txz: Upgraded. kde/kdewebkit-5.106.0-x86_64-1.txz: Upgraded. kde/kdf-23.04.1-x86_64-1.txz: Upgraded. kde/kdialog-23.04.1-x86_64-1.txz: Upgraded. kde/kdiamond-23.04.1-x86_64-1.txz: Upgraded. kde/kdnssd-5.106.0-x86_64-1.txz: Upgraded. kde/kdoctools-5.106.0-x86_64-1.txz: Upgraded. kde/keditbookmarks-23.04.1-x86_64-1.txz: Upgraded. kde/kemoticons-5.106.0-x86_64-1.txz: Upgraded. kde/keysmith-23.04.1-x86_64-1.txz: Upgraded. kde/kfilemetadata-5.106.0-x86_64-1.txz: Upgraded. kde/kfind-23.04.1-x86_64-1.txz: Upgraded. kde/kfloppy-23.04.1-x86_64-1.txz: Upgraded. kde/kfourinline-23.04.1-x86_64-1.txz: Upgraded. kde/kgeography-23.04.1-x86_64-1.txz: Upgraded. kde/kget-23.04.1-x86_64-1.txz: Upgraded. kde/kglobalaccel-5.106.0-x86_64-1.txz: Upgraded. kde/kgoldrunner-23.04.1-x86_64-1.txz: Upgraded. kde/kgpg-23.04.1-x86_64-1.txz: Upgraded. kde/kguiaddons-5.106.0-x86_64-1.txz: Upgraded. kde/khangman-23.04.1-x86_64-1.txz: Upgraded. kde/khelpcenter-23.04.1-x86_64-1.txz: Upgraded. kde/kholidays-5.106.0-x86_64-1.txz: Upgraded. kde/khtml-5.106.0-x86_64-1.txz: Upgraded. kde/ki18n-5.106.0-x86_64-1.txz: Upgraded. kde/kiconthemes-5.106.0-x86_64-1.txz: Upgraded. kde/kidentitymanagement-23.04.1-x86_64-1.txz: Upgraded. kde/kidletime-5.106.0-x86_64-1.txz: Upgraded. kde/kig-23.04.1-x86_64-1.txz: Upgraded. kde/kigo-23.04.1-x86_64-1.txz: Upgraded. kde/killbots-23.04.1-x86_64-1.txz: Upgraded. kde/kimageformats-5.106.0-x86_64-1.txz: Upgraded. kde/kimagemapeditor-23.04.1-x86_64-1.txz: Upgraded. kde/kimap-23.04.1-x86_64-1.txz: Upgraded. kde/kinit-5.106.0-x86_64-1.txz: Upgraded. kde/kio-5.106.0-x86_64-1.txz: Upgraded. kde/kio-admin-23.04.1-x86_64-1.txz: Upgraded. kde/kio-extras-23.04.1-x86_64-1.txz: Upgraded. kde/kio-gdrive-23.04.1-x86_64-1.txz: Upgraded. kde/kio-zeroconf-23.04.1-x86_64-1.txz: Upgraded. kde/kipi-plugins-23.04.1-x86_64-1.txz: Upgraded. kde/kirigami-gallery-23.04.1-x86_64-1.txz: Upgraded. kde/kirigami2-5.106.0-x86_64-1.txz: Upgraded. kde/kiriki-23.04.1-x86_64-1.txz: Upgraded. kde/kitemmodels-5.106.0-x86_64-1.txz: Upgraded. kde/kitemviews-5.106.0-x86_64-1.txz: Upgraded. kde/kiten-23.04.1-x86_64-1.txz: Upgraded. kde/kitinerary-23.04.1-x86_64-1.txz: Upgraded. kde/kjobwidgets-5.106.0-x86_64-1.txz: Upgraded. kde/kjs-5.106.0-x86_64-1.txz: Upgraded. kde/kjsembed-5.106.0-x86_64-1.txz: Upgraded. kde/kjumpingcube-23.04.1-x86_64-1.txz: Upgraded. kde/kldap-23.04.1-x86_64-1.txz: Upgraded. kde/kleopatra-23.04.1-x86_64-1.txz: Upgraded. kde/klickety-23.04.1-x86_64-1.txz: Upgraded. kde/klines-23.04.1-x86_64-1.txz: Upgraded. kde/kmag-23.04.1-x86_64-1.txz: Upgraded. kde/kmahjongg-23.04.1-x86_64-1.txz: Upgraded. kde/kmail-23.04.1-x86_64-1.txz: Upgraded. kde/kmail-account-wizard-23.04.1-x86_64-1.txz: Upgraded. kde/kmailtransport-23.04.1-x86_64-1.txz: Upgraded. kde/kmbox-23.04.1-x86_64-1.txz: Upgraded. kde/kmediaplayer-5.106.0-x86_64-1.txz: Upgraded. kde/kmime-23.04.1-x86_64-1.txz: Upgraded. kde/kmines-23.04.1-x86_64-1.txz: Upgraded. kde/kmix-23.04.1-x86_64-1.txz: Upgraded. kde/kmousetool-23.04.1-x86_64-1.txz: Upgraded. kde/kmouth-23.04.1-x86_64-1.txz: Upgraded. kde/kmplot-23.04.1-x86_64-1.txz: Upgraded. kde/knavalbattle-23.04.1-x86_64-1.txz: Upgraded. kde/knetwalk-23.04.1-x86_64-1.txz: Upgraded. kde/knewstuff-5.106.0-x86_64-1.txz: Upgraded. kde/knights-23.04.1-x86_64-1.txz: Upgraded. kde/knotes-23.04.1-x86_64-1.txz: Upgraded. kde/knotifications-5.106.0-x86_64-1.txz: Upgraded. kde/knotifyconfig-5.106.0-x86_64-1.txz: Upgraded. kde/kolf-23.04.1-x86_64-1.txz: Upgraded. kde/kollision-23.04.1-x86_64-1.txz: Upgraded. kde/kolourpaint-23.04.1-x86_64-1.txz: Upgraded. kde/kompare-23.04.1-x86_64-1.txz: Upgraded. kde/konqueror-23.04.1-x86_64-1.txz: Upgraded. kde/konquest-23.04.1-x86_64-1.txz: Upgraded. kde/konsole-23.04.1-x86_64-1.txz: Upgraded. kde/kontact-23.04.1-x86_64-1.txz: Upgraded. kde/kontactinterface-23.04.1-x86_64-1.txz: Upgraded. kde/kontrast-23.04.1-x86_64-1.txz: Upgraded. kde/konversation-23.04.1-x86_64-1.txz: Upgraded. kde/kopeninghours-23.04.1-x86_64-1.txz: Upgraded. kde/kopete-23.04.1-x86_64-1.txz: Upgraded. kde/korganizer-23.04.1-x86_64-1.txz: Upgraded. kde/kosmindoormap-23.04.1-x86_64-1.txz: Upgraded. kde/kpackage-5.106.0-x86_64-1.txz: Upgraded. kde/kparts-5.106.0-x86_64-1.txz: Upgraded. kde/kpat-23.04.1-x86_64-1.txz: Upgraded. kde/kpeople-5.106.0-x86_64-1.txz: Upgraded. kde/kpimtextedit-23.04.1-x86_64-1.txz: Upgraded. kde/kpkpass-23.04.1-x86_64-1.txz: Upgraded. kde/kplotting-5.106.0-x86_64-1.txz: Upgraded. kde/kpmcore-23.04.1-x86_64-1.txz: Upgraded. kde/kpty-5.106.0-x86_64-1.txz: Upgraded. kde/kpublictransport-23.04.1-x86_64-1.txz: Upgraded. kde/kqtquickcharts-23.04.1-x86_64-1.txz: Upgraded. kde/kquickcharts-5.106.0-x86_64-1.txz: Upgraded. kde/krdc-23.04.1-x86_64-1.txz: Upgraded. kde/kreversi-23.04.1-x86_64-1.txz: Upgraded. kde/krfb-23.04.1-x86_64-1.txz: Upgraded. kde/kross-5.106.0-x86_64-1.txz: Upgraded. kde/kross-interpreters-23.04.1-x86_64-1.txz: Upgraded. kde/kruler-23.04.1-x86_64-1.txz: Upgraded. kde/krunner-5.106.0-x86_64-1.txz: Upgraded. kde/ksanecore-23.04.1-x86_64-1.txz: Upgraded. kde/kservice-5.106.0-x86_64-1.txz: Upgraded. kde/kshisen-23.04.1-x86_64-1.txz: Upgraded. kde/ksirk-23.04.1-x86_64-1.txz: Upgraded. kde/ksmtp-23.04.1-x86_64-1.txz: Upgraded. kde/ksnakeduel-23.04.1-x86_64-1.txz: Upgraded. kde/kspaceduel-23.04.1-x86_64-1.txz: Upgraded. kde/ksquares-23.04.1-x86_64-1.txz: Upgraded. kde/ksudoku-23.04.1-x86_64-1.txz: Upgraded. kde/ksystemlog-23.04.1-x86_64-1.txz: Upgraded. kde/kteatime-23.04.1-x86_64-1.txz: Upgraded. kde/ktextaddons-1.3.1-x86_64-1.txz: Upgraded. kde/ktexteditor-5.106.0-x86_64-1.txz: Upgraded. kde/ktextwidgets-5.106.0-x86_64-1.txz: Upgraded. kde/ktimer-23.04.1-x86_64-1.txz: Upgraded. kde/ktnef-23.04.1-x86_64-1.txz: Upgraded. kde/ktorrent-23.04.1-x86_64-1.txz: Upgraded. kde/ktouch-23.04.1-x86_64-1.txz: Upgraded. kde/kturtle-23.04.1-x86_64-1.txz: Upgraded. kde/kubrick-23.04.1-x86_64-1.txz: Upgraded. kde/kunitconversion-5.106.0-x86_64-1.txz: Upgraded. kde/kwallet-5.106.0-x86_64-1.txz: Upgraded. kde/kwalletmanager-23.04.1-x86_64-1.txz: Upgraded. kde/kwave-23.04.1-x86_64-1.txz: Upgraded. kde/kwayland-5.106.0-x86_64-1.txz: Upgraded. kde/kwidgetsaddons-5.106.0-x86_64-1.txz: Upgraded. kde/kwindowsystem-5.106.0-x86_64-1.txz: Upgraded. kde/kwordquiz-23.04.1-x86_64-1.txz: Upgraded. kde/kxmlgui-5.106.0-x86_64-1.txz: Upgraded. kde/kxmlrpcclient-5.106.0-x86_64-1.txz: Upgraded. kde/libgravatar-23.04.1-x86_64-1.txz: Upgraded. kde/libkcddb-23.04.1-x86_64-1.txz: Upgraded. kde/libkcompactdisc-23.04.1-x86_64-1.txz: Upgraded. kde/libkdcraw-23.04.1-x86_64-1.txz: Upgraded. kde/libkdegames-23.04.1-x86_64-1.txz: Upgraded. kde/libkdepim-23.04.1-x86_64-1.txz: Upgraded. kde/libkeduvocdocument-23.04.1-x86_64-1.txz: Upgraded. kde/libkexiv2-23.04.1-x86_64-1.txz: Upgraded. kde/libkgapi-23.04.1-x86_64-1.txz: Upgraded. kde/libkipi-23.04.1-x86_64-1.txz: Upgraded. kde/libkleo-23.04.1-x86_64-1.txz: Upgraded. kde/libkmahjongg-23.04.1-x86_64-1.txz: Upgraded. kde/libkomparediff2-23.04.1-x86_64-1.txz: Upgraded. kde/libksane-23.04.1-x86_64-1.txz: Upgraded. kde/libksieve-23.04.1-x86_64-1.txz: Upgraded. kde/libktorrent-23.04.1-x86_64-1.txz: Upgraded. kde/lokalize-23.04.1-x86_64-1.txz: Upgraded. kde/lskat-23.04.1-x86_64-1.txz: Upgraded. kde/mailcommon-23.04.1-x86_64-1.txz: Upgraded. kde/mailimporter-23.04.1-x86_64-1.txz: Upgraded. kde/marble-23.04.1-x86_64-1.txz: Upgraded. kde/markdownpart-23.04.1-x86_64-1.txz: Upgraded. kde/mbox-importer-23.04.1-x86_64-1.txz: Upgraded. kde/messagelib-23.04.1-x86_64-1.txz: Upgraded. kde/minuet-23.04.1-x86_64-1.txz: Upgraded. kde/modemmanager-qt-5.106.0-x86_64-1.txz: Upgraded. kde/networkmanager-qt-5.106.0-x86_64-1.txz: Upgraded. kde/okular-23.04.1-x86_64-1.txz: Upgraded. kde/oxygen-icons5-5.106.0-noarch-1.txz: Upgraded. kde/palapeli-23.04.1-x86_64-1.txz: Upgraded. kde/parley-23.04.1-x86_64-1.txz: Upgraded. kde/partitionmanager-23.04.1-x86_64-1.txz: Upgraded. kde/picmi-23.04.1-x86_64-1.txz: Upgraded. kde/pim-data-exporter-23.04.1-x86_64-1.txz: Upgraded. kde/pim-sieve-editor-23.04.1-x86_64-1.txz: Upgraded. kde/pimcommon-23.04.1-x86_64-1.txz: Upgraded. kde/plasma-framework-5.106.0-x86_64-1.txz: Upgraded. kde/poxml-23.04.1-x86_64-1.txz: Upgraded. kde/print-manager-23.04.1-x86_64-1.txz: Upgraded. kde/prison-5.106.0-x86_64-1.txz: Upgraded. kde/purpose-5.106.0-x86_64-1.txz: Upgraded. kde/qqc2-desktop-style-5.106.0-x86_64-1.txz: Upgraded. kde/rocs-23.04.1-x86_64-1.txz: Upgraded. kde/skanlite-23.04.1-x86_64-1.txz: Upgraded. kde/skanpage-23.04.1-x86_64-1.txz: Upgraded. kde/solid-5.106.0-x86_64-1.txz: Upgraded. kde/sonnet-5.106.0-x86_64-1.txz: Upgraded. kde/spectacle-23.04.1-x86_64-1.txz: Upgraded. kde/step-23.04.1-x86_64-1.txz: Upgraded. kde/svgpart-23.04.1-x86_64-1.txz: Upgraded. kde/sweeper-23.04.1-x86_64-1.txz: Upgraded. kde/syndication-5.106.0-x86_64-1.txz: Upgraded. kde/syntax-highlighting-5.106.0-x86_64-1.txz: Upgraded. kde/threadweaver-5.106.0-x86_64-1.txz: Upgraded. kde/tokodon-23.04.1-x86_64-1.txz: Upgraded. kde/umbrello-23.04.1-x86_64-1.txz: Upgraded. kde/yakuake-23.04.1-x86_64-1.txz: Upgraded. kde/zanshin-23.04.1-x86_64-1.txz: Upgraded. l/at-spi2-core-2.48.2-x86_64-1.txz: Upgraded. l/mpfr-4.2.0p07-x86_64-1.txz: Upgraded. l/qtkeychain-0.14.0-x86_64-1.txz: Upgraded. l/rpcsvc-proto-1.4.4-x86_64-1.txz: Upgraded. n/openvpn-2.6.4-x86_64-1.txz: Upgraded. n/php-8.2.6-x86_64-1.txz: Upgraded. This is a bugfix release. For more information, see: https://www.php.net/ChangeLog-8.php#8.2.6 x/libXaw3d-1.6.5-x86_64-1.txz: Upgraded. xap/mozilla-firefox-113.0.1-x86_64-1.txz: Upgraded. This is a bugfix release. For more information, see: https://www.mozilla.org/en-US/firefox/113.0.1/releasenotes/ xfce/mousepad-0.6.1-x86_64-1.txz: Upgraded.
750 lines
28 KiB
Bash
750 lines
28 KiB
Bash
#!/bin/bash
|
|
# Copyright 1994, 1998, 2000 Patrick Volkerding, Concord, CA, USA
|
|
# Copyright 2001, 2003 Slackware Linux, Inc., Concord, CA, USA
|
|
# Copyright 2007, 2009, 2011, 2017, 2018, 2019, 2020, 2021 Patrick Volkerding, Sebeka, MN, USA
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use of this script, with or without modification, is
|
|
# permitted provided that the following conditions are met:
|
|
#
|
|
# 1. Redistributions of this script must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
|
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
|
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
#
|
|
# Thu May 20 18:55:21 UTC 2021
|
|
# Add support for the flag ALWAYS_RUN_INSTALL_SCRIPT in doinst.sh. If it
|
|
# appears, then the install script will always be run, even in the pre-install
|
|
# pass.
|
|
#
|
|
# Wed May 19 18:11:44 UTC 2021
|
|
# Don't run the install script if this is a pre-install pass as indicated by
|
|
# upgradepkg setting PRE_INSTALL_PASS="true". Some of the install scripts can
|
|
# take a significant amount of time to process, and there aren't any known
|
|
# cases where they actually need to be run twice.
|
|
#
|
|
# Wed Apr 1 21:59:41 UTC 2020
|
|
# If the package contains /install/douninst.sh, copy the uninstall script to
|
|
# $ADM_DIR/douninst.sh/$shortname and add the filename to the package list
|
|
# in $ADM_DIR/packages/$shortname.
|
|
#
|
|
# Fri Oct 4 06:04:39 UTC 2019
|
|
# Add support for --no-overwrite so that upgradepkg can be kind to SSDs.
|
|
#
|
|
# Mon Jun 4 21:17:58 UTC 2018
|
|
# Migrate the package database and directories from /var/log to
|
|
# /var/lib/pkgtools. /var/log was never a good place for this data, as it is
|
|
# considered by many to be a directory that could be wiped to free up some
|
|
# space. Originally the package database was in /var/adm, but the FSSTND
|
|
# (later FHS) group decided that directory should be a symlink to /var/log,
|
|
# and I went along with that since it was years ago and I was a n00b and didn't
|
|
# know any better. /var/lib/pkgtools will be a better and safer location.
|
|
#
|
|
# Thu May 24 20:23:55 UTC 2018
|
|
# Added --terselength option to set the line length in --terse mode.
|
|
# Allow adding NOLOCK in an install script to allow it to run without locking.
|
|
#
|
|
# Sat May 19 22:42:03 UTC 2018
|
|
# Implement locking to prevent screen output or install script collisions if
|
|
# multiple copies of installpkg are running simultaneously.
|
|
# Use ${MCOOKIE} instead of $$ (might as well, since we already generated it).
|
|
#
|
|
# Tue Apr 17 17:26:44 UTC 2018
|
|
# Quit with the funny business in /install. Note however that /install still
|
|
# isn't a safe directory to use in a package for anything other than package
|
|
# metadata. Other files placed there are going to be left on the system in
|
|
# /installpkg-$(mcookie). That could be worked around, but we'll wait until
|
|
# someone reports there is a need. The main reason to do this is that /install
|
|
# was a collision point if more than one copy of installpkg was running at
|
|
# once. With this change, the pkgtools are (more or less) thread-safe.
|
|
#
|
|
# Tue Feb 13 01:19:46 UTC 2018
|
|
# Use recent tar, and support restoring POSIX ACLs and extended attributes.
|
|
#
|
|
# Tue Dec 12 21:49:48 UTC 2017
|
|
# If possible, use multiple decompression threads.
|
|
#
|
|
# Thu Dec 7 04:09:17 UTC 2017
|
|
# Change meaning of .tlz to tar.lz (lzip)
|
|
#
|
|
# Sun Sep 6 21:58:36 BST 2009
|
|
# Replaced usage of "cat" with STDIN redirection or file name parameters
|
|
# to speed up execution on ARM.
|
|
# Replaced pkgbase & package_name code with 'sed' script by Jim Hawkins.
|
|
#
|
|
# Sat Apr 25 21:18:53 UTC 2009
|
|
# Converted to use new pkgbase() function to remove pathname and
|
|
# valid package extensions.
|
|
#
|
|
# Sat Apr 4 22:58:06 CDT 2009
|
|
# Support additional compression formats if the supporting utilities exist:
|
|
# .tbz - bzip2
|
|
# .tlz - lzma
|
|
# .txz - xz (also LZMA)
|
|
# And of course, .tgz (gzip) is not going anywhere. :-) <volkerdi>
|
|
# Add command switches to determine the uncompressed package size even if
|
|
# that will slow things down, and to add the package's md5sum to the
|
|
# metadata stored in /var/log/packages/.
|
|
#
|
|
# Fri Dec 21 17:21:35 CST 2007
|
|
# Added a patch from Johnny Morano to work around package removal issues
|
|
# caused by packages that do not comply with FHS combined with a grep
|
|
# regex error in installpkg. Any package with a single-letter top-
|
|
# level directory could not be removed.
|
|
#
|
|
# Shortened some of the top-line dialog output to avoid overflowing the
|
|
# textbox (needed as some of the packages, especially in X, have very
|
|
# long base package names now). <pjv>
|
|
#
|
|
# Sun Nov 26 12:38:25 CST 1995
|
|
# Added patch from Glenn Moloney <glenn@physics.unimelb.edu.au> to allow
|
|
# packages to be installed to directories other than /.
|
|
#
|
|
# Wed Mar 18 15:15:51 CST 1998
|
|
# Changed $TMP directory to /var/log/setup/tmp, and chmod'ed it 700 to close
|
|
# some security holes.
|
|
|
|
# Return a package name that has been stripped of the dirname portion
|
|
# and any of the valid extensions (only):
|
|
pkgbase() {
|
|
# basename + strip extensions .tbz, .tgz, .tlz and .txz
|
|
echo "$1" | sed 's?.*/??;s/\.t[bglx]z$//'
|
|
}
|
|
|
|
# If installpkg encounters a problem, it will return a non-zero error code.
|
|
# If it finds more than one problem (i.e. with a list of packages) you'll only
|
|
# hear about the most recent one. :)
|
|
# 1 = tar returned error code
|
|
# 2 = corrupt compression envelope
|
|
# 3 = does not end in .tgz
|
|
# 4 = no such file
|
|
# 5 = external compression utility missing
|
|
# 99 = user abort from menu mode
|
|
EXITSTATUS=0
|
|
|
|
# Do not store md5sums by default:
|
|
MD5SUM=0
|
|
|
|
# So that we know what to expect...
|
|
umask 022
|
|
|
|
# If we have mcookie and a tar that is recent enough to support --transform,
|
|
# then we can stop needlessly erasing files in the /install directory while
|
|
# also making installpkg thread-safe. Don't check for recent tar - we'll
|
|
# already break from --attrs and --xattrs anyway if the wrong tar is used.
|
|
if which mcookie 1> /dev/null 2> /dev/null ; then
|
|
MCOOKIE=$(mcookie)
|
|
INSTDIR=installpkg-${MCOOKIE}
|
|
else
|
|
# Well, we will make due with this:
|
|
MCOOKIE=$$
|
|
INSTDIR=installpkg-${MCOOKIE}
|
|
fi
|
|
|
|
# Create a lockfile directory if it doesn't exist. We can use it to prevent
|
|
# screen corruption (from multiple dialogs) and install script collisions
|
|
# (from multiple scripts trying to work on the same files) in the case of
|
|
# parallel instances of installpkg.
|
|
INSTLOCKDIR=${INSTLOCKDIR:-/run/lock/pkgtools}
|
|
if [ ! -d $INSTLOCKDIR ]; then
|
|
mkdir -p $INSTLOCKDIR
|
|
fi
|
|
|
|
usage() {
|
|
cat << EOF
|
|
Usage: installpkg [options] <package_filename>
|
|
|
|
Installpkg is used to install a .t{gz,bz,lz,xz} package like this:
|
|
installpkg slackware-package-1.0.0-i486-1.tgz (or .tbz, .tlz, .txz)
|
|
|
|
options: --warn (warn if files will be overwritten, but do not install)
|
|
--dry-run (same as --warn)
|
|
--root /mnt (install someplace else, like /mnt)
|
|
--infobox (use dialog to draw an info box)
|
|
--terse (display a one-line short description for install)
|
|
--terselength <length> (line length in terse mode - default is
|
|
the number of columns available)
|
|
--menu (confirm package installation with a menu, unless
|
|
the priority is [required] or ADD)
|
|
--ask (used with menu mode: always ask if a package should be
|
|
installed regardless of what the package's priority is)
|
|
--priority ADD|REC|OPT|SKP (provide a priority for the entire
|
|
package list to use instead of the priority in the
|
|
tagfile)
|
|
--tagfile /somedir/tagfile (specify a different file to use
|
|
for package priorities. The default is "tagfile" in
|
|
the package's directory)
|
|
--threads <number> For xz/plzip compressed packages, set the max
|
|
number of threads to be used for decompression. Only has
|
|
an effect if a multithreaded compressor was used, and then
|
|
only on large packages. For plzip, the default is equal to
|
|
the number of CPU threads available on the machine. For xz,
|
|
the default is equal to 2.
|
|
--md5sum (record the package's md5sum in the metadata file)
|
|
--no-overwrite When extracting the package, do not overwrite
|
|
existing files. Usually, this option should not be used.
|
|
It exists so that upgradepkg can use it for the second
|
|
installation pass. The first pass has already overwritten
|
|
the previous package's files, and this will catch the few
|
|
corner cases without generating unnecessary writes.
|
|
|
|
EOF
|
|
}
|
|
|
|
# Eliminate whitespace function:
|
|
crunch() {
|
|
while read FOO ; do
|
|
echo $FOO
|
|
done
|
|
}
|
|
|
|
# Strip version, architecture and build from the end of the name
|
|
package_name() {
|
|
pkgbase $1 | sed 's?-[^-]*-[^-]*-[^-]*$??'
|
|
}
|
|
|
|
# Set maximum number of threads to use. By default, this will be the number
|
|
# of CPU threads:
|
|
THREADS="$(nproc)"
|
|
|
|
# Set default line length for terse mode:
|
|
if tty -s && which tput 1> /dev/null 2> /dev/null ; then
|
|
TERSELENGTH=$(tput cols)
|
|
else
|
|
TERSELENGTH=80
|
|
fi
|
|
|
|
# Default install mode is standard text mode:
|
|
MODE=install
|
|
# If $TERSE is set to 0 in the environment, then use terse mode:
|
|
if [ "$TERSE" = "0" ]; then
|
|
MODE=terse
|
|
fi
|
|
|
|
# Parse options:
|
|
while [ 0 ]; do
|
|
if [ "$1" = "-warn" -o "$1" = "--warn" -o "$1" = "-dry-run" -o "$1" = "--dry-run" ]; then
|
|
MODE=warn
|
|
shift 1
|
|
elif [ "$1" = "-md5sum" -o "$1" = "--md5sum" ]; then
|
|
MD5SUM=1
|
|
shift 1
|
|
elif [ "$1" = "-infobox" -o "$1" = "--infobox" ]; then
|
|
MODE=infobox
|
|
shift 1
|
|
elif [ "$1" = "-terse" -o "$1" = "--terse" ]; then
|
|
MODE=terse
|
|
shift 1
|
|
elif [ "$1" = "-terselength" -o "$1" = "--terselength" ]; then
|
|
TERSELENGTH=$2
|
|
shift 2
|
|
elif [ "$1" = "-menu" -o "$1" = "--menu" ]; then
|
|
MODE=menu
|
|
shift 1
|
|
elif [ "$1" = "-ask" -o "$1" = "--ask" ]; then
|
|
ALWAYSASK="yes"
|
|
shift 1
|
|
elif [ "$1" = "--no-overwrite" ]; then
|
|
NO_OVERWRITE=" --skip-old-files "
|
|
shift 1
|
|
elif [ "$1" = "-tagfile" -o "$1" = "--tagfile" ]; then
|
|
if [ -r "$2" ]; then
|
|
USERTAGFILE="$2"
|
|
elif [ -r "$(pwd)/$2" ]; then
|
|
USERTAGFILE="$(pwd)/$2"
|
|
else
|
|
usage
|
|
exit
|
|
fi
|
|
shift 2
|
|
elif [ "$1" = "-threads" -o "$1" = "--threads" ]; then
|
|
THREADS="$2"
|
|
shift 2
|
|
XZ_THREADS_FORCED=yes
|
|
elif [ "$1" = "-priority" -o "$1" = "--priority" ]; then
|
|
if [ "$2" = "" ]; then
|
|
usage
|
|
exit
|
|
fi
|
|
USERPRIORITY="$2"
|
|
shift 2
|
|
elif [ "$1" = "-root" -o "$1" = "--root" ]; then
|
|
if [ "$2" = "" ]; then
|
|
usage
|
|
exit
|
|
fi
|
|
ROOT="$2"
|
|
shift 2
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
|
|
# Set the prefix for the package database directories (packages, scripts).
|
|
ADM_DIR="$ROOT/var/lib/pkgtools"
|
|
|
|
# Set the prefix for the removed packages/scripts log files:
|
|
LOG_DIR="$ROOT/var/log/pkgtools"
|
|
|
|
# If the directories don't exist, "initialize" the package database:
|
|
for PKGDBDIR in douninst.sh packages scripts setup ; do
|
|
if [ ! -d $ADM_DIR/$PKGDBDIR ]; then
|
|
mkdir -p $ADM_DIR/$PKGDBDIR
|
|
chmod 755 $ADM_DIR/$PKGDBDIR
|
|
fi
|
|
done
|
|
for PKGLOGDIR in removed_packages removed_scripts ; do
|
|
if [ ! -d $LOG_DIR/$PKGLOGDIR ]; then
|
|
rm -rf $LOG_DIR/$PKGLOGDIR # make sure it's not a symlink or something stupid
|
|
mkdir -p $LOG_DIR/$PKGLOGDIR
|
|
chmod 755 $LOG_DIR/$PKGLOGDIR
|
|
fi
|
|
done
|
|
# Likewise, make sure that the symlinks in /var/log exist. We no longer
|
|
# trust anything to remain in /var/log. Let the admin wipe it if that's
|
|
# what they like.
|
|
for symlink in packages scripts setup ; do
|
|
if [ ! -L $LOG_DIR/../$symlink -a ! -d $LOG_DIR/../$symlink ]; then
|
|
( cd $LOG_DIR/.. ; ln -sf ../lib/pkgtools/$symlink . )
|
|
fi
|
|
done
|
|
|
|
# Make sure there's a proper temp directory:
|
|
TMP=$ADM_DIR/setup/tmp
|
|
# If the $TMP directory doesn't exist, create it:
|
|
if [ ! -d $TMP ]; then
|
|
mkdir -p $TMP
|
|
chmod 700 $TMP # no need to leave it open
|
|
fi
|
|
|
|
# usage(), exit if called with no arguments:
|
|
if [ $# = 0 ]; then
|
|
usage;
|
|
exit
|
|
fi
|
|
|
|
# If -warn mode was requested, produce the output and then exit:
|
|
if [ "$MODE" = "warn" ]; then
|
|
while [ -f "$1" ]; do
|
|
mkdir -p $TMP/scan${MCOOKIE}
|
|
# Determine extension:
|
|
packageext="$( echo $1 | rev | cut -f 1 -d . | rev)"
|
|
# Determine decompressor utility:
|
|
case $packageext in
|
|
'tgz' )
|
|
packagecompression=gzip
|
|
;;
|
|
'tbz' )
|
|
if which lbzip2 1> /dev/null 2> /dev/null ; then
|
|
packagecompression=lbzip2
|
|
else
|
|
packagecompression=bzip2
|
|
fi
|
|
;;
|
|
'tlz' )
|
|
if which plzip 1> /dev/null 2> /dev/null ; then
|
|
packagecompression="plzip --threads=${THREADS}"
|
|
elif which lzip 1> /dev/null 2> /dev/null ; then
|
|
packagecompression=lzip
|
|
else
|
|
echo "ERROR: lzip compression utility not found in \$PATH."
|
|
exit 3
|
|
fi
|
|
;;
|
|
'txz' )
|
|
if [ "$XZ_THREADS_FORCED" = "yes" ]; then
|
|
packagecompression="xz --threads=${THREADS}"
|
|
else
|
|
# Let xz determine how many threads to use:
|
|
packagecompression="xz --threads=0"
|
|
fi
|
|
;;
|
|
esac
|
|
( cd $TMP/scan${MCOOKIE} ; $packagecompression -dc | tar xf - install ) < $1 2> /dev/null
|
|
if [ -r $TMP/scan${MCOOKIE}/install/doinst.sh ]; then
|
|
if grep ' rm -rf ' $TMP/scan${MCOOKIE}/install/doinst.sh 1>/dev/null 2>/dev/null ; then
|
|
grep ' rm -rf ' $TMP/scan${MCOOKIE}/install/doinst.sh > $TMP/scan${MCOOKIE}/install/delete
|
|
for f in `cat $TMP/scan${MCOOKIE}/install/delete | cut -f 3,7 -d ' ' | tr ' ' '/'`; do
|
|
f="/$f"
|
|
if [ -f "$f" -o -L "$f" ]; then
|
|
echo "$f"
|
|
fi
|
|
done
|
|
fi
|
|
if [ -d $TMP/scan${MCOOKIE} ]; then
|
|
( cd $TMP/scan${MCOOKIE} ; rm -rf install ) 2> /dev/null
|
|
( cd $TMP ; rmdir scan${MCOOKIE} ) 2> /dev/null
|
|
fi
|
|
fi
|
|
for f in `( $packagecompression -dc | tar tf - ) < $1 | grep -v 'drwx'`; do
|
|
f="/$f"
|
|
if [ -f "$f" -o -L "$f" ]; then
|
|
echo "$f"
|
|
fi
|
|
done
|
|
shift 1
|
|
done
|
|
exit
|
|
fi
|
|
|
|
# Main loop:
|
|
for package in $* ; do
|
|
|
|
# Simple package integrity check:
|
|
if [ ! -f $package ]; then
|
|
EXITSTATUS=4
|
|
if [ "$MODE" = "install" ]; then
|
|
echo "Cannot install $package: file not found"
|
|
fi
|
|
continue;
|
|
fi
|
|
|
|
# "shortname" isn't really THAT short...
|
|
# it's just the full name without ".t{gz,bz,lz,xz}"
|
|
shortname="$(pkgbase $package)"
|
|
packagedir="$(dirname $package)"
|
|
# This is the base package name, used for grepping tagfiles and descriptions:
|
|
packagebase="$(package_name $shortname)"
|
|
|
|
# Reject package if it does not end in '.t{gz,bz,lz,xz}':
|
|
if [ "$shortname" = "$(basename $package)" ]; then
|
|
EXITSTATUS=3
|
|
if [ "$MODE" = "install" ]; then
|
|
echo "Cannot install $package: file does not end in .tgz, .tbz, .tlz, or .txz"
|
|
fi
|
|
continue;
|
|
fi
|
|
|
|
# Determine extension:
|
|
packageext="$(echo $package | rev | cut -f 1 -d . | rev)"
|
|
|
|
# Determine compressor utility:
|
|
case $packageext in
|
|
'tgz' )
|
|
packagecompression=gzip
|
|
;;
|
|
'tbz' )
|
|
if which lbzip2 1> /dev/null 2> /dev/null ; then
|
|
packagecompression=lbzip2
|
|
else
|
|
packagecompression=bzip2
|
|
fi
|
|
;;
|
|
'tlz' )
|
|
if which plzip 1> /dev/null 2> /dev/null ; then
|
|
packagecompression="plzip --threads=${THREADS}"
|
|
elif which lzip 1> /dev/null 2> /dev/null ; then
|
|
packagecompression=lzip
|
|
else
|
|
echo "ERROR: lzip compression utility not found in \$PATH."
|
|
exit 3
|
|
fi
|
|
;;
|
|
'txz' )
|
|
if [ "$XZ_THREADS_FORCED" = "yes" ]; then
|
|
packagecompression="xz --threads=${THREADS}"
|
|
else
|
|
# Let xz determine how many threads to use:
|
|
packagecompression="xz --threads=0"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
# Test presence of external compression utility:
|
|
if ! $(echo $packagecompression | cut -f 1 -d ' ') --help 1> /dev/null 2> /dev/null ; then
|
|
EXITSTATUS=5
|
|
if [ "$MODE" = "install" ]; then
|
|
echo "Cannot install $package: external compression utility $packagecompression missing"
|
|
fi
|
|
continue;
|
|
fi
|
|
|
|
# Determine package's priority:
|
|
unset PRIORITY
|
|
if [ "$USERTAGFILE" = "" ]; then
|
|
TAGFILE="$packagedir/tagfile"
|
|
else
|
|
TAGFILE="$USERTAGFILE"
|
|
fi
|
|
if [ ! -r "$TAGFILE" ]; then
|
|
TAGFILE=/dev/null
|
|
fi
|
|
if grep "^$packagebase:" "$TAGFILE" | grep ADD > /dev/null 2> /dev/null ; then
|
|
PRIORITY="ADD"
|
|
elif grep "^$packagebase:" "$TAGFILE" | grep REC > /dev/null 2> /dev/null ; then
|
|
PRIORITY="REC"
|
|
elif grep "^$packagebase:" "$TAGFILE" | grep OPT > /dev/null 2> /dev/null ; then
|
|
PRIORITY="OPT"
|
|
elif grep "^$packagebase:" "$TAGFILE" | grep SKP > /dev/null 2> /dev/null ; then
|
|
PRIORITY="SKP"
|
|
fi
|
|
if [ "$PRIORITY" = "ADD" ]; then
|
|
PMSG="[ADD]"
|
|
elif [ "$PRIORITY" = "REC" ]; then
|
|
PMSG="[REC]"
|
|
elif [ "$PRIORITY" = "OPT" ]; then
|
|
PMSG="[OPT]"
|
|
elif [ "$PRIORITY" = "SKP" ]; then
|
|
PMSG="[SKP]"
|
|
else
|
|
PMSG=""
|
|
fi
|
|
|
|
# If a tagfile wants this package to be skipped, do that now before
|
|
# wasting any more CPU on it:
|
|
if [ "$PRIORITY" = "SKP" -a ! "$ALWAYSASK" = "yes" ]; then
|
|
continue # next package
|
|
fi
|
|
|
|
# Figure out some package information, like the compressed and uncompressed
|
|
# sizes, and where to find the package description:
|
|
COMPRESSED="$(/bin/du -sh "$(readlink -f $package)" | cut -f 1)"
|
|
DESCRIPTION=""
|
|
# First check for .txt file next to the package, since this is faster:
|
|
if grep "^$packagebase:" "$packagedir/$shortname.txt" 1> /dev/null 2> /dev/null ; then
|
|
DESCRIPTION="$packagedir/$shortname.txt"
|
|
elif grep "^$shortname:" "$packagedir/$shortname.txt" 1> /dev/null 2> /dev/null ; then
|
|
DESCRIPTION="$packagedir/$shortname.txt"
|
|
fi
|
|
|
|
# Test tarball integrity and get uncompressed package size:
|
|
if [ "$MODE" = "install" ]; then
|
|
echo "Verifying package $(basename $package)."
|
|
fi
|
|
cat $package | $packagecompression -dc | LC_ALL=C dd 2> $TMP/tmpsize${MCOOKIE} | tar tf - 2> /dev/null 1> $TMP/tmplist${MCOOKIE}
|
|
TARERROR=$?
|
|
if [ ! "$TARERROR" = "0" ]; then
|
|
EXITSTATUS=1 # tar file corrupt
|
|
if [ "$MODE" = "install" ]; then
|
|
echo "Unable to install $package: tar archive is corrupt (tar returned error code $TARERROR)"
|
|
fi
|
|
rm -f $TMP/tmplist${MCOOKIE} $TMP/tmpsize${MCOOKIE}
|
|
continue
|
|
fi
|
|
UNCOMPRESSED="$(cat $TMP/tmpsize${MCOOKIE} | tail -n 1 | cut -f 1 -d ' ' | numfmt --to=iec)"
|
|
rm -f $TMP/tmpsize${MCOOKIE}
|
|
|
|
# If we still don't have a package description, look inside the package.
|
|
# This requires a costly untar.
|
|
if [ "$DESCRIPTION" = "" ]; then
|
|
mkdir -p $TMP/scan${MCOOKIE}
|
|
( cd $TMP/scan${MCOOKIE} ; $packagecompression -dc | tar xf - install ) < $package 2> /dev/null
|
|
if grep "^$packagebase:" "$TMP/scan${MCOOKIE}/install/slack-desc" 1> /dev/null 2> /dev/null ; then
|
|
DESCRIPTION="$TMP/scan${MCOOKIE}/install/slack-desc"
|
|
elif grep "^$shortname:" "$TMP/scan${MCOOKIE}/install/slack-desc" 1> /dev/null 2> /dev/null ; then
|
|
DESCRIPTION="$TMP/scan${MCOOKIE}/install/slack-desc"
|
|
fi
|
|
fi
|
|
|
|
if [ "$DESCRIPTION" = "" ]; then
|
|
#echo "WARNING NO SLACK-DESC"
|
|
DESCRIPTION="/dev/null"
|
|
fi
|
|
|
|
# Gather package infomation into a temporary file:
|
|
grep "^$packagebase:" $DESCRIPTION | cut -f 2- -d : | cut -b2- 1> $TMP/tmpmsg${MCOOKIE} 2> /dev/null
|
|
if [ "$shortname" != "$packagebase" ]; then
|
|
grep "^$shortname:" $DESCRIPTION | cut -f 2- -d : | cut -b2- 1>> $TMP/tmpmsg${MCOOKIE} 2> /dev/null
|
|
fi
|
|
# Adjust the length here. This allows a slack-desc to be any size up to 13 lines instead of fixed at 11.
|
|
LENGTH=$(wc -l < $TMP/tmpmsg${MCOOKIE} )
|
|
while [ $LENGTH -lt 12 ]; do
|
|
echo >> $TMP/tmpmsg${MCOOKIE}
|
|
LENGTH=$(expr $LENGTH + 1)
|
|
done
|
|
echo "Size: Compressed: ${COMPRESSED}, uncompressed: ${UNCOMPRESSED}." >> $TMP/tmpmsg${MCOOKIE}
|
|
# For recent versions of dialog it is necessary to add \n to the end of each line
|
|
# or it will remove repeating spaces and mess up our careful formatting:
|
|
cat << EOF > $TMP/controlns${MCOOKIE}
|
|
\n
|
|
\n
|
|
\n
|
|
\n
|
|
\n
|
|
\n
|
|
\n
|
|
\n
|
|
\n
|
|
\n
|
|
\n
|
|
\n
|
|
\n
|
|
EOF
|
|
paste -d "" $TMP/tmpmsg${MCOOKIE} $TMP/controlns${MCOOKIE} > $TMP/pasted${MCOOKIE}
|
|
rm -f $TMP/controlns${MCOOKIE}
|
|
mv $TMP/pasted${MCOOKIE} $TMP/tmpmsg${MCOOKIE}
|
|
# Emit information to the console:
|
|
if [ "$MODE" = "install" ]; then
|
|
if [ "$PMSG" = "" ]; then
|
|
echo "Installing package $(basename $package):"
|
|
else
|
|
echo "Installing package $(basename $package) $PMSG:"
|
|
fi
|
|
echo "PACKAGE DESCRIPTION:"
|
|
grep "^$packagebase:" $DESCRIPTION | uniq | sed "s/^$packagebase:/#/g"
|
|
if [ "$shortname" != "$packagebase" ]; then
|
|
grep "^$shortname:" $DESCRIPTION | uniq | sed "s/^$shortname:/#/g"
|
|
fi
|
|
elif [ "$MODE" = "terse" ]; then # emit a single description line
|
|
( flock 9 || exit 11
|
|
printf "%-$(expr $TERSELENGTH - 8)s %-6s\n" "$(echo $shortname: $(echo $(cat $DESCRIPTION | grep "^$packagebase:" | sed "s/^$packagebase: //g" | head -n 1 | tr -d '()' | sed "s/^$packagebase //g" ) $(echo " $(printf '.%.0s' {1..256})")) | cut -b1-$(expr $TERSELENGTH - 8))" "$(printf "[%5s]" $UNCOMPRESSED)" | cut -b 1-${TERSELENGTH}
|
|
) 9> $INSTLOCKDIR/dialog.lock
|
|
elif [ "$MODE" = "infobox" ]; then # install infobox package
|
|
( flock 9 || exit 11
|
|
dialog --title "Installing package $shortname $PMSG" --infobox "$(cat $TMP/tmpmsg${MCOOKIE})" 0 0
|
|
) 9> $INSTLOCKDIR/dialog.lock
|
|
elif [ "$MODE" = "menu" -a "$PRIORITY" = "ADD" -a ! "$ALWAYSASK" = "yes" ]; then # ADD overrides menu mode unless -ask was used
|
|
( flock 9 || exit 11
|
|
dialog --title "Installing package $shortname $PMSG" --infobox "$(cat $TMP/tmpmsg${MCOOKIE})" 0 0
|
|
) 9> $INSTLOCKDIR/dialog.lock
|
|
elif [ "$MODE" = "menu" -a "$USERPRIORITY" = "ADD" ]; then # install no matter what $PRIORITY
|
|
( flock 9 || exit 11
|
|
dialog --title "Installing package $shortname $PMSG" --infobox "$(cat $TMP/tmpmsg${MCOOKIE})" 0 0
|
|
) 9> $INSTLOCKDIR/dialog.lock
|
|
else # we must need a full menu:
|
|
( flock 9 || exit 11
|
|
dialog --title "Package Name: $shortname $PMSG" --menu "$(cat $TMP/tmpmsg${MCOOKIE})" 0 0 3 \
|
|
"Yes" "Install package $shortname" \
|
|
"No" "Do not install package $shortname" \
|
|
"Quit" "Abort software installation completely" 2> $TMP/reply${MCOOKIE}
|
|
if [ ! $? = 0 ]; then
|
|
echo "No" > $TMP/reply${MCOOKIE}
|
|
fi
|
|
) 9> $INSTLOCKDIR/dialog.lock
|
|
REPLY="$(cat $TMP/reply${MCOOKIE})"
|
|
rm -f $TMP/reply${MCOOKIE} $TMP/tmpmsg${MCOOKIE}
|
|
if [ "$REPLY" = "Quit" ]; then
|
|
exit 99 # EXIT STATUS 99 = ABORT!
|
|
elif [ "$REPLY" = "No" ]; then
|
|
continue # skip the package
|
|
fi
|
|
fi
|
|
|
|
# Make sure there are no symbolic links sitting in the way of
|
|
# incoming package files:
|
|
grep -v "/$" $TMP/tmplist${MCOOKIE} | while read file ; do
|
|
if [ -L "$ROOT/$file" ]; then
|
|
rm -f "$ROOT/$file"
|
|
fi
|
|
done
|
|
rm -f $TMP/tmplist${MCOOKIE}
|
|
|
|
# Write the package file database entry and install the package:
|
|
echo "PACKAGE NAME: $shortname" > $ADM_DIR/packages/$shortname
|
|
echo "COMPRESSED PACKAGE SIZE: $COMPRESSED" >> $ADM_DIR/packages/$shortname
|
|
echo "UNCOMPRESSED PACKAGE SIZE: $UNCOMPRESSED" >> $ADM_DIR/packages/$shortname
|
|
echo "PACKAGE LOCATION: $package" >> $ADM_DIR/packages/$shortname
|
|
# Record the md5sum if that's a selected option:
|
|
if [ $MD5SUM = 1 ]; then
|
|
echo "PACKAGE MD5SUM: $(md5sum $package | cut -f 1 -d ' ')" >> $ADM_DIR/packages/$shortname
|
|
fi
|
|
echo "PACKAGE DESCRIPTION:" >> $ADM_DIR/packages/$shortname
|
|
grep "^$packagebase:" $DESCRIPTION >> $ADM_DIR/packages/$shortname 2> /dev/null
|
|
if [ "$shortname" != "$packagebase" ]; then
|
|
grep "^$shortname:" $DESCRIPTION >> $ADM_DIR/packages/$shortname 2> /dev/null
|
|
fi
|
|
echo "FILE LIST:" >> $ADM_DIR/packages/$shortname
|
|
if [ "$INSTDIR" = "install" ]; then
|
|
( cd $ROOT/ ; $packagecompression -dc | tar --acls --xattrs --xattrs-include='*' --keep-directory-symlink $NO_OVERWRITE -xpvf - | LC_ALL=C sort ) < $package >> $TMP/$shortname 2> /dev/null
|
|
else
|
|
( cd $ROOT/ ; $packagecompression -dc | tar --transform "s,^install$,$INSTDIR," --transform "s,^install/,$INSTDIR/," --acls --xattrs --xattrs-include='*' --keep-directory-symlink $NO_OVERWRITE -xpvf - | LC_ALL=C sort ) < $package >> $TMP/$shortname 2> /dev/null
|
|
fi
|
|
if [ "$( grep '^\./' $TMP/$shortname | wc -l | tr -d ' ')" = "1" ]; then
|
|
# Good. We have a package that meets the Slackware spec.
|
|
cat $TMP/$shortname >> $ADM_DIR/packages/$shortname
|
|
else
|
|
# Some dumb bunny built a package with something other than makepkg. Bad!
|
|
# Oh well. Bound to happen. Par for the course. Fix it and move on...
|
|
# We'll assume it's just a recent tar with an unfiltered filelist with all
|
|
# files prefixed with "./". No guarantees, but this will usually work.
|
|
cat $TMP/$shortname | sed '2,$s,^\./,,' >> $ADM_DIR/packages/$shortname
|
|
fi
|
|
rm -f $TMP/$shortname
|
|
|
|
# It's a good idea to make sure those newly installed libraries are properly
|
|
# activated for use, unless ROOT is pointing somewhere else in which case
|
|
# running ldconfig on the host system won't make any difference:
|
|
if [ "$ROOT" = "" ] && [ -x /sbin/ldconfig ]; then
|
|
( flock 9 || exit 11
|
|
/sbin/ldconfig 2> /dev/null
|
|
) 9> $INSTLOCKDIR/ldconfig.lock
|
|
fi
|
|
|
|
# If we see ALWAYS_RUN_INSTALL_SCRIPT in the install script, then we'll
|
|
# unset PRE_INSTALL_PASS to ensure that the install script will be run even
|
|
# in a pre-install pass. We haven't found any case yet where skipping the
|
|
# install script in the pre-install pass breaks a package upgrade, but we'll
|
|
# add the ability to not skip it so there's a workaround if any corner cases
|
|
# emerge. Sorry to violate YAGNI like this. ;-)
|
|
if [ -f $ROOT/$INSTDIR/doinst.sh ]; then
|
|
if grep -q ALWAYS_RUN_INSTALL_SCRIPT $ROOT/$INSTDIR/doinst.sh ; then
|
|
unset PRE_INSTALL_PASS
|
|
fi
|
|
fi
|
|
|
|
# Run the install script if one exists and this isn't a pre-install pass:
|
|
if [ -f $ROOT/$INSTDIR/doinst.sh -a ! "$PRE_INSTALL_PASS" = "true" ]; then
|
|
if [ "$MODE" = "install" ]; then
|
|
echo "Executing install script for $(basename $package)."
|
|
fi
|
|
# Don't use locking if the script contains "NOLOCK":
|
|
if grep -q NOLOCK $ROOT/$INSTDIR/doinst.sh ; then
|
|
# If bash is available, use sed to convert the install script to use pushd/popd
|
|
# rather than spawning subshells which is slow on ARM. This will also speed up
|
|
# install script processing on any platform.
|
|
if [ -x /bin/bash ]; then
|
|
( cd $ROOT/ ; sed -e's?^( cd \([^;]*\);\(.*\) )$?pushd \1 \&\> /dev/null ; \2 ; popd \&\> /dev/null?g ' $INSTDIR/doinst.sh | /bin/bash )
|
|
else
|
|
( cd $ROOT/ ; sh $INSTDIR/doinst.sh )
|
|
fi
|
|
else # use locking
|
|
# If bash is available, use sed to convert the install script to use pushd/popd
|
|
# rather than spawning subshells which is slow on ARM. This will also speed up
|
|
# install script processing on any platform.
|
|
if [ -x /bin/bash ]; then
|
|
( flock 9 || exit 11
|
|
cd $ROOT/ ; sed -e's?^( cd \([^;]*\);\(.*\) )$?pushd \1 \&\> /dev/null ; \2 ; popd \&\> /dev/null?g ' $INSTDIR/doinst.sh | /bin/bash
|
|
) 9> $INSTLOCKDIR/doinst.sh.lock
|
|
else
|
|
( flock 9 || exit 11
|
|
cd $ROOT/ ; sh $INSTDIR/doinst.sh
|
|
) 9> $INSTLOCKDIR/doinst.sh.lock
|
|
fi
|
|
fi
|
|
fi
|
|
# Clean up the mess...
|
|
if [ -d $ROOT/$INSTDIR ]; then
|
|
if [ -r $ROOT/$INSTDIR/doinst.sh ]; then
|
|
cp $ROOT/$INSTDIR/doinst.sh $ADM_DIR/scripts/$shortname
|
|
chmod 755 $ADM_DIR/scripts/$shortname
|
|
fi
|
|
if [ -r $ROOT/$INSTDIR/douninst.sh ]; then
|
|
cp $ROOT/$INSTDIR/douninst.sh $ADM_DIR/douninst.sh/$shortname
|
|
chmod 755 $ADM_DIR/douninst.sh/$shortname
|
|
echo "$(echo $ADM_DIR | rev | cut -f 1-3 -d / | rev)/douninst.sh/$shortname" >> $ADM_DIR/packages/$shortname
|
|
fi
|
|
# /install/do*inst.sh and /install/slack-* are reserved locations for the package system.
|
|
# Heh, not any more with a recent tar :-)
|
|
( cd $ROOT/$INSTDIR ; rm -f do*inst.sh slack-* 1> /dev/null 2>&1 )
|
|
rmdir $ROOT/$INSTDIR 1> /dev/null 2>&1
|
|
fi
|
|
# If we used a scan directory, get rid of it:
|
|
if [ -d "$TMP/scan${MCOOKIE}" ]; then
|
|
rm -rf "$TMP/scan${MCOOKIE}"
|
|
fi
|
|
rm -f $TMP/tmpmsg${MCOOKIE} $TMP/reply${MCOOKIE}
|
|
if [ "$MODE" = "install" ]; then
|
|
echo "Package $(basename $package) installed."
|
|
fi
|
|
done
|
|
|
|
exit $EXITSTATUS
|