Table of Contents
Slackware Experience
Personal notes on using Slackware. Some old notes have been archived.
Do note that Slackware has a great documentation site.
Getting Slackware
The official way to do this is, of course, to get it from slackware.com.
Personally, I have getslack, a bash script based on (more accurately, a trimmed-down version of) the excellent (he termed it infamous) mirror-slackware-current.sh by Alien Bob. When going down this path, the next step would be to prepare the installation media.
Slackware Installer ISO Image
I no longer need an ISO image (refer to USB installer below). But, I have my slack2iso script (also based on Alien Bob's script) that can help in creating one using the tree downloaded by getslack.
Slackware USB Installer
Alien Bob has provided a script to make/setup/configure a USB-based Slackware installation media. I wanted to do something simpler using the existing files in the Slackware tree that I mirrored using getslack (mentioned above). So, here is how I got that working.
- Create a FAT32 partition- usefdiskand make sure it is bootable (bootable flag enabled)
- usemkdosfs(e.g.mkdosfs -F 32 /dev/sdb1)
 
- Use syslinux to provide bootloader- create a/linux/boot/syslinuxfolder on the USB
- typesyslinux -d /linux/boot/syslinux /dev/sdb1 Note: On newer syslinux, use -ito indicate new installation
- a fileldlinux.sysshould appear in/linux/boot/syslinux
 
- Copy boot facilities from Slackware tree to the media- copy a kernel from slackware tree to/linux/boot(I usedhuge.s)
- copyinitrd.imgandmessage.txtto/linux/boot
- copyisolinux.cfgto/linux/boot/syslinuxassyslinux.cfg
- editsyslinux.cfgaccordingly (initrd, kernel params, etc.)
 
- Copy slackware<64> in the Slackware tree (I used a shorter folder name like slack on the USB)
And… we're done! Now we have a simple Slackware USB Installer and install it on every computer we can get our hands on! 
Note: GPT Disks and EFI
Things moving to (U)EFI and GPT… slowly leaving legacy BIOS and MBR.
Instead of MBR, we use GPT partitioning scheme:
- supports bigger disk
- supports EFI booting (easier to maintain actually :p)
Partition codes are 2-bytes instead (only 1-byte on MBR's partition table). Among the common ones:
- EF00 (EFI System Partition): this is what EFI boot look for- format FAT32mkdosfs -F 32 -n MY1EFI /dev/sdxx 
 
- 0700 (MS Basic Data): Windows Partition- format NTFSmkntfs -f -L MY1WIN /dev/sdxx 
 
- 8300 (Linux filesystem): Linux Partition- format EXT4mkfs.ext4 -L MY1LIN /dev/sdxx 
 
Once boot using EFI, efibootmgr tool can be used (available on Slackware 14.2)
- to create an entry labelledSlackwarewith loader file named\efi\slackware\elilo.efilocated on first partition of first disk (/dev/sda1)efibootmgr -c -d /dev/sda -p 1 -L "Slackware" -l "\efi\slackware\elilo.efi" 
- to delete an entry xxxx (bootnum)efibootmgr -b xxxx -B 
- to re-order boot sequenceefibootmgr -o xxxx,yyyy,zzzz 
Installing Slackware
Installation notes (i.e. packages, configs).
LastUpdated20250112
Basic Install
Using Slackware installer.
- official packages (getslack)- checkout mygetslackconfig file
- without kde (AND xfce if going DE-less)
- removepkg gnuchess xaos xsnow
- removepkg joe nano vim-gvim slackpkg
 
- setup/config- sample elilo.conf- elilo.conf
- prompt #chooser=simple timeout=50 default=Slack image=vmlinuz-huge label=SlackHuge read-only append="root=/dev/sda2 resume=/dev/sda4 vga=normal" image=vmlinuz label=Slack initrd=initrd.gz read-only append="root=/dev/sda2 resume=/dev/sda4 vga=normal"
 
- make sure vim does not create backups (edit/usr/share/vim/vimrc)- or, runvimstart(from my1shell repo)
 
- dmesg no longer allowed for user- appendrc.local←echo 0 > /proc/sys/kernel/dmesg_restrict
- or, runsetup_slack(from my1shell repo)
 
 
- additional packages (getslackpack)
- (alien) openjdk libreoffice libreoffice-dict-en“
 
- additional packages (getslackbuild)- slackware-xdm-theme
- geany unrar
- nss-mdns avahi libdaemon
- actually, scripts from slackbuilds.org (commonly used)
 
DE-less config
This is what I do for a lean (not necessarily minimal, but trimmed to my liking) installation.
- setup acpi from my personal script
- additional packages (getslackbuild)- dmenu slock st wmname
- rox-filer pmount
 
- custom dwm build- using my own build script (which has personalized patches)
 
Updating
To maintain:
- run slack-update- this actually runs 3 scripts (getslack,getslackpack,getslackbuild)
 
- run slackpatch (if required)
- run getslackbuild build -x -i (if required)
Sample configuration files for the above scripts are here.
Using Slackware-current
This is actually NOT recommended for beginners. But, sometimes, the need to use the latest software is unavoidable and this COULD be a solution. Plus, this will add a LOT of COOL-points  
 
Note: I have removed a section on DE-less installation since my current Slackware installations ARE, in fact, DE-less.
Note: I have also removed a section on hijacking other Linux system - this, here, turned out to be VERY similar to what needed to be done.
Installing
[LastUpdated20210620]
I need to use GTK3 version that is newer that the one on 14.2, so I tried the development version (slackware64-current). I have done the same once (pre-11), so I am aware that there can be some issues when doing this. I am happy to say that I AM writing this on a slackware64-current (15.0 beta?) installation on my laptop.
So, this is a little note to my future self (or anybody that may be find this useful DISCLAIMER: Use this at your own risk!). I am doing this while still using Devuan and I want to keep that for backup, in case things go wrong. (On a side note, the reason I use Devuan was because of the GTK3 version.) So, I have an extra partition that I have reformatted and prepared to download the stuffs I need.
- download official packages (getslack)- create download path:<mount-path>/home/share/slackware
- create custom getslack config.getslack
- setVERS=current
- exclude kde & xfce
 
- setup EFI boot- bzImagein kernels/huge.s (rename to- vmlinuz)
- initrd.imgin isolinux/ (this has the slackware setup)
 
- boot and run installation as usual- DO NOT format partition (packages are there!)
- pick packages from mounted path
- manually set kernel to boot (i use huge - generic needs initramfs)
 
- boot newly installed slackware- removegnuchessandxaospackages
- make sure vim does not create backups (editusr/share/vim/vimrc)
- allowdmesgfor user- appendetc/rc.d/rc.local←echo 0 > /proc/sys/kernel/dmesg_restrict
 
- just for personal reference, some useful info on using nmclinmcli r[adio] wifi nmcli r[adio] wifi on nmcli d[evice] wifi list nmcli d[evice] wifi connect <ssid> password <pass> ifname <wlan0> nmcli c[onnection] show nmcli c[onnection] down <ssid> nmcli c[onnection] up <ssid> 
- customizeetc/xdg/user-dirs.defaults(standard default paths)
- create user
 
- get additional packages (getslackpack)- luckily, alienBob's repo 'supports' current
- create custom getslackpack config.getslackpack
- (alien) openjdk libreoffice libreoffice-dict-en“
 
- get additional packages (getslackbuild)
- i want to use dwm- using my own custom build script (which has personalized patches)
- my dwm xinitrc will run loginctl hibernate when battery<30% (→ what i need on my current laptop)
 
Updating
To maintain:
note: my libmy1slack library will detect current when etc/slackware-version has '+' suffix. this sign will disappear when -current is near to a stable release.
- run slack-update as usual- when-currentgoing stable, useSLACKVERS=current slack-update
 
- run slack-current instead ofslackpatch- when-currentgoing stable, use-fswitch
- to see removed packages, use slackview (i.e.SLACKVERS=current slackview find –alien)
 
- update those installed using getslackbuild if needed
Special Needs
Sometimes these can be useful.
Slackware in chroot
20110621 I want to have a 32-bit system running in chroot environment on my Slackware64. I've used such system on Debian using schroot…
20110906 I managed to do this as published here…
20120518 Minor change to the fstab entry for dev, which needs an rbind option so that the pty inside can be valid! Discussed here.
20120524 This is now part of my slackstuff collection (now known as my1shell)… in form of a script called slackroot.
20121031 The path to the chroot installation MUST ALL BE owned by root - or else, users will get a Write failed: Broken pipe error.
TODO A how-to on creating 32-bit chroot on 64-bit Slackware using slackroot script.
- slack_chroot32.txt
- - on my pure slack64 (maintained using getslack/getslackpack) $ ARCH=i686 getslack - create root filesystem using 32-bit packages # slackroot /opt/chroot32 --arch x86 --desk -x - copy user/group info from 64-bit system to chroot32 = will maintain its own login info! # preproot --init /opt/chroot32 - mount bind 'system' paths # preproot /opt/chroot32 - ssh into system to use 32-bit chroot # ssh user@127.0.0.1 - unmount bind 'system' paths # preproot --done /opt/chroot32 
Slackware Multilib
Main references are here and here.
- Basically, need to have C library and compiler capable of multilib. I usegetslackpackto download required packages from Eric's multilib site. Install as instructed.
- I already have a 32-bit Slackware tree downloaded usinggetslackwhich I use for my 32-bit chroot installation. I usemassconvert32.shscript on this tree. Themassconvert32.shscript can be used to update as well (built packages are not rebuilt). Install as instructed.
- Myslackpatchscript has been updated to handle 'blacklisted' 64-bit versions and 'upgraded' compat32 packages
Update20180903 Update20250326
Read here. I now have a more specific script to get multilib stuff (previously part of getslackpack script),
- use getslack-multilib to download alien_bob's multilib stuff- compat32-tools glibc(&friends) gcc(&friends) [multilib packages]
- compat32 library packages [32-bit packages]
 
- upgrade pure-64 glibc/gcc packages counterparts- upgradepkg –reinstall –install-new *.t?z
- note: this includes compat32-tools package (helper scripts, noarch)
 
- install 32-bit layer support libraries- upgradepkg –install-new slackware64-compat32/*-compat32/*.t?z
- obviously, can be used to upgrade as well
 
Configure slackpatch to check/ignore multilib stuff
- dot-slackpatch
- PKG_IGNORED="ffmpeg" # ignoring these standard packages => multilib! PKG_IGNORED="$PKG_IGNORED aaa_glibc-solibs" PKG_IGNORED="$PKG_IGNORED gcc gcc-brig gcc-g++ gcc-gdc gcc-gfortran" PKG_IGNORED="$PKG_IGNORED gcc-gnat gcc-go gcc-objc" PKG_IGNORED="$PKG_IGNORED glibc glibc-i18n glibc-profile" 
Slackware Upgrade
For reference.
Upgrading 14.1 to 14.2
A bash shell script I used to upgrade from 14.1 to 14.2.
- upgrade_14-1_to_14-2.sh
- #!/bin/bash # - upgrade 14.1 to 14.2 SLACKVERS="14.2" # setup path to slackware tree SLACKROOT=${SLACKROOT:="$(pwd)"} [ -z "$SLACKARCH" ] && [ -n "$ARCH" ] && SLACKARCH=$ARCH SLACKARCH=${SLACKARCH:="$(uname -m)"} SLACKSUFX=${SLACKSUFX:=""} [ "$SLACKARCH" == "x86_64" ] && SLACKSUFX="64" SLACKFULL=${SLACKFULL:="slackware${SLACKSUFX}"} [ -z "$SLACKVERS" ] && [ -n "$RELEASE" ] && SLACKVERS=$RELEASE SLACKVERS=${SLACKVERS:="current"} SLACKRELS=${SLACKFULL}-${SLACKVERS} SLACKPATH=${SLACKROOT}/${SLACKRELS} # step 1 upgradepkg ${SLACKPATH}/${SLACKFULL}/a/glibc-solibs-*.txz # step 2 upgradepkg ${SLACKPATH}/${SLACKFULL}/a/pkgtools-*.txz upgradepkg ${SLACKPATH}/${SLACKFULL}/a/tar-*.txz upgradepkg ${SLACKPATH}/${SLACKFULL}/a/xz-*.txz upgradepkg ${SLACKPATH}/${SLACKFULL}/a/findutils-*.txz # step 3 for dir in a ap d k l n t tcl x xap xfce ; do do_path=${SLACKPATH}/${SLACKFULL}/$dir [ ! -d $do_path ] && continue ( cd $do_path ; upgradepkg --install-new *.t?z ) done # step 4 removepkg ConsoleKit apmd bluez-hcidump cxxlibs foomatic-filters \ gnome-icon-theme imlib kdeadmin kdenetwork kdesdk kdetoys kwallet \ lesstif libelf libjpeg libxfcegui4 networkmanagement obex-data-server \ obexfs open-cobol oxygen-gtk3 phonon-mplayer phonon-xine pil portmap \ procps qca-cyrus-sasl qca-gnupg qca-ossl udev xchat xf86-input-aiptek \ xf86-video-modesetting xfce4-mixer xfce4-volumed xfwm4-themes # step 5 # - run chknew # step 7 # - check boot config 
Slackware System
Useful system level notes.
Listing Packages
Simply list files in /var/log/packages (path is actually a link to /var/lib/pkgtools/packages/). 
# ls -l /var/log/packages/
List full package name (with version) only
# for that in $(ls /var/log/packages/) ; do echo $that ; done | sort
Find installed packages that are not in Slackware tree
slackfull=slackware64-15.0 ; slacktree=/home/share/slackware/$slackfull ; for pkg in $(ls /var/log/packages/) ; do pkgf=$(find $slacktree/ -name "${pkg}.txz") ; [ -f "$pkgf" ] && continue ; echo "** Package '$pkg' is alien!" ; done
 This can also be done using slackview script (in my1shell repo) 
# slackview find --alien
View information on specific package
# slackview find [pkg_name]
To list currently installed packages (to be used in my1live)
- get all installed packages# slackview file --name pkgs.txt --installed --insert 
- sort based on software sets# slackview file --name pkgs.txt --sort 
- remove those already selected for my1liveslackview file --name pkgs.txt --dups curr.list 
- rename pkgs.txt to my1live list (e.g. XXmore.list)
Building Custom Kernel
- run shell script (getlinux)
- select version, download source
- extract at/usr/src/(e.g. linux-4.4.199)
- copy a config from/boot# cp /boot/config-generic? > .config 
- use that config# make oldconfig 
- configure build# make menuconfig 
- build the kernel# make -j4 bzImage 
- build/install modules# make -j4 modules && make modules_install - modules_installrequires root, obviously!
 
- copy (as root) kernelcp arch/x86/boot/bzImage /boot/vmlinuz-generic-4.14.12 cp System.map /boot/System.map-generic-4.14.12 cp .config /boot/config-generic-4.14.12 
- generate initrd if using genericmkinitrd -c -k 4.14.12 -f ext4 -r /dev/sda3 -m ext4 -u -o /boot/initrd.gz - a useful initrd generator script IS available
- run/usr/share/mkinitrd/mkinitrd_command_generator.sh
- then run the generated/recommended command
- checkout the-Poption if required
 
Slackware Desktop
Little tips for better Slackware desktop experience. Most of these can be used in other Linux distributions as well.
Mplayer (gmplayer) runs without video window
Double-clicking in file manager (Thunar) shows no video (audio is ok, so program is running). Running mplayer from command line is fine. Turns out gui version is gmplayer - running from console shows this error message
Failed to open VDPAU backend libvdpau_va_gl.so
So, just edit ~/.mplayer/gui.conf, find the line for vo_driver and set it to gl. Show be ok after that… at least in my case it is.
Mplayer and Xscreensaver
Note: NOT tested… just found this 
Although the mplayer setting to disable xscreensaver has been selected, xscreensaver still runs!
Possible Solution: Edit ~/.mplayer/config
heartbeat-cmd="xscreensaver-command -deactivate >/dev/null 2>&1"
Login issue
When using xdm, login fails sometimes with error message … Unable to establish ICE listener…
- appendrc.local←rm -rf /tmp/.ICE-unix/*
Audio issue when using ALSA
The solution is here.
- in short, ALSA using the HDMI output as default
- use alsamixer, [F6] select the card (the one that is NOT HDMI) and make sure output is not muted
- use aplay -l to identify the card/slot# and device#
- useaplay -D plughw:<card/slot#>,<device#> <WAV file>to test
- modifyasound.confin etc or~/.asoundrcto fix this (sample below)- asound.conf
- pcm.!default { type hw card <card/slot#> } ctl.!default { type hw card <card/slot#> }
 
Low volume when using ALSA
As seen here…
Check asound.conf in etc: 
  pcm.!default {
      type plug
      slave.pcm "softvol"
  }
  pcm.softvol {
      type softvol
      slave {
          pcm "dmix"
      }
      control {
          name "Pre-Amp"
          card 0
      }
      min_dB -5.0
      max_dB 20.0
      resolution 6
  }
Sometimes need type in pcm.!default to be hw
Slackware Applications
Running applications (@software) on Slackware… most are applicable to all distributions.
'Hidden' Application
There are a couple (a few?)of applications that I thought have great features but relatively unknown (I only knew about them after looking for specific solution). Here they are:
- xfig - nice app to create figures for use with latex
- xpaint - can do screen capture (xpaint -snapshot)
Apache (web server) Setup
Modify httpd config file:
- change document root to a folder my main user have full access- also create a link to it from my user account
 
- allow php to be indexed ⇒ add to directory index in dir_module
- enable php (towards the end of the file) ⇒ include mod_php.conf
- enable mod_rewrite (API server?) ⇒ LoadModule … mod_rewrite.so
- optional: set serveradmin email and servername
- optional: to only serve locally, set listen localhost:80 ???
More modifications for https:
- enable loadmodule mod_ssl.so
- enable loadmodule mod_socache_shmcb.so
- generate private key:- openssl genrsa -out privkey.pem 2048 
- rsa private key with 2048-bit long modulus written to file
 
- generate cert:- openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095 
 
- include httpd-ssl.conf- modify httpd-ssl.conf accordingly…
 
mariadb/mysql Setup
- runmysql_install_db 
- make sure permision given to user mysqlchown -R mysql:mysql /var/lib/mysql 
- start daemonrc.mysqld
- run/usr/bin/mysql_secure_installation 
- create specific database for specific appcreate database app_db; 
- create specific user for specific app and grant all accessgrant all privileges on app_db.* to 'user_app'@'localhost' identified by 'pass_app'; 
- just formality, runflush privileges; 
- to additionally create specific user for specific appcreate user 'user_app'@'localhost' identified by 'pass_app'; 
- recover root password:
- stop daemonrc.mysqld
- run# mysqld_safe --skip-grant-tables & # mysql -u root $ mysql -uroot -p mysql> use mysql; mysql> update user set password=PASSWORD('<newpass>') where User='root'; mysql> flush privileges; mysql> exit
Backup a DB:
mysqldump -p -u user userdb > userapp-$(date +%Y%m%d%H%M%S).sql
TeXLive Install/Setup
The default tetex is usable, but it is no longer maintained and some new packages are not available.
The recommended TeX distribution is TeXLive.
- Download from here- get Unix Installer
- extract path:/home/share/tool/texlive
 
- Execute./install-tl -gui - install path:/home/share/tool/texlive/YYYY(currently, YYYY=2020)
- select basic, then customize (e.g. lang:en, graphics, math, etc.)
- setup environment variableTL_VERS="2020" TL_PATH="/home/share/tool/texlive/${TL_VERS}" export PATH=${TL_PATH}/bin/x86_64-linux:$PATH export MANPATH=${TL_PATH}/texmf-dist/doc/man:$MANPATH export INFOPATH=${TL_PATH}/texmf-dist/doc/info:$INFOPATH 
- setup tlmgr (tlmgr option repository ctan)
 
- Run managertlmgr --gui - needs perl-tk
- to get collection of a packagetlmgr show <package> 
 
rsync server
- creatersyncd.confin etc- rsync.conf
- max connections = 2 log file = /var/log/rsync.log timeout = 300 [share] comment = Shared Stuff path = /home/share read only = yes list = yes hosts allow = 192.168.3.0/24 uid = nobody gid = nobody #auth users = pub #secrets file = etc/rsyncd.secrets 
 - modify subnet mask address for host allow accordingly
 
- ininetd.conf(etc), insertrsync stream tcp nowait root /usr/bin/rsync rsync --daemon 
- inservices(etc), insertrsync 873/tcp 
- creatersyncd.secretsin etc- rsyncd.secrets
- pub:pub 
 
- start rsync daemon/usr/bin/rsync --daemon --config=etc/rsyncd.conf 
Steam on Slack64 (in chroot32)
on an x86_64 machine,
- install libtxc_dxtn package from slackbuilds.org (64-bit)
- use 'slackroot' to create 32-bit chroot environment (chroot32)- target for desktop
 
- ssh into localhost to enter chroot32 as normal user- remember to run 'preproot' (as root) prior to that
- … and 'preproot –release' when done
 
- install packages- install alien_bob's steamclient package
- install libtxc_dxtn package from slackbuilds.org (32-bit)
 
- run 'linux32' to create an official 32-bit environment
- run 'steam -tcp'
Issues
Issues when running Slackware…
Libreoffice
- alien_bob's libreoffice cannot run- gotunspecified application error
 
- found a fix in lq forum- look for graphic driver used$ lspci -vv | sed -n '/VGA compatible/,/^$/ p' 
- e.g. for i915, doexport MESA_LOADER_DRIVER_OVERRIDE=i915 
 
Extra Notes
Some things to note…
20210620 Slackware's CPU frequency scaling works (checkout rc.cpufreq) - just to remind myself, no need to look into this!
Admin-stuff for non-root user
To allow non-root users basic admin (poweroff,reboot,etc.), add them to power group and insert the following to sudoers.
%power ALL=(ALL) NOPASSWD:/sbin/poweroff %power ALL=(ALL) NOPASSWD:/sbin/reboot %power ALL=(ALL) NOPASSWD:/usr/sbin/pm-suspend %power ALL=(ALL) NOPASSWD:/usr/sbin/pm-hibernate %power ALL=(ALL) NOPASSWD:/usr/sbin/pm-powersave
Note: The pm-* binaries (pm-utils) are no longer available on Slackware 15.0
Note20250112: use loginctl on Slackware 15.0 - no need to add sudoers
Multicast DNS @ Zeroconf
- install nss-mdns (requires avahi, which requires libdaemon)
- save nss config (in etc)- mv nsswitch.conf nsswitch.conf-orig
 
- use provided nss config- cp nsswitch.conf-mdns nsswitch.conf
 
- run daemon at startuprc.avahidaemonandrc.avahidnsconfd
