diff options
author | Eric Hameleers <alien@slackware.com> | 2015-11-28 01:52:06 +0100 |
---|---|---|
committer | Eric Hameleers <alien@slackware.com> | 2015-11-28 01:52:06 +0100 |
commit | 4d5cdc379e338c1c28f4d7d09226d4167a3f9e1e (patch) | |
tree | 95eba4e47f473c238361f19750cbd7d392a333e1 | |
download | liveslak-4d5cdc379e338c1c28f4d7d09226d4167a3f9e1e.tar.gz liveslak-4d5cdc379e338c1c28f4d7d09226d4167a3f9e1e.tar.xz |
Slackware Live Edition: initial commit.Beta2
This is Beta 2.
Read http://alien.slackbook.org/blog/slackware-live-edition-beta-2
for all the details.
38 files changed, 4393 insertions, 0 deletions
diff --git a/blueSW-128px.png b/blueSW-128px.png Binary files differnew file mode 100644 index 0000000..7eea5a2 --- /dev/null +++ b/blueSW-128px.png diff --git a/blueSW-64px.png b/blueSW-64px.png Binary files differnew file mode 100644 index 0000000..c7f42db --- /dev/null +++ b/blueSW-64px.png diff --git a/iso2usb.sh b/iso2usb.sh new file mode 100644 index 0000000..79cf944 --- /dev/null +++ b/iso2usb.sh @@ -0,0 +1,312 @@ +#!/bin/bash +# $Id: iso2usb.sh,v 1.5 2015/11/22 22:53:01 root Exp root $ +# +# Copyright 2015 Eric Hameleers, Eindhoven, NL +# 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. + +# Be careful: +set -e + +# Set to '1' if the script should not ask any questions: +UNATTENDED=0 + +# By default do not show file operations in detail: +VERBOSE=0 + +# Seconds to add to the initrd as wait-for-root value: +WAIT=5 + +# Define ahead of time, so that cleanup knows about them: +IMGDIR="" +EFIMNT="" +ISOMNT="" +USBMNT="" + +# Clean up in case of failure: +cleanup() { + # Clean up by unmounting our loopmounts, deleting tempfiles: + echo "--- Cleaning up the staging area..." + # During cleanup, do not abort due to non-zero exit code: + set +e + sync + [ -n "${EFIMNT}" ] && ( umount -f ${EFIMNT} ; rmdir $EFIMNT ) + [ -n "${ISOMNT}" ] && ( umount -f ${ISOMNT} ; rmdir $ISOMNT ) + [ -n "${USBMNT}" ] && ( umount -f ${USBMNT} ; rmdir $USBMNT ) + [ -n "${IMGDIR}" ] && ( rm -rf $IMGDIR ) + set -e +} +trap 'echo "*** $0 FAILED at line $LINENO ***"; cleanup; exit 1' ERR INT TERM + +showhelp() { +cat <<EOT +# +# Purpose: to transfer the content of Slackware's Live ISO image +# to a standard USB thumb drive (which will be formatted and wiped!) +# and thus create a Slackware Live USB media. +# +# Your USB thumb drive may contain data! +# This data will be *erased* ! +# +# $(basename $0) accepts the following parameters: +# -h|--help This help +# -i|--infile <filename> Full path to the ISO image file +# -o|--outdev <filename> The device name of your USB drive +# -u|--unattended Do not ask any questions +# -v|--verbose Show verbose messages +# -w|--wait<number> Pause boot <number> seconds to ititialize USB + +# +# Example: +# +# $(basename $0) -i ~/download/slackware64-live-14.2.iso -o /dev/sdX +# +EOT +} + +# Parse the commandline parameters: +if [ -z "$1" ]; then + showhelp + exit 1 +fi +while [ ! -z "$1" ]; do + case $1 in + -h|--help) + showhelp + exit + ;; + -i|--infile) + SLISO="$(cd $(dirname $2); pwd)/$(basename $2)" + shift 2 + ;; + -o|--outdev) + TARGET="$2" + shift 2 + ;; + -u|--unattended) + UNATTENDED=1 + shift + ;; + -v|--verbose) + VERBOSE=1 + RVERBOSE=" -v --progress " + shift + ;; + -w|--wait) + WAIT="$2" + shift 2 + ;; + *) + echo "*** Unknown parameter '$1'!" + exit 1 + ;; + esac +done + +# Before we start: +[ -x /bin/id ] && CMD_ID="/bin/id" || CMD_ID="/usr/bin/id" +if [ "$($CMD_ID -u)" != "0" ]; then + echo "*** You need to be root to run $(basename $0)." + exit 1 +fi + +# More sanity checks: +if [ -z "$TARGET" -o -z "$SLISO" ]; then + echo "*** You must specify both the Live ISO filename and the USB devicename!" + exit 1 +fi + +if [ ! -f $SLISO ]; then + echo "*** This is not a useable file: '$SLISO' !" + exit 1 +fi + +if [ ! -b $TARGET ]; then + echo "*** Not a block device: '$TARGET' !" + exit 1 +elif [ "$(echo ${TARGET%[0-9]})" != "$TARGET" ]; then + echo "*** You need to point to the USB device, not a partition ($TARGET)!" + exit 1 +fi + +# Are all the required not-so-common add-on tools present? +PROG_MISSING="" +for PROGN in cpio extlinux fdisk mkdosfs sgdisk ; do + if ! which $PROGN 1>/dev/null 2>/dev/null ; then + PROG_MISSING="${PROG_MISSING}-- $PROGN\n" + fi +done +if [ ! -z "$PROG_MISSING" ] ; then + echo "-- Required program(s) not found in PATH!" + echo -e ${PROG_MISSING} + echo "-- Exiting." + exit 1 +fi + +# Confirm wipe: +cat <<EOT +# +# We are going to format this device (erase all data) - '$TARGET': +# Vendor : $(cat /sys/block/$(basename $TARGET)/device/vendor) +# Model : $(cat /sys/block/$(basename $TARGET)/device/model) +# Size : $(( $(cat /sys/block/$(basename $TARGET)/size) / 2048)) MB +# +# FDISK OUTPUT: +EOT +/sbin/fdisk -l $TARGET | while read LINE ; do echo "# $LINE" ; done + +if [ $UNATTENDED -eq 0 ]; then + cat <<EOT + +*** *** +*** If this is the wrong drive, then press CONTROL-C now! *** +*** *** + +EOT + read -p "Or press ENTER to continue: " JUNK + # OK... the user was sure about the drive... +fi + +# Get the LABEL used for the ISO: +LIVELABEL=$(blkid -s LABEL -o value ${SLISO}) + +# Use sgdisk to wipe and then setup the USB device: +# - 1 MB BIOS boot partition +# - 200 MB EFI system partition +# - Let Slackware have the rest +# - Make the Linux partition "legacy BIOS bootable" +# The first sgdisk command is allowed to have non-zero exit code: +sgdisk -Z $TARGET || true +sgdisk -og $TARGET || true +sgdisk \ + -n 1:2048:4095 -c 1:"BIOS Boot Partition" -t 1:ef02 \ + -n 2:4096:413695 -c 2:"EFI System Partition" -t 2:ef00 \ + -n 3:413696:0 -c 3:"Slackware Linux" -t 3:8300 \ + $TARGET +sgdisk -A 3:set:2 $TARGET +# Show what we did to the USB stick: +sgdisk -p -A 3:show $TARGET + +# Create filesystems: +# Not enough clusters for a 32 bit FAT: +mkdosfs -s 2 -n "DOS" ${TARGET}1 +mkdosfs -F32 -s 2 -n "EFI" ${TARGET}2 +# KDE tends to automount.. so try an umount: +if mount |grep -qw ${TARGET}3 ; then umount ${TARGET}3 || true ; fi +mkfs.ext4 -F -F -L "${LIVELABEL}" -m 0 ${TARGET}3 +tune2fs -c 0 -i 0 ${TARGET}3 + +# Create temporary mount points for the ISO file: +mkdir -p /mnt +EFIMNT=$(mktemp -d -p /mnt -t alienefi.XXXXXX) +if [ ! -d $EFIMNT ]; then + echo "*** Failed to create a temporary mount point for the ISO!" + exit 1 +else + chmod 711 $EFIMNT +fi +ISOMNT=$(mktemp -d -p /mnt -t alieniso.XXXXXX) +if [ ! -d $ISOMNT ]; then + echo "*** Failed to create a temporary mount point for the ISO!" + exit 1 +else + chmod 711 $ISOMNT +fi + +# Find out if the ISO contains an EFI bootloader and use it: +EFIOFFSET=$(fdisk -lu ${SLISO} |grep EFI |tr -s ' ' | cut -d' ' -f 2) +if [ -n "$EFIOFFSET" ]; then + # Mount the EFI partition so we can retrieve the EFI bootloader: + mount -o loop,offset=$((512*$EFIOFFSET)) ${SLISO} ${EFIMNT} + if [ ! -f ${EFIMNT}/EFI/BOOT/bootx64.efi ]; then + echo "-- Note: UEFI boot file 'bootx64.efi' not found on ISO." + echo "-- UEFI boot will not be supported" + fi +fi + +# Create a temporary mount point for the USB device: +mkdir -p /mnt +USBMNT=$(mktemp -d -p /mnt -t alienusb.XXXXXX) +if [ ! -d $USBMNT ]; then + echo "*** Failed to create a temporary mount point for the USB device!" + exit 1 +else + chmod 711 $USBMNT +fi + +# Mount the EFI partition and copy the EFI boot image to it: +mount -t vfat -o shortname=mixed ${TARGET}2 ${USBMNT} +mkdir -p ${USBMNT}/EFI/BOOT +cp ${EFIMNT}/EFI/BOOT/bootx64.efi ${USBMNT}/EFI/BOOT +umount ${USBMNT} +umount ${EFIMNT} + +# Mount the Linux partition: +mount -t auto ${TARGET}3 ${USBMNT} + +# Loop-mount the ISO (or 1st partition if this is a hybrid ISO): +mount -o loop ${SLISO} ${ISOMNT} + +# Copy the ISO content into the USB Linux partition: +echo "--- Copying files from ISO to USB... takes some time." +rsync -a ${RVERBOSE} ${ISOMNT}/* ${USBMNT}/ + +# Create a temporary extraction directory for the initrd: +mkdir -p /mnt +IMGDIR=$(mktemp -d -p /mnt -t alienimg.XXXXXX) +if [ ! -d $IMGDIR ]; then + echo "*** Failed to create a temporary extraction directory for the initrd!" + exit 1 +else + chmod 711 $IMGDIR +fi + +# USB boot medium needs a few seconds boot delay or else the overlay will fail: +echo "--- Extracting Slackware initrd and adding rootdelay for USB..." +cd ${IMGDIR} +gunzip -cd ${USBMNT}/boot/initrd.img |cpio -i -d -H newc --no-absolute-filenames +echo ${WAIT} > wait-for-root +echo "--- Compressing the initrd image again:" +chmod 0755 ${IMGDIR} +find . |cpio -o -H newc |gzip > ${USBMNT}/boot/initrd.img +cd - 2>/dev/null + +# Create persistence directory: +mkdir -p ${USBMNT}/persistence + +# Use extlinux to make the USB device bootable: +echo "--- Making the USB drive '$TARGET' bootable using extlinux..." +mv ${USBMNT}/boot/syslinux ${USBMNT}/boot/extlinux +mv ${USBMNT}/boot/extlinux/isolinux.cfg ${USBMNT}/boot/extlinux/extlinux.conf +rm ${USBMNT}/boot/extlinux/isolinux.* +extlinux --install ${USBMNT}/boot/extlinux + +# Unmount/remove stuff: +cleanup + +# Install a GPT compatible MBR record: +if [ -f /usr/share/syslinux/gptmbr.bin ]; then + cat /usr/share/syslinux/gptmbr.bin > ${TARGET} +else + echo "*** Failed to make USB device bootable - 'gptmbr.bin' not found!" + exit 1 +fi + +# THE END + diff --git a/languages b/languages new file mode 100644 index 0000000..3b5f20a --- /dev/null +++ b/languages @@ -0,0 +1,12 @@ +#code,name,kbd,tz,locale +be,belgisch,be-latin1,Europe/Brussels,nl_BE.utf8 +br,brazil,br-latin1-us,America/Sao_Paulo,pt_BR.utf8 +gb,british,uk,Etc/GMT,en_GB.utf8 +de,deutsch,de-latin1,Europe/Berlin,de_DE.utf8 +es,espanol,es,Europe/Madrid,es_ES.utf8 +fr,francais,fr,Europe/Paris,fr_FR.utf8 +it,italiano,it,Europe/Rome,it_IT.utf8 +ja,japanese,jp106,Asia/Tokyo,ja_JP.utf8 +nl,nederlands,nl,Europe/Amsterdam,nl_NL.utf8 +ru,russian,ru_win,Europe/Moscow,ru_RU.utf8 +us,us american,us,US/Pacific,en_US.utf8 diff --git a/liveinit b/liveinit new file mode 100755 index 0000000..624f3ba --- /dev/null +++ b/liveinit @@ -0,0 +1,442 @@ +#!/bin/ash +# +# Copyright 2004 Slackware Linux, Inc., Concord, CA, USA +# Copyright 2007, 2008, 2009, 2010, 2012 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2015 Eric Hameleers, Eindhoven, NL +# 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. +# +################################################################################## +# Changelog +# 10-Dec-2012 <mozes@slackware.com> +# * Added support for the official Kernel parameters to select root filesystem +# type ('rootfstype') and pause before attempting to mount the root filesystem +# ('rootdelay'). The original parameters may continue to be used. +# 23-Oct-2015 <alien@slackware.com> +# * Modified for booting as a Live filesystem. +################################################################################## + +# The ISO creation script will create a filesystem with this label. +# Nevertheless, the user may have copied the ISO content to a different device. +MEDIALABEL="@MEDIALABEL@" + +# By default, let the media determine if we can write persistent changes: +VIRGIN=0 + +INITRD=$(cat /initrd-name) +WAIT=$(cat /wait-for-root) +KEYMAP=$(cat /keymap) +INIT=/sbin/init + +PATH="/sbin:/bin:/usr/sbin:/usr/bin" + +# Mount /proc and /sys: +mount -n proc /proc -t proc +mount -n sysfs /sys -t sysfs +mount -n tmpfs /run -t tmpfs -o mode=0755 + +if grep devtmpfs /proc/filesystems 1>/dev/null 2>/dev/null ; then + DEVTMPFS=1 + mount -n devtmpfs /dev -t devtmpfs +fi + +# Parse command line +for ARG in $(cat /proc/cmdline); do + case $ARG in + 0|1|2|3|4|5|6|S|s|single) + RUNLEVEL=$ARG + ;; + hostname=*) + LIVE_HOSTNAME=$(echo $ARG | cut -f2 -d=) + ;; + init=*) + INIT=$(echo $ARG | cut -f2 -d=) + ;; + kbd=*) + KEYMAP=$(echo $ARG | cut -f2 -d=) + ;; + livepw=*) + LIVEPW=$(echo $ARG | cut -f2 -d=) + ;; + load=*) + LOAD=$(echo $ARG | cut -f2 -d=) + ;; + noload=*) + NOLOAD=$(echo $ARG | cut -f2 -d=) + ;; + locale=*) + LOCALE=$(echo $ARG | cut -f2 -d=) + ;; + nop) + VIRGIN=1 + ;; + rescue) + RESCUE=1 + ;; + swap) + USE_SWAP=1 + ;; + rootpw=*) + ROOTPW=$(echo $ARG | cut -f2 -d=) + ;; + tz=*) + TZ=$(echo $ARG | cut -f2 -d=) + ;; + waitforroot=*|rootdelay=*) + WAIT=$(echo $ARG | cut -f2 -d=) + ;; + esac +done + +# If udevd is available, use it to generate block devices +# else use mdev to read sysfs and generate the needed devices +if [ -x /sbin/udevd -a -x /sbin/udevadm ]; then + /sbin/udevd --daemon --resolve-names=never + /sbin/udevadm trigger --subsystem-match=block --action=add + /sbin/udevadm settle --timeout=10 +else + [ "$DEVTMPFS" != "1" ] && mdev -s +fi + +# Load kernel modules (ideally this was already done by udev): +if [ ! -d /lib/modules/$(uname -r) ]; then + echo "No kernel modules found for Linux $(uname -r)." +elif [ -x ./load_kernel_modules ]; then # use load_kernel_modules script: + echo "${INITRD}: Loading kernel modules from initrd image:" + . ./load_kernel_modules 1>/dev/null 2>/dev/null +else # load modules (if any) in order: + if ls /lib/modules/$(uname -r)/*.*o 1> /dev/null 2> /dev/null ; then + echo "${INITRD}: Loading kernel modules from initrd image:" + for module in /lib/modules/$(uname -r)/*.*o ; do + /sbin/modprobe $module 1>/dev/null 2>/dev/null + done + unset module + fi +fi + +# Sometimes the devices need extra time to be available. +# A root filesystem on USB is a good example of that. +sleep $WAIT +# Fire at least one blkid: +blkid 1>/dev/null 2>/dev/null + +# Load a custom keyboard mapping: +if [ -n "$KEYMAP" ]; then + echo "${INITRD}: Loading '$KEYMAP' keyboard mapping:" + tar xzOf /etc/keymaps.tar.gz ${KEYMAP}.bmap | loadkmap +fi + +if [ "$RESCUE" = "" ]; then + # Initialize RAID: + if [ -x /sbin/mdadm ]; then + # If /etc/mdadm.conf is present, udev should DTRT on its own; + # If not, we'll make one and go from there: + if [ ! -r /etc/mdadm.conf ]; then + /sbin/mdadm -E -s >/etc/mdadm.conf + /sbin/mdadm -S -s + /sbin/mdadm -A -s + # This seems to make the kernel see partitions more reliably: + fdisk -l /dev/md* 1> /dev/null 2> /dev/null + fi + fi + + # Scan for btrfs multi-device filesystems: + if [ -x /sbin/btrfs ]; then + /sbin/btrfs device scan + fi + + # --------------------------------------------------------------------- # + # SLACKWARE LIVE - START # + # --------------------------------------------------------------------- # + + # We need a mounted filesystem here to be able to do a switch_root later, + # so we create one in RAM: + mount -t tmpfs -o defaults none /mnt + + # Find the Slackware Live media. + # We iterate a maximum of 10 times to give USB devices a chance to be seen + # by the kernel. Set the WAIT variable to increase the iterations. + mkdir /mnt/media + for ITER in $(seq 1 ${WAIT:-10}); do + # Filter out the block devices, only look at partitions at first: + LIVEMEDIA=$(blkid |grep LABEL="\"$MEDIALABEL\"" |cut -d: -f1 |grep "[0-9]$") + if [ ! -z "$LIVEMEDIA" ]; then + # That was easy... we found the media straight away. + # Determine filesystem type ('iso9660' means we found a CDROM/DVD) + LIVEFS=$(blkid $LIVEMEDIA |rev |cut -d'"' -f2 |rev) + mount -t auto -o ro $LIVEMEDIA /mnt/media + else + LIVEMEDIA=$(blkid |grep LABEL="\"$MEDIALABEL\"" |cut -d: -f1 |grep -v "[0-9]$") + if [ ! -z "$LIVEMEDIA" ]; then + # We found a block device with the correct label (non-UEFI media). + # Determine filesystem type ('iso9660' means we found a CDROM/DVD) + LIVEFS=$(blkid $LIVEMEDIA |rev |cut -d'"' -f2 |rev) + mount -t auto -o ro $LIVEMEDIA /mnt/media + else + # Bummer... label not found; the ISO was extracted to a different device. + # Separate partitions from block devices, look at partitions first: + for SLDEVICE in $(blkid |cut -d: -f1 |grep "[0-9]$") $(blkid |cut -d: -f1 |grep -v "[0-9]$") ; do + mount -t auto -o ro $SLDEVICE /mnt/media + if [ -d /mnt/media/liveslak ]; then + # Found our media! + LIVEMEDIA=$SLDEVICE + LIVEFS=$(blkid $LIVEMEDIA |rev |cut -d'"' -f2 |rev) + break + else + umount $SLDEVICE + unset SLDEVICE + fi + done + fi + fi + if [ -n "$LIVEMEDIA" ]; then + # Gotcha! + break + fi + sleep 1 + done + + if [ ! -z "$LIVEMEDIA" ]; then + echo "${INITRD}: Live media found at ${LIVEMEDIA}." + else + echo "${INITRD}: No live media found... trouble ahead." + echo "${INITRD}: Try adding \"rootdelay=20\" to the boot command." + fi + + # Start assembling our live system components below /mnt/live : + mkdir /mnt/live + + # Mount our squashed modules (.sxz extension). + mkdir /mnt/live/modules + # Modules were created in specific order and will be mounted in that order. + # In the lowerdirs parameter for the overlay, the module with the highest + # number (i.e. created last) will be leftmost in a colon-separated list: + RODIRS="" + # First, the base Slackware system components: + for MODLOC in $(ls -1 /mnt/media/liveslak/system/*.sxz) ; do + MODBASE="$(basename ${MODLOC} .sxz)" + mkdir /mnt/live/modules/${MODBASE} + mount -t squashfs -o loop ${MODLOC} /mnt/live/modules/${MODBASE} + RODIRS=":/mnt/live/modules/${MODBASE}${RODIRS}" + done + + # Next, the add-on (3rd party etc) components, if any: + # Remember, module name must adhere to convention: "NNNN-modname-*.sxz" + # where 'N' is a digit and 'modname' must not contain a dash '-'. + if ls /mnt/media/liveslak/addons/*.sxz 1>/dev/null 2>/dev/null ; then + for MODLOC in /mnt/media/liveslak/addons/*.sxz ; do + MODBASE="$(basename $MODLOC .sxz)" + # Skip loading one or more addons by using boot parameter 'noload': + # noload=mod1[,mod2[,mod3]] + if [ -n "$NOLOAD" -a -n '$(echo ",${NOLOAD}," |grep -i ",$(echo $MODBASE |cut -d- -f2),")' ]; then + echo "$MODBASE" >> /mnt/live/modules/skipped + else + mkdir /mnt/live/modules/${MODBASE} + mount -t squashfs -o loop ${MODLOC} /mnt/live/modules/${MODBASE} + RODIRS=":/mnt/live/modules/${MODBASE}${RODIRS}" + fi + done + fi + + # And finally any explicitly requested optionals (like nvidia drivers): + # Remember, module name must adhere to convention: "NNNN-modname-*.sxz" + # where 'N' is a digit and 'modname' must not contain a dash '-'. + if ls /mnt/media/liveslak/optional/*.sxz 1>/dev/null 2>/dev/null ; then + for MODLOC in /mnt/media/liveslak/optional/*.sxz ; do + MODBASE="$(basename $MODLOC .sxz)" + if [ -n "$LOAD" -a -n '$(echo ",${LOAD}," |grep -i ",$(echo $MODBASE |cut -d- -f2),")' ]; then + mkdir /mnt/live/modules/${MODBASE} + mount -t squashfs -o loop ${MODLOC} /mnt/live/modules/${MODBASE} + RODIRS=":/mnt/live/modules/${MODBASE}${RODIRS}" + fi + done + fi + + # Get rid of the starting colon: + RODIRS=$(echo $RODIRS |cut -c2-) + + # Setup persistency in case our media is writable, *and* the user + # has created a directory "persistence" in the root of the media. + # otherwise we let the block changes accumulate in RAM only. + + # Create the mount point for the writable upper directory of the overlay: + # Assume the default to be a readonly media - we write to RAM: + UPPERDIR=/mnt/live/changes + OVLWORK=/mnt/live/.ovlwork + if [ "$VIRGIN" = "0" ]; then + if [ "LIVEFS" != "iso9660" -a -d /mnt/media/persistence ]; then + # Looks OK, but we need to remount the media in order to write to it: + mount -o remount,rw /mnt/media + # Try a write... just to be dead sure: + if touch /mnt/media/persistence/.rwtest 2>/dev/null && rm /mnt/media/persistence/.rwtest 2>/dev/null ; then + # Writable media and we are allowed to write to it. + echo "${INITRD}: Writing persistent changes to media directory '/persistence'." + UPPERDIR=/mnt/media/persistence + OVLWORK=/mnt/media/.ovlwork + fi + fi + fi + # Create the writable upper directory, plus the workdir which is required + # for overlay to function (the two must be in the same POSIX filesystem): + mkdir -p ${UPPERDIR} + mkdir -p ${OVLWORK} + + # Create the overlay of readonly and writable directories: + mkdir -p /mnt/overlay + mount -t overlay -o workdir=${OVLWORK},upperdir=${UPPERDIR},lowerdir=${RODIRS} overlay /mnt/overlay + + # Make the underpinning RAM fs accessible in the live system (for fun): + mkdir -p /mnt/overlay/mnt/live + mount --bind /mnt/live /mnt/overlay/mnt/live + + # Same for the Linux filesystem on the USB stick: + mkdir -p /mnt/overlay/mnt/livemedia + mount --bind /mnt/media /mnt/overlay/mnt/livemedia + + if [ ! -z "$USE_SWAP" ]; then + # Use any available swap device: + for SWAPD in $(blkid |grep TYPE="\"swap\"" |cut -d: -f1) ; do + echo "${INITRD}: Enabling swapping to '$SWAPD'" + echo "$SWAPD swap swap defaults 0 0" >> /mnt/overlay/etc/fstab + done + fi + + if [ ! -z "$KEYMAP" ]; then + # Configure custom keyboard mapping in console and X: + echo "${INITRD}: Switching live desktop to '$KEYMAP' keyboard" + cat <<EOT > /mnt/overlay/etc/rc.d/rc.keymap +#!/bin/sh +# Load the keyboard map. More maps are in /usr/share/kbd/keymaps. +if [ -x /usr/bin/loadkeys ]; then + /usr/bin/loadkeys ${KEYMAP} +fi +EOT + chmod 755 /mnt/overlay/etc/rc.d/rc.keymap + # Set a usable keyboard mapping in X.Org, derived from the console map: + mkdir -p /mnt/overlay/etc/X11/xorg.conf.d + cat <<EOT > /mnt/overlay/etc/X11/xorg.conf.d/30-keyboard.conf +Section "InputClass" + Identifier "keyboard-all" + Driver "evdev" + Option "XkbLayout" "$(echo $KEYMAP |cut -c1-2)" + MatchIsKeyboard "on" +EndSection +EOT + fi + + if [ ! -z "$LOCALE" ]; then + # Configure custom locale: + echo "${INITRD}: Switching to '$LOCALE' locale" + sed -i -e "s/^ *export LANG=.*/export LANG=${LOCALE}/" /mnt/overlay/etc/profile.d/lang.sh + fi + + if [ ! -z "$TZ" -a -f /mnt/overlay/usr/share/zoneinfo/${TZ} ]; then + # Configure custom timezone: + echo "${INITRD}: Configuring timezone '$TZ'" + cp /mnt/overlay/usr/share/zoneinfo/${TZ} /mnt/overlay/etc/localtime + cp /mnt/overlay/usr/share/zoneinfo/${TZ} /mnt/overlay/etc/localtime + rm /mnt/overlay/etc/localtime-copied-from + ln -s /usr/share/zoneinfo/${TZ} /mnt/overlay/etc/localtime-copied-from + # Configure the hardware clock to be interpreted as localtime and not UTC: + cat <<EOT > /mnt/overlay/etc/hardwareclock +# /etc/hardwareclock +# +# Tells how the hardware clock time is stored. +# You should run timeconfig to edit this file. +localtime +EOT + fi + + if [ ! -z "$LIVEPW" ]; then + # User entered a custom live password on the boot commandline: + echo "${INITRD}: Changing password for user 'live'." + chroot /mnt/overlay /usr/sbin/chpasswd <<EOPW +live:${LIVEPW} +EOPW + fi + + if [ ! -z "$ROOTPW" ]; then + # User entered a custom root password on the boot commandline: + echo "${INITRD}: Changing password for user 'root'." + chroot /mnt/overlay /usr/sbin/chpasswd <<EOPW +root:${ROOTPW} +EOPW + fi + + if [ ! -z "$LIVE_HOSTNAME" ]; then + # User entered a custom hostname on the boot commandline: + echo "${INITRD}: Changing hostname to '$LIVE_HOSTNAME'." + echo "${LIVE_HOSTNAME}.example.net" > /mnt/overlay/etc/HOSTNAME + if [ -f /mnt/overlay/etc/NetworkManager/NetworkManager.conf ]; then + sed -i -e "s/^hostname=.*/hostname=${LIVE_HOSTNAME}/" \ + /mnt/overlay/etc/NetworkManager/NetworkManager.conf + fi + sed -i -e "s/^\(127.0.0.1\t*\)@DARKSTAR@.*/\1${LIVE_HOSTNAME}.example.net ${LIVE_HOSTNAME}/" /mnt/overlay/etc/hosts + fi + + # Copy contents of rootcopy directory (may be empty) to overlay: + cp -af /mnt/media/liveslak/rootcopy/* /mnt/overlay/ 2>/dev/null + + # --------------------------------------------------------------------- # + # SLACKWARE LIVE - !END! # + # --------------------------------------------------------------------- # + + # Minimal changes to the original Slackware init follow: + + # Switch to real root partition: + /sbin/udevadm settle --timeout=10 + echo 0x0100 > /proc/sys/kernel/real-root-dev + + if [ ! -r /mnt/overlay/${INIT} ]; then + echo "ERROR: No ${INIT} found on rootdev (or not mounted). Trouble ahead." + echo " You can try to fix it. Type 'exit' when things are done." + echo + /bin/sh + fi +else + echo + echo "RESCUE mode" + echo + echo " You can try to fix or rescue your system now. If you want" + echo " to boot into your fixed system, mount your root filesystem" + echo " read-only under /mnt:" + echo + echo " # mount -o ro -t filesystem root_device /mnt" + echo + echo " Type 'exit' when things are done." + echo + /bin/sh +fi + +# Need to make sure OPTIONS+="db_persist" exists for all dm devices +# That should be handled in /sbin/mkinitrd now +/sbin/udevadm info --cleanup-db +/sbin/udevadm control --exit + +unset ERR +umount /proc +umount /sys +umount /run +# We disable the filesystem checking code in /etc/rc.d/rc.S, +# so we need to keep the fs writable here. +#mount -o ro,remount /mnt/overlay 2>/dev/null +echo "${INITRD}: Slackware Live system is ready." + +echo "${INITRD}: exiting" +exec switch_root /mnt/overlay $INIT $RUNLEVEL diff --git a/make_slackware_live.sh b/make_slackware_live.sh new file mode 100755 index 0000000..08f17ad --- /dev/null +++ b/make_slackware_live.sh @@ -0,0 +1,1189 @@ +#!/bin/bash + +# $Id: make_slackware_live.sh,v 1.8 2015/11/27 21:42:37 root Exp root $ +# Copyright 2014, 2015 Eric Hameleers, Eindhoven, NL +# All rights reserved. +# +# Permission to use, copy, modify, and distribute this software for +# any purpose with or without fee is hereby granted, provided that +# the above copyright notice and this permission notice appear in all +# copies. +# +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR +# CONTRIBUTORS 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. +# ----------------------------------------------------------------------------- +# +# This script creates a live image for a Slackware OS. +# Features: +# - boots using isolinux/extlinux +# - requires kernel >= 4.0 which supports multiple lower layers in overlay +# - uses squashfs to create compressed modules out of directory trees +# - uses overlayfs to bind multiple squashfs modules together +# - you can add your own modules into ./addons/ subdirectory +# +# ----------------------------------------------------------------------------- + +# Directory where our live tools are stored: +LIVE_TOOLDIR=${LIVE_TOOLDIR:-"$(cd $(dirname $0); pwd)"} + +# Load the optional configuration file: +CONFFILE=${LIVE_TOOLDIR}/$(basename $0 .sh).conf +if [ -f ${CONFFILE} ]; then + echo "-- Loading configuration file." + . ${CONFFILE} +fi + +# Set to "YES" to send error output to the console: +DEBUG=${DEBUG:=NO} + +# Set to "YES" in order to delete everything we have, +# and rebuild any pre-existing .sxz modules from scratch: +FORCE=${FORCE:-"NO"} + +# Set to 32 to be more compatible with the specs. Slackware uses 4 by default: +BOOTLOADSIZE=${BOOTLOADSIZE:-4} + +# The root and live user passwords of the image: +ROOTPW=${ROOTPW:-"root"} +LIVEPW=${LIVEPW:-"live"} + +# Custom name for the host: +LIVE_HOSTNAME=${LIVE_HOSTNAME:-"darkstar"} + +# What type of Live image? +# Choices are: SLACKWARE, XFCE, KDE4, PLASMA5. +LIVEDE=${LIVEDE:-"SLACKWARE"} + +# What runlevel to use if adding a DE like: XFCE, KDE4, PLASMA5. +RUNLEVEL=${RUNLEVEL:-4} + +# Use the graphical syslinux menu (YES or NO)? +SYSMENU=${SYSMENU:-"YES"} + +# This variable can be set to a comma-separated list of package series. +# The squashfs module(s) for these package series will then be re-generated. +# Example commandline parameter: "-r l,kde,kdei" +REFRESH="" + +# +# --------------------------------------------------------------------------- +# + +# Timestamp: +THEDATE=$(date +%Y%m%d) + +# Who built the live image: +BUILDER=${BUILDER:-"Alien BOB"} + +# The ISO main directory: +LIVEMAIN=${LIVEMAIN:-"liveslak"} + +# The filesystem label we will be giving our ISO: +MEDIALABEL=${MEDIALABEL:-"LIVESLAK"} + +# Slackware version to use (note: this won't work for Slackware <= 14.1): +SL_VERSION=${SL_VERSION:-"current"} + +# Slackware architecture to install: +SL_ARCH=${SL_ARCH:-"x86_64"} + +# Directory suffix, arch dependent: +if [ "$SL_ARCH" = "x86_64" ]; then + DIRSUFFIX="64" +else + DIRSUFFIX="" +fi + +# Root directory of a Slackware local mirror tree; +# You can define custom repository location (must be in local filesystem) +# for any module in the file ./pkglists/<module>.conf: +SL_REPO=${SL_REPO:-"/mnt/auto/sox/ftp/pub/Linux/Slackware"} + +# Package root directory: +SL_PKGROOT=${SL_REPO}/slackware${DIRSUFFIX}-${SL_VERSION}/slackware${DIRSUFFIX} +# Patches root directory: +SL_PATCHROOT=${SL_REPO}/slackware${DIRSUFFIX}-${SL_VERSION}/patches/packages + +# List of Slackware package series - each will become a squashfs module: +SEQ_SLACKWARE="tagfile:a,ap,d,e,f,k,kde,kdei,l,n,t,tcl,x,xap,xfce,y slackextra" + +# Stripped-down Slackware with XFCE as the Desktop Environment: +# - each series will become a squashfs module: +SEQ_XFCEBASE="min,xbase,xapbase,xfcebase" + +# Stripped-down Slackware with KDE4 as the Desktop Environment: +# - each series will become a squashfs module: +SEQ_KDE4BASE="min,xbase,xapbase,kde4base" + +# List of Slackware package series with Plasma5 instead of KDE 4 (full install): +# - each will become a squashfs module: +SEQ_PLASMA5="tagfile:a,ap,d,e,f,k,l,n,t,tcl,x,xap,xfce,y slackextra,kde4plasma5,plasma5 local:slackpkg+" + +# List of kernel modules required for a live medium to boot properly: +KMODS=${KMODS:-"squashfs:overlay:loop:xhci-pci:ehci-pci:uhci_hcd:usb-storage:hid:usbhid:hid_generic:jbd:mbcache:ext3:ext4:isofs:fat:nls_cp437:nls_iso8859-1:msdos:vfat"} + +# What compression to use for the squashfs modules? +# Default is xz, alternatives are gzip, lzma, lzo: +SXZ_COMP=${SXZ_COMP:-"xz"} + +# Mount point where we will assemble a Slackware filesystem: +LIVE_ROOTDIR=${LIVE_ROOTDIR:-"/mnt/slackwarelive"} + +# Toplevel directory of our staging area: +LIVE_STAGING=${LIVE_STAGING:-"/tmp/slackwarelive_staging"} + +# Work directory where we will create all the temporary stuff: +LIVE_WORK=${LIVE_WORK:-"${LIVE_STAGING}/temp"} + +# Directory to be used by overlayfs for data manipulation: +LIVE_OVLDIR=${LIVE_OVLDIR:-"${LIVE_WORK}/.ovlwork"} + +# Directory where we will move the kernel and create the initrd; +# note that a ./boot directory will be created in here by installpkg: +LIVE_BOOT=${LIVE_BOOT:-"${LIVE_STAGING}/${LIVEMAIN}/bootinst"} + +# Directories where the squashfs modules will be created: +LIVE_MOD_SYS=${LIVE_MOD_SYS:-"${LIVE_STAGING}/${LIVEMAIN}/system"} +LIVE_MOD_ADD=${LIVE_MOD_ADD:-"${LIVE_STAGING}/${LIVEMAIN}/addons"} +LIVE_MOD_OPT=${LIVE_MOD_OPT:-"${LIVE_STAGING}/${LIVEMAIN}/optional"} + +# Directory where the live ISO image will be written: +OUTPUT=${OUTPUT:-"/tmp"} + +# --------------------------------------------------------------------------- +# Define some functions. +# --------------------------------------------------------------------------- + +# Clean up in case of failure: +cleanup() { + # Clean up by unmounting our loopmounts, deleting tempfiles: + echo "--- Cleaning up the staging area..." + sync + umount ${LIVE_ROOTDIR} 2>${DBGOUT} || true + # Need to umount the squashfs modules too: + umount ${LIVE_WORK}/*_$$ 2>${DBGOUT} || true + + rmdir ${LIVE_ROOTDIR} 2>${DBGOUT} + rmdir ${LIVE_WORK}/*_$$ 2>${DBGOUT} + rm ${LIVE_MOD_OPT}/* 2>${DBGOUT} || true + rm ${LIVE_MOD_ADD}/* 2>${DBGOUT} || true +} +trap 'echo "*** $0 FAILED at line $LINENO ***"; cleanup; exit 1' ERR INT TERM + + +# +# Find packages and install them into the temporary root: +# +function install_pkgs() { + if [ -z "$1" ]; then + echo "-- function install_pkgs: Missing module name." + exit 1 + fi + if [ ! -d "$2" ]; then + echo "-- function install_pkgs: Target directory '$2' does not exist!" + exit 1 + elif [ ! -f "$2/SLACKWARELIVE" ]; then + echo "-- function install_pkgs: Target '$2' does not contain 'SLACKWARELIVE' file." + echo "-- Did you choose the right installation directory?" + exit 1 + fi + + if [ "$3" = "local" -a -d ${LIVE_TOOLDIR}/local${DIRSUFFIX}/$1 ]; then + echo "-- Installing local packages from subdir 'local${DIRSUFFIX}/$1'." + installpkg --terse --root "$2" "local${DIRSUFFIX}/$1/*.t?z" + else + # Load package list and (optional) custom repo info: + if [ "$3" = "tagfile" ]; then + PKGCONF="__tagfile__" + PKGFILE=${SL_PKGROOT}/${1}/tagfile + else + PKGCONF=${LIVE_TOOLDIR}/pkglists/$(echo $1 |tr [A-Z] [a-z]).conf + PKGFILE=${LIVE_TOOLDIR}/pkglists/$(echo $1 |tr [A-Z] [a-z]).lst + fi + + if [ -f ${PKGCONF} ]; then + echo "-- Loading repo info for '$1'." + . ${PKGCONF} + fi + + if [ -f ${PKGFILE} ]; then + echo "-- Loading package list '$PKGFILE'." + else + echo "-- Mandatory package list file is missing! Exiting..." + exit 1 + fi + + if [ ! -d ${SL_REPO} ]; then + echo "-- Slackware repository root '${SL_REPO}' does not exist! Exiting." + exit 1 + fi + + for PKG in $(cat ${PKGFILE} |grep -v -E '^ *#|^$' |cut -d: -f1); do + # Look in ./patches ; then ./slackware$DIRSUFFIX ; then ./extra + # Need to escape any '+' in package names such a 'gtk+2': + if [ ! -z "${SL_PATCHROOT}" ]; then + FULLPKG=$(find ${SL_PATCHROOT} -name "${PKG}-*.t?z" 2>/dev/null | grep -E "${PKG//+/\\+}-[^-]+-[^-]+-[^-]+.t?z") + else + FULLPKG="" + fi + if [ "x${FULLPKG}" = "x" ]; then + FULLPKG=$(find ${SL_PKGROOT} -name "${PKG}-*.t?z" 2>/dev/null |grep -E "${PKG//+/\\+}-[^-]+-[^-]+-[^-]+.t?z" |head -1) + else + echo "-- $PKG found in patches" + fi + if [ "x${FULLPKG}" = "x" ]; then + # One last attempt: look in ./extra + FULLPKG=$(find $(dirname ${SL_PKGROOT})/extra -name "${PKG}-*.t?z" 2>/dev/null |grep -E "${PKG//+/\\+}-[^-]+-[^-]+-[^-]+.t?z" |head -1) + fi + + if [ "x${FULLPKG}" = "x" ]; then + echo "-- Package $PKG was not found in $(dirname ${SL_REPO}) !" + else + # Determine if we need to install or upgrade a package: + for INSTPKG in $(ls -1 "$2"/var/log/packages/${PKG}-* 2>/dev/null |rev |cut -d/ -f1 |cut -d- -f4- |rev) ; do + if [ "$INSTPKG" = "$PKG" ]; then + break + fi + done + if [ "$INSTPKG" = "$PKG" ]; then + ROOT="$2" upgradepkg --reinstall "${FULLPKG}" + else + installpkg --terse --root "$2" "${FULLPKG}" + fi + fi + done + fi + + if [ "$TRIM" = "doc" -o "$TRIM" = "mandoc" -o "$LIVEDE" = "XFCE" ]; then + # Remove undesired (too big for a live OS) document subdirectories: + (cd "${2}/usr/doc" && find . -type d -mindepth 2 -maxdepth 2 -exec rm -rf {} \;) + fi + if [ "$TRIM" = "mandoc" ]; then + # Also remove man pages: + rm -rf "$2"/usr/man + fi + + # End install_pkgs +} + + +# +# Create the graphical multi-language syslinux boot menu: +# +function gen_bootmenu() { + + MENUROOTDIR="$1/menu" + + # Generate vesamenu structure - many files because of the selection tree. + mkdir -p ${MENUROOTDIR} + + # Initialize an empty keyboard selection and language menu: + rm -f ${MENUROOTDIR}/kbd.cfg + rm -f ${MENUROOTDIR}/lang*.cfg + + # Generate main (US) vesamenu.cfg: + cat ${LIVE_TOOLDIR}/menu.tpl | sed \ + -e "s/@KBD@/us/g" \ + -e "s/@LANG@/us/g" \ + -e "s/@DIRSUFFIX@/$DIRSUFFIX/g" \ + -e "s/@KVER@/$KVER/g" \ + -e "s/@LIVEMAIN@/$LIVEMAIN/g" \ + -e "s/@MEDIALABEL@/$MEDIALABEL/g" \ + -e "s/@LIVEDE@/$(echo $LIVEDE |sed 's/BASE//')/g" \ + -e "s/@SL_VERSION@/$SL_VERSION/g" \ + > ${MENUROOTDIR}/vesamenu.cfg + + for KBD in $(cat ${LIVE_TOOLDIR}/languages |grep -Ev "(^ *#|^$)" |cut -d, -f3) + do + LANCOD=$(cat ${LIVE_TOOLDIR}/languages |grep ",$KBD," |cut -d, -f1) + LANDSC=$(cat ${LIVE_TOOLDIR}/languages |grep ",$KBD," |cut -d, -f2) + # First, create keytab files if they are missing: + if [ ! -f ${MENUROOTDIR}/${KBD}.ktl ]; then + keytab-lilo $(find /usr/share/kbd/keymaps/i386 -name "us.map.gz") $(find /usr/share/kbd/keymaps/i386 -name "${KBD}.map.gz") > ${MENUROOTDIR}/${KBD}.ktl + fi + # Add this keyboard to the keyboard selection menu: + cat <<EOL >> ${MENUROOTDIR}/kbd.cfg +label ${LANCOD} + menu label ${LANDSC} + kbdmap menu/${KBD}.ktl + kernel vesamenu.c32 + append menu/menu_${LANCOD}.cfg + +EOL + + # Generate custom vesamenu.cfg for selected keyboard: + cat ${LIVE_TOOLDIR}/menu.tpl | sed \ + -e "s/@KBD@/$KBD/g" \ + -e "s/@LANG@/$LANCOD/g" \ + -e "s/@DIRSUFFIX@/$DIRSUFFIX/g" \ + -e "s/@KVER@/$KVER/g" \ + -e "s/@LIVEMAIN@/$LIVEMAIN/g" \ + -e "s/@MEDIALABEL@/$MEDIALABEL/g" \ + -e "s/@LIVEDE@/$(echo $LIVEDE |sed 's/BASE//')/g" \ + -e "s/@SL_VERSION@/$SL_VERSION/g" \ + > ${MENUROOTDIR}/menu_${LANCOD}.cfg + + # Generate custom language selection submenu for selected keyboard: + for SUBKBD in $(cat ${LIVE_TOOLDIR}/languages |grep -Ev "(^ *#|^$)" |cut -d, -f3) ; do + cat <<EOL >> ${MENUROOTDIR}/lang_${LANCOD}.cfg +label $(cat ${LIVE_TOOLDIR}/languages |grep ",$SUBKBD," |cut -d, -f1) + menu label $(cat ${LIVE_TOOLDIR}/languages |grep ",$SUBKBD," |cut -d, -f2) + kernel /boot/generic + append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 kbd=$KBD tz=$(cat ${LIVE_TOOLDIR}/languages |grep ",$SUBKBD," |cut -d, -f4) locale=$(cat ${LIVE_TOOLDIR}/languages |grep ",$SUBKBD," |cut -d, -f5) + +EOL + done + + done + +} + + +# --------------------------------------------------------------------------- +# Action! +# --------------------------------------------------------------------------- + +while getopts "d:efhm:r:s:t:v" Option +do + case $Option in + h ) cat <<-"EOH" + ----------------------------------------------------------------- + $Id: make_slackware_live.sh,v 1.8 2015/11/27 21:42:37 root Exp root $ + ----------------------------------------------------------------- + EOH + echo "Usage:" + echo " $0 [OPTION] ..." + echo "or:" + echo " SL_REPO=/your/repository/dir $0 [OPTION] ..." + echo "" + echo "The SL_REPO is the directory that contains the directory" + echo " slackware-<RELEASE> or slackware64-<RELEASE>" + echo "Current value of SL_REPO : $SL_REPO" + echo "" + echo "The script's parameters are:" + echo " -h This help." + echo " -d desktoptype SLACKWARE (full Slack), KDE4 (basic KDE4)," + echo " XFCE (basic XFCE) or PLASMA5 (full Plasma5)" + echo " -e Use ISO boot-load-size of 32 for computers" + echo " where the ISO won't boot otherwise." + echo " -f Forced re-generation of all squashfs modules," + echo " custom configurations and new initrd.img." + echo " -m pkglst[,pkglst] Add modules defined by pkglists/<pkglst>,..." + echo " -r series[,series] Refresh only one or a few package series." + echo " -s slackrepo_dir Directory containing Slackware repository." + echo " -t <doc|mandoc> Trim the ISO for size (remove man and/or doc)" + echo " -v Show debug/error output." + echo " -H <hostname> Hostname of the Live OS (default: $LIVE_HOSTNAME)" + exit + ;; + d ) LIVEDE="$(echo ${OPTARG} |tr a-z A-Z)" + ;; + e ) BOOTLOADSIZE=32 + ;; + f ) FORCE="YES" + ;; + m ) SEQ_ADDMOD="${OPTARG}" + ;; + r ) REFRESH="${OPTARG}" + ;; + s ) SL_REPO="${OPTARG}" + ;; + t ) TRIM="${OPTARG}" + ;; + v ) DEBUG="YES" + ;; + H ) LIVE_HOSTNAME="${OPTARG}" + ;; + * ) echo "You passed an illegal switch to the program!" + echo "Run '$0 -h' for more help." + exit + ;; # DEFAULT + esac +done + +# End of option parsing. +shift $(($OPTIND - 1)) + +# $1 now references the first non option item supplied on the command line +# if one exists. +# --------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# Some sanity checks first. +# ----------------------------------------------------------------------------- + +if [ -n "$REFRESH" -a "$FORCE" = "YES" ]; then + echo "Please use only _one_ of the switches '-f' or '-r'!" + echo "Run '$0 -h' for more help." + exit 1 +fi + +# Do we have a local Slackware repository? +if [ ! -d ${SL_REPO} ]; then + echo "-- Slackware repository root '${SL_REPO}' does not exist! Exiting." + exit 1 +fi + +# Are all the required add-on tools present? +PROG_MISSING="" +for PROGN in mksquashfs unsquashfs syslinux mkisofs installpkg upgradepkg keytab-lilo ; do + if ! which $PROGN 1>/dev/null 2>/dev/null ; then + PROG_MISSING="${PROG_MISSING}-- $PROGN\n" + fi +done +if [ ! -z "$PROG_MISSING" ] ; then + echo "-- Required program(s) not found in PATH!" + echo -e ${PROG_MISSING} + echo "-- Exiting." + exit 1 +fi + +[ "$DEBUG" = "NO" ] && DBGOUT="/dev/null" || DBGOUT="/dev/stderr" + +# Cleanup if we are FORCEd to rebuild from scratch: +if [ "$FORCE" = "YES" ]; then + echo "-- Removing old files and directories!" + umount ${LIVE_ROOTDIR}/{proc,sys,dev} 2>${DBGOUT} || true + umount ${LIVE_ROOTDIR} 2>${DBGOUT} || true + rm -rf ${LIVE_STAGING}/${LIVEMAIN} ${LIVE_WORK} ${LIVE_ROOTDIR} +fi + +# Create output directory for image file: +mkdir -p ${OUTPUT} +if [ $? -ne 0 ]; then + echo "-- Creation of output directory '${OUTPUT}' failed! Exiting." + exit 1 +fi + +# Create temporary directories for building the live filesystem: +for LTEMP in $LIVE_OVLDIR $LIVE_BOOT $LIVE_MOD_SYS $LIVE_MOD_ADD $LIVE_MOD_OPT ; do + umount ${LTEMP} 2>${DBGOUT} || true + mkdir -p ${LTEMP} + if [ $? -ne 0 ]; then + echo "-- Creation of temporary directory '${LTEMP}' failed! Exiting." + exit 1 + fi +done + +# Create the mount point for our Slackware filesystem: +if [ ! -d ${LIVE_ROOTDIR} ]; then + mkdir -p ${LIVE_ROOTDIR} + if [ $? -ne 0 ]; then + echo "-- Creation of moint point '${LIVE_ROOTDIR}' failed! Exiting." + exit 1 + fi + chmod 775 ${LIVE_ROOTDIR} +else + echo "-- Found an existing live root directory at '${LIVE_ROOTDIR}'". + echo "-- Check the content and deal with it, then remove that directory." + echo "-- Exiting now." + exit 1 +fi + +# ---------------------------------------------------------------------------- +# Install package series: +# ---------------------------------------------------------------------------- + +unset INSTDIR +RODIRS="${LIVE_BOOT}" +# Create the verification file for the install_pkgs function: +echo "${THEDATE} (${BUILDER})" > ${LIVE_BOOT}/SLACKWARELIVE + +# Determine which module sequence we have to build: +case "$LIVEDE" in + SLACKWARE) MSEQ="${SEQ_SLACKWARE}" ;; + XFCE) MSEQ="${SEQ_XFCEBASE}" ;; + KDE4) MSEQ="${SEQ_KDE4BASE}" ;; + PLASMA5) MSEQ="${SEQ_PLASMA5}" ;; + *) echo "** Unsupported configuration '$LIVEDE'"; exit 1 ;; +esac + +# Do we need to create/include additional module(s) defined by a pkglist: +if [ -n "$SEQ_ADDMOD" -a -f ${LIVE_TOOLDIR}/pkglists/${SEQ_ADDMOD}.lst ]; then + MSEQ="${MSEQ} pkglist:${SEQ_ADDMOD}" +fi + +echo "-- Creating '${LIVEDE}' image." + +# Module sequence can be composed of multiple sub-sequences: +for MSUBSEQ in ${MSEQ} ; do + + SL_SERIES="$(echo ${MSUBSEQ} |cut -d: -f2 |tr , ' ')" + # MTYPE can be "tagfile", "local" or "pkglist" + # If MTYPE was not specified, by default it is "pkglist": + MTYPE="$(echo ${MSUBSEQ} |cut -d: -f1 |tr , ' ')" + if [ "${MTYPE}" = "${SL_SERIES}" ]; then MTYPE="pkglist" ; fi + + # We prefix our own modules based on the source of the package list: + case "$MTYPE" in + tagfile) MNUM="0010" ;; + pkglist) MNUM="0020" ;; + local) MNUM="0030" ;; + *) echo "** Unknown package source '$MTYPE'"; exit 1 ;; + esac + +for SPS in ${SL_SERIES} ; do + + INSTDIR=${LIVE_WORK}/${SPS}_$$ + mkdir -p ${INSTDIR} + + if [ "$FORCE" = "YES" -o $(echo ${REFRESH} |grep -wq ${SPS} ; echo $?) -eq 0 -o ! -f ${LIVE_MOD_SYS}/${MNUM}-slackware_${SPS}-${SL_VERSION}-${SL_ARCH}.sxz ]; then + + # Following conditions trigger creation of the squashed module: + # - commandline switch '-f' was used, or; + # - the module was mentioned in the '-r' commandline switch, or; + # - the module does not yet exist. + + # Create the verification file for the install_pkgs function: + echo "${THEDATE} (${BUILDER})" > ${INSTDIR}/SLACKWARELIVE + + echo "-- Installing the '${SPS}' series." + umount ${LIVE_ROOTDIR} 2>${DBGOUT} || true + mount -t overlay -o lowerdir=${RODIRS},upperdir=${INSTDIR},workdir=${LIVE_OVLDIR} overlay ${LIVE_ROOTDIR} + + # Install the package series: + install_pkgs ${SPS} ${LIVE_ROOTDIR} ${MTYPE} + umount ${LIVE_ROOTDIR} || true + + if [ "$SPS" = "a" -o "$SPS" = "min" ]; then + + # We need to take care of a few things first: + KVER=$(echo ${INSTDIR}/var/log/packages/kernel-generic-[0-9]* |rev |cut -d- -f3 |rev) + if [ -z "$KVER" ]; then + echo "-- Could not find installed kernel in '${INSTDIR}'! Exiting." + exit 1 + else + # Move the content of the /boot directory out of the minimal system, + # this will be joined again using overlay: + rm -rf ${LIVE_BOOT}/boot + mv ${INSTDIR}/boot ${LIVE_BOOT}/ + # Squash the boot files into a module as a safeguard: + mksquashfs ${LIVE_BOOT} ${LIVE_MOD_SYS}/0000-slackware_boot-${SL_VERSION}-${SL_ARCH}.sxz -noappend -comp ${SXZ_COMP} -b 1M + fi + + fi + + # Squash the installed package series into a module: + mksquashfs ${INSTDIR} ${LIVE_MOD_SYS}/${MNUM}-slackware_${SPS}-${SL_VERSION}-${SL_ARCH}.sxz -noappend -comp ${SXZ_COMP} -b 1M + rm -rf ${INSTDIR}/* + + # End result: we have our .sxz file and the INSTDIR is empty again, + # Next step is to loop-mount the squashfs file onto INSTDIR. + + elif [ "$SPS" = "a" -o "$SPS" = "min" ]; then + + # We need to do a bit more if we skipped creation of 'a' or 'min' module: + # Extract the content of the /boot directory out of the boot module, + # else we don't have a /boot ready when we create the ISO. + # We can not just loop-mount it because we need to write into /boot later: + rm -rf ${LIVE_BOOT}/boot + unsquashfs -dest ${LIVE_BOOT}/boottemp ${LIVE_MOD_SYS}/0000-slackware_boot-${SL_VERSION}-${SL_ARCH}.sxz + mv ${LIVE_BOOT}/boottemp/* ${LIVE_BOOT}/ + rmdir ${LIVE_BOOT}/boottemp + + fi + + # Add the package series tree to the readonly lowerdirs for the overlay: + RODIRS="${INSTDIR}:${RODIRS}" + + # Mount the modules for use in the final assembly of the ISO: + mount -t squashfs -o loop ${LIVE_MOD_SYS}/${MNUM}-slackware_${SPS}-${SL_VERSION}-${SL_ARCH}.sxz ${INSTDIR} + +done +done + +# ---------------------------------------------------------------------------- +# Modules for all package series are created and loop-mounted. +# Next: system configuration. +# ---------------------------------------------------------------------------- + +# Configuration mudule will always be created from scratch: +INSTDIR=${LIVE_WORK}/zzzconf_$$ +mkdir -p ${INSTDIR} + +echo "-- Configuring the base system." +umount ${LIVE_ROOTDIR} 2>${DBGOUT} || true +mount -t overlay -o lowerdir=${RODIRS},upperdir=${INSTDIR},workdir=${LIVE_OVLDIR} overlay ${LIVE_ROOTDIR} + +# Configure hostname and network: +echo "${LIVE_HOSTNAME}.example.net" > ${LIVE_ROOTDIR}/etc/HOSTNAME +if [ -f ${LIVE_ROOTDIR}etc/NetworkManager/NetworkManager.conf ]; then + sed -i -e "s/^hostname=.*/hostname=${LIVE_HOSTNAME}/" \ + ${LIVE_ROOTDIR}etc/NetworkManager/NetworkManager.conf +fi +sed -e "s/^\(127.0.0.1\t*\)darkstar.*/\1${LIVE_HOSTNAME}.example.net ${LIVE_HOSTNAME}/" \ + -i ${LIVE_ROOTDIR}/etc/hosts + +# Make sure we can access DNS straight away: +cat <<EOT >> ${LIVE_ROOTDIR}/etc/resolv.conf +nameserver 8.8.4.4 +nameserver 8.8.8.8 + +EOT + +# Configure en_US.UTF-8 as the default locale (can be overridden on boot): +if grep -q "^ *export LANG=" ${LIVE_ROOTDIR}/etc/profile.d/lang.sh ; then + sed -e "s/^ *export LANG=.*/export LANG=en_US.UTF-8/" -i ${LIVE_ROOTDIR}/etc/profile.d/lang.sh +else + echo "export LANG=en_US.UTF-8" >> ${LIVE_ROOTDIR}/etc/profile.d/lang.sh +fi + +# Set timezone to UTC: +cp -a ${LIVE_ROOTDIR}/usr/share/zoneinfo/UTC ${LIVE_ROOTDIR}/etc/localtime +rm ${LIVE_ROOTDIR}/etc/localtime-copied-from +ln -s /usr/share/zoneinfo/UTC ${LIVE_ROOTDIR}/etc/localtime-copied-from + +# Configure the hardware clock to be interpreted as UTC as well: +cat <<EOT > ${LIVE_ROOTDIR}/etc/hardwareclock +# /etc/hardwareclock +# +# Tells how the hardware clock time is stored. +# You should run timeconfig to edit this file. + +UTC +EOT + +# Configure a nice default console font that can handle Unicode: +cat <<EOT >${LIVE_ROOTDIR}/etc/rc.d/rc.font +#!/bin/sh +# +# This selects your default screen font from among the ones in +# /usr/share/kbd/consolefonts. +# +#setfont -v + +# Use Terminus font to work better with the Unicode-enabled console +# (configured in /etc/lilo.conf) +setfont -v ter-120b +EOT +chmod +x ${LIVE_ROOTDIR}/etc/rc.d/rc.font + +# Remove ssh server keys - new unique keys will be generated +# at first boot of the live system: +rm -f ${LIVE_ROOTDIR}/etc/ssh/*key* + +# Sanitize /etc/fstab : +cat <<EOT > ${LIVE_ROOTDIR}/etc/fstab +proc /proc proc defaults 0 0 +sysfs /sys sysfs defaults 0 0 +devpts /dev/pts devpts gid=5,mode=620 0 0 +tmpfs /dev/shm tmpfs defaults,nodev,nosuid,mode=1777 0 0 +none / tmpfs defaults 1 1 + +EOT + +# Reduce the number of local consoles, two should be enough: +sed -i -e '/^c3\|^c4\|^c5\|^c6/s/^/# /' ${LIVE_ROOTDIR}/etc/inittab + +# Prevent loop devices (xzm modules) from appearing in filemanagers: +mkdir -p ${LIVE_ROOTDIR}/etc/udev/rules.d +cat <<EOL > ${LIVE_ROOTDIR}/etc/udev/rules.d/11-local.rules +# Prevent loop devices (mounted xzm modules) from appearing in +# filemanager panels - http://www.seguridadwireless.net + +# Hidden loops for udisks: +KERNEL=="loop*", ENV{UDISKS_PRESENTATION_HIDE}="1" + +# Hidden loops for udisks2: +KERNEL=="loop*", ENV{UDISKS_IGNORE}="1" +EOL + +# Set a root password. +echo "root:${ROOTPW}" | chpasswd --root ${LIVE_ROOTDIR} + +# Create a nonprivileged user account "live": +chroot ${LIVE_ROOTDIR} /usr/sbin/useradd -c "Slackware Live User" -g users -G wheel,audio,cdrom,floppy,plugdev,video,power,netdev,lp,scanner,kmem -u 1000 -d /home/live -m -s /bin/bash live +echo "live:${LIVEPW}" | chpasswd --root ${LIVE_ROOTDIR} + +# Configure suauth: +cat <<EOT >${LIVE_ROOTDIR}/etc/suauth +root:live:OWNPASS +root:ALL EXCEPT GROUP wheel:DENY +EOT +chmod 600 ${LIVE_ROOTDIR}/etc/suauth + +# Configure sudoers: +chmod 640 ${LIVE_ROOTDIR}/etc/sudoers +sed -i ${LIVE_ROOTDIR}/etc/sudoers -e 's/# *\(%wheel\sALL=(ALL)\sALL\)/\1/' +chmod 440 ${LIVE_ROOTDIR}/etc/sudoers + +# Enable a Slackware mirror for slackpkg: +cat <<EOT >> ${LIVE_ROOTDIR}/etc/slackpkg/mirrors +#http://mirrors.slackware.com/slackware/slackware${DIRSUFFIX}-${SL_VERSION}/ +http://ftp.osuosl.org/.2/slackware/slackware${DIRSUFFIX}-${SL_VERSION}/ +EOT + +## Blacklist the l10n packages; +#cat << EOT >> ${LIVE_ROOTDIR}/etc/slackpkg/blacklist +# +## Blacklist the l10n packages; +#calligra-l10n- +#kde-l10n- +# +#EOT + +# If we added slackpkg+ for easier system management, let's configure it too. +# Update the cache for slackpkg: +echo "-- Creating slackpkg cache, takes a few seconds..." +chroot "${LIVE_ROOTDIR}" <<EOSL 2>${DBGOUT} + +if [ -f var/log/packages/slackpkg+-* ] ; then + cat <<EOPL > etc/slackpkg/slackpkgplus.conf +SLACKPKGPLUS=on +VERBOSE=1 +ALLOW32BIT=off +USEBL=1 +WGETOPTS="--timeout=20 --tries=2" +GREYLIST=on +PKGS_PRIORITY=( restricted alienbob ktown_testing ) +REPOPLUS=( slackpkgplus restricted alienbob ktown_testing ) +MIRRORPLUS['slackpkgplus']=http://slakfinder.org/slackpkg+/ +MIRRORPLUS['restricted']=http://taper.alienbase.nl/mirrors/people/alien/restricted_sbrepos/current/x86_64/ +MIRRORPLUS['alienbob']=http://taper.alienbase.nl/mirrors/people/alien/sbrepos/current/x86_64/ +MIRRORPLUS['ktown_testing']=http://taper.alienbase.nl/mirrors/alien-kde/current/testing/x86_64/ + +EOPL +fi + +/usr/sbin/slackpkg -batch=on update gpg +/usr/sbin/slackpkg -batch=on update + +EOSL + +echo "-- Configuring the X base system." +# Give the 'live' user a face: +cp ${LIVE_TOOLDIR}/blueSW-64px.png ${LIVE_ROOTDIR}/home/live/.face.icon +chown --reference=${LIVE_ROOTDIR}/home/live ${LIVE_ROOTDIR}/home/live/.face.icon +( cd ${LIVE_ROOTDIR}/home/live/ ; ln .face.icon .face ) +mkdir -p ${LIVE_ROOTDIR}/usr/share/apps/kdm/pics/users +cp ${LIVE_TOOLDIR}/blueSW-64px.png ${LIVE_ROOTDIR}/usr/share/apps/kdm/pics/users/blues.icon + +# Give XDM a nicer look: +mkdir -p ${LIVE_ROOTDIR}/etc/X11/xdm/liveslak-xdm +cp -a ${LIVE_TOOLDIR}/xdm/* ${LIVE_ROOTDIR}/etc/X11/xdm/liveslak-xdm/ +# Point xdm to the custom /etc/X11/xdm/liveslak-xdm/xdm-config: +sed -i ${LIVE_ROOTDIR}/etc/rc.d/rc.4 -e 's,bin/xdm -nodaemon,& -config /etc/X11/xdm/liveslak-xdm/xdm-config,' + +if [ -f ${LIVE_ROOTDIR}/etc/rc.d/rc.networkmanager ]; then + # Enable NetworkManager if present: + chmod +x ${LIVE_ROOTDIR}/etc/rc.d/rc.networkmanager + # And disable Slackware's own way of configuring eth0: + cat <<EOT > ${LIVE_ROOTDIR}/etc/rc.d/rc.inet1.conf +IFNAME[0]="eth0" +IPADDR[0]="" +NETMASK[0]="" +USE_DHCP[0]="" +DHCP_HOSTNAME[0]="" + +GATEWAY="" +DEBUG_ETH_UP="no" +EOT + + # Ensure that NetworkManager uses its internal DHCP client - seems to give + # better compliancy: + sed -e "s/^dhcp=dhcpcd/#&/" -e "s/^#\(dhcp=internal\)/\1/" \ + -i ${LIVE_ROOTDIR}/etc/NetworkManager/NetworkManager.conf + +else + # Use Slackware's own network configurion routing for eth0 in the base image: + cat <<EOT > ${LIVE_ROOTDIR}/etc/rc.d/rc.inet1.conf +IFNAME[0]="eth0" +IPADDR[0]="" +NETMASK[0]="" +USE_DHCP[0]="yes" +DHCP_HOSTNAME[0]="${LIVE_HOSTNAME}" + +GATEWAY="" +DEBUG_ETH_UP="no" +EOT +fi + +echo "-- Configuring XFCE." +# Prepare some XFCE defaults for the 'live' user and any new users. +# (don't show icons on the desktop for irrelevant stuff): +mkdir -p ${LIVE_ROOTDIR}/etc/skel/ +tar -xf ${LIVE_TOOLDIR}/skel/skel.txz -C ${LIVE_ROOTDIR}/etc/skel/ + +echo "-- Configuring KDE4." +# Adjust some usability issues with the default desktop layout: +if [ -f ${LIVE_ROOTDIR}/usr/share/apps/plasma/layout-templates/org.kde.plasma-desktop.defaultPanel/contents/layout.js ]; then + sed -i \ + -e '/showActivityManager/a konsole = panel.addWidget("quicklaunch")' \ + -e '/showActivityManager/a dolphin = panel.addWidget("quicklaunch")' \ + -e '/showActivityManager/a firefox = panel.addWidget("quicklaunch")' \ + -e '$a firefox.writeConfig("iconUrls","file:///usr/share/applications/mozilla-firefox.desktop")' \ + -e '$a dolphin.writeConfig("iconUrls","file:////usr/share/applications/kde4/dolphin.desktop")' \ + -e '$a konsole.writeConfig("iconUrls","file:///usr/share/applications/kde4/konsole.desktop")' \ + -e '/tasks.writeConfig/d' \ + ${LIVE_ROOTDIR}/usr/share/apps/plasma/layout-templates/org.kde.plasma-desktop.defaultPanel/contents/layout.js +fi + +# Prepare some KDE4 defaults for the 'live' user and any new users. + +# Preselect the user 'live' in KDM: +mkdir -p ${LIVE_ROOTDIR}/var/lib/kdm +cat <<EOT > ${LIVE_ROOTDIR}/var/lib/kdm/kdmsts +[PrevUser] +:0=live +EOT +chmod 600 ${LIVE_ROOTDIR}/var/lib/kdm/kdmsts + +# Be gentle to low-performance USB media and limit disk I/O: +mkdir -p ${LIVE_ROOTDIR}/etc/skel/.kde/share/config +cat <<EOT > ${LIVE_ROOTDIR}/etc/skel/.kde/share/config/nepomukserverrc +[Basic Settings] +Configured repositories=main +Start Nepomuk=false + +[Service-nepomukstrigiservice] +autostart=false + +[main Settings] +Storage Dir[\$e]=\$HOME/.kde/share/apps/nepomuk/repository/main/ +Used Soprano Backend=virtuosobackend +rebuilt index for type indexing=true +EOT + +mkdir -p ${LIVE_ROOTDIR}/etc/skel/.config +cat <<EOT > ${LIVE_ROOTDIR}/etc/skel/.config/kwalletrc +[Auto Allow] +kdewallet=Network Management,KDE Daemon,KDE Control Module + +[Wallet] +Close When Idle=false +Enabled=true +First Use=true +Use One Wallet=true +EOT + +if [ "$LIVEDE" = "PLASMA5" ]; then + + echo "-- Configuring PLASMA5." + # Remove the buggy mediacenter session: + rm ${LIVE_ROOTDIR}/usr/share/xsessions/plasma-mediacenter.desktop || true + # Set sane SDDM defaults on first boot (root-owned file): + mkdir -p ${LIVE_ROOTDIR}/var/lib/sddm + chroot ${LIVE_ROOTDIR} chown sddm:sddm var/lib/sddm + cat <<EOT > ${LIVE_ROOTDIR}/var/lib/sddm/state.conf +[Last] +# Name of the last logged-in user. This username will be preselected/shown when the login screen shows up +User=live + +# Name of the session file of the last session selected. This session will be preselected when the login screen shows up. +Session=/usr/share/xsessions/plasma.desktop + +EOT + + # Thanks to Fedora Live: https://git.fedorahosted.org/cgit/spin-kickstarts.git + # Set akonadi backend: + mkdir -p ${LIVE_ROOTDIR}/etc/skel/.config/akonadi + cat <<AKONADI_EOF >${LIVE_ROOTDIR}/etc/skel/.config/akonadi/akonadiserverrc +[%General] +Driver=QSQLITE3 +AKONADI_EOF + + # Disable baloo: + cat <<BALOO_EOF >${LIVE_ROOTDIR}/etc/skel/.config/baloofilerc +[Basic Settings] +Indexing-Enabled=false +BALOO_EOF + + # Disable kres-migrator: + cat <<KRES_EOF >${LIVE_ROOTDIR}/etc/skel/.kde/share/config/kres-migratorrc +[Migration] +Enabled=false +KRES_EOF + + # Disable kwallet migrator: + cat <<KWALLET_EOL >${LIVE_ROOTDIR}/etc/skel/.config/kwalletrc +[Migration] +alreadyMigrated=true +KWALLET_EOL + +fi # End LIVEDE = PLASMA5 + +# Make sure that user 'live' owns her own files: +find ${LIVE_ROOTDIR}/etc/skel/ -exec cp -a "{}" ${LIVE_ROOTDIR}/home/live/ \; +chroot ${LIVE_ROOTDIR} chown -R live:users home/live + +echo "-- Tweaking system startup." + +# Configure the default DE when running startx: +if [ "$LIVEDE" = "SLACKWARE" ]; then + ln -sf xinitrc.kde ${LIVE_ROOTDIR}/etc/X11/xinit/xinitrc +elif [ "$LIVEDE" = "KDE4" ]; then + ln -sf xinitrc.kde ${LIVE_ROOTDIR}/etc/X11/xinit/xinitrc +elif [ "$LIVEDE" = "PLASMA5" ]; then + ln -sf xinitrc.plasma ${LIVE_ROOTDIR}/etc/X11/xinit/xinitrc +else + ln -sf xinitrc.xfce ${LIVE_ROOTDIR}/etc/X11/xinit/xinitrc +fi + +# Configure the default runlevel: +sed -i ${LIVE_ROOTDIR}/etc/inittab -e "s/\(id:\)3\(:initdefault:\)/\1${RUNLEVEL}\2/" + +# Disable unneeded services: +[ -f ${LIVE_ROOTDIR}/etc/rc.d/rc.acpid ] && chmod -x ${LIVE_ROOTDIR}/etc/rc.d/rc.acpid +[ -f ${LIVE_ROOTDIR}/etc/rc.d/rc.pcmcia ] && chmod -x ${LIVE_ROOTDIR}/etc/rc.d/rc.pcmcia +[ -f ${LIVE_ROOTDIR}/etc/rc.d/rc.yp ] && chmod -x ${LIVE_ROOTDIR}/etc/rc.d/rc.yp + +# Skip all filesystem checks at boot: +touch ${LIVE_ROOTDIR}/etc/fastboot + +# Disable the root filesystem check altogether: +sed -i -e '/^if \[ ! \$READWRITE = yes/,/^fi # Done checking root filesystem/s/^/#/' ${LIVE_ROOTDIR}/etc/rc.d/rc.S + +# We will not write to the hardware clock: +sed -i -e '/systohc/s/^/# /' ${LIVE_ROOTDIR}/etc/rc.d/rc.6 + +# Run some package setup scripts (usually run by the slackware installer), +# as well as some of the delaying commands in rc.M and rc.modules: +chroot ${LIVE_ROOTDIR} <<EOCR +# Rebuild SSL certificate database: +/usr/sbin/update-ca-certificates --fresh 1>/dev/null 2>${DBGOUT} + +# Run bits from rc.M so we won't need to run them again in the live system: +/sbin/depmod $KVER +/sbin/ldconfig +EOCR + +chroot "${LIVE_ROOTDIR}" <<EOCR +# Update the desktop database: +if [ -x usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database usr/share/applications > /dev/null 2>${DBGOUT} +fi + +# Update hicolor theme cache: +if [ -d usr/share/icons/hicolor ]; then + if [ -x /usr/bin/gtk-update-icon-cache ]; then + /usr/bin/gtk-update-icon-cache -f -t usr/share/icons/hicolor 1>/dev/null 2>${DBGOUT} + fi +fi + +# Update the mime database: +if [ -x usr/bin/update-mime-database ]; then + /usr/bin/update-mime-database usr/share/mime >/dev/null 2>${DBGOUT} +fi + +# Font configuration: +if [ -x usr/bin/fc-cache ]; then + for fontdir in 100dpi 75dpi OTF Speedo TTF Type1 cyrillic ; do + if [ -d usr/share/fonts/$fontdir ]; then + mkfontscale /usr/share/fonts/$fontdir 1>/dev/null 2>${DBGOUT} + mkfontdir /usr/share/fonts/$fontdir 1>/dev/null 2>${DBGOUT} + fi + done + if [ -d usr/share/fonts/misc ]; then + mkfontscale /usr/share/fonts/misc 1>/dev/null 2>${DBGOUT} + mkfontdir -e /usr/share/fonts/encodings -e /usr/share/fonts/encodings/large /usr/share/fonts/misc 1>/dev/null 2>${DBGOUT} + fi + /usr/bin/fc-cache -f 1>/dev/null 2>${DBGOUT} +fi + +if [ -x usr/bin/update-gtk-immodules ]; then + /usr/bin/update-gtk-immodules +fi +if [ -x usr/bin/update-gdk-pixbuf-loaders ]; then + /usr/bin/update-gdk-pixbuf-loaders +fi +if [ -x /usr/bin/update-pango-querymodules ]; then + /usr/bin/update-pango-querymodules +fi + +if [ -x /usr/bin/glib-compile-schemas ]; then + /usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas >/dev/null 2>${DBGOUT} +fi + +# Delete unwanted cache files: +find usr/share/icons -name icon-theme.cache -exec rm "{}" \; +EOCR + +# Disable above commands in rc.M and rc.modules: +sed -e "s% /usr/bin/update.*verbose%#&%" -i ${LIVE_ROOTDIR}/etc/rc.d/rc.M +sed -e '/^ *\/usr\/bin\/glib-c/ s, /usr/bin/glib-c,#&,' -i ${LIVE_ROOTDIR}/etc/rc.d/rc.M +sed -e "s% /sbin/depmod -%#&%" -i ${LIVE_ROOTDIR}/etc/rc.d/rc.modules + +# If we detect a NVIDIA driver, then run the nvidia install routine: +cat <<EOT >> ${LIVE_ROOTDIR}/etc/rc.d/rc.local + +if [ -x /usr/sbin/nvidia-switch ]; then + if [ -f /usr/lib${DIRSUFFIX}/xorg/modules/extensions/libglx.so.*-nvidia -a -f /usr/lib${DIRSUFFIX}/xorg/modules/drivers/nvidia_drv.so ]; then + # The nvidia kernel module needs to ne announced to the kernel. + # This costs a few seconds in additional boot-up time unfortunately: + /sbin/depmod -a + echo "-- Installing binary Nvidia drivers: /usr/sbin/nvidia-switch --install" + /usr/sbin/nvidia-switch --install + fi +fi +EOT + +# Clean out the unneeded stuff: +rm -f ${LIVE_ROOTDIR}/tmp/[A-Za-z]* +rm -f ${LIVE_ROOTDIR}/var/mail/* +rm -f ${LIVE_ROOTDIR}/root/.bash* + +# Create a locate cache: +echo "-- Creating locate cache, takes a few seconds..." +chroot ${LIVE_ROOTDIR} /etc/cron.daily/slocate 2>${DBGOUT} + +# ----------------------------------------------------------------------------- +# Done with configuring the live system! +# ----------------------------------------------------------------------------- + +# Squash the configuration into its own module: +umount ${LIVE_ROOTDIR} 2>${DBGOUT} || true +mksquashfs ${INSTDIR} ${LIVE_MOD_SYS}/0099-slackware_zzzconf-${SL_VERSION}-${SL_ARCH}.sxz -noappend -comp ${SXZ_COMP} -b 1M +rm -rf ${INSTDIR}/* + +# End result: we have our .sxz file and the INSTDIR is empty again, +# Next step is to loop-mount the squashfs file onto INSTDIR. + +# Add the system configuration tree to the readonly lowerdirs for the overlay: +RODIRS="${INSTDIR}:${RODIRS}" + +# Mount the module for use in the final assembly of the ISO: +mount -t squashfs -o loop ${LIVE_MOD_SYS}/0099-slackware_zzzconf-${SL_VERSION}-${SL_ARCH}.sxz ${INSTDIR} + +unset INSTDIR + +# ----------------------------------------------------------------------------- +# Prepare the system for live booting. +# ----------------------------------------------------------------------------- + +echo "-- Preparing the system for live booting." +umount ${LIVE_ROOTDIR} 2>${DBGOUT} || true +mount -t overlay -o lowerdir=${RODIRS%:*},upperdir=${LIVE_BOOT},workdir=${LIVE_OVLDIR} overlay ${LIVE_ROOTDIR} + +mount --bind /proc ${LIVE_ROOTDIR}/proc +mount --bind /sys ${LIVE_ROOTDIR}/sys +mount --bind /dev ${LIVE_ROOTDIR}/dev + +# Determine the installed kernel version: +KVER=$(ls ${LIVE_ROOTDIR}/var/log/packages/kernel*modules* |head -1 |rev | cut -d- -f3 |rev) + +# Create an initrd for the generic kernel, using a modified init script: +echo "-- Creating initrd for kernel-generic $KVER ..." +chroot ${LIVE_ROOTDIR} /sbin/mkinitrd -c -l us -o /boot/initrd_${KVER}.gz -k ${KVER} -m ${KMODS} 1>${DBGOUT} 2>${DBGOUT} +cat $LIVE_TOOLDIR/liveinit | sed \ + -e "s/@MEDIALABEL@/$MEDIALABEL/g" \ + -e "s/@DARKSTAR@/$LIVE_HOSTNAME/g" \ + > ${LIVE_ROOTDIR}/boot/initrd-tree/init +chroot ${LIVE_ROOTDIR} /sbin/mkinitrd 1>/dev/null 2>${DBGOUT} +rm -rf ${LIVE_ROOTDIR}/boot/initrd-tree + +# ... and cleanup these mounts again: +umount ${LIVE_ROOTDIR}/{proc,sys,dev} || true +umount ${LIVE_ROOTDIR} || true +# Paranoia: +[ ! -z "${LIVE_BOOT}" ] && rm -rf ${LIVE_BOOT}/{etc,tmp,usr,var} 1>${DBGOUT} 2>${DBGOUT} +# Squash the boot directory into its own module: +mksquashfs ${LIVE_BOOT} ${LIVE_MOD_SYS}/0000-slackware_boot-${SL_VERSION}-${SL_ARCH}.sxz -noappend -comp ${SXZ_COMP} -b 1M + +# Copy kernel files and tweak the syslinux configuration: +# Note to self: syslinux does not 'see' files unless they are DOS 8.3 names? +rm -rf ${LIVE_STAGING}/boot +mkdir -p ${LIVE_STAGING}/boot +cp -a ${LIVE_BOOT}/boot/vmlinuz-generic-$KVER ${LIVE_STAGING}/boot/generic +cp -a ${LIVE_BOOT}/boot/initrd_${KVER}.gz ${LIVE_STAGING}/boot/initrd.img +cp -a ${LIVE_TOOLDIR}/syslinux ${LIVE_STAGING}/boot/ +rm -rf ${LIVE_STAGING}/boot/RCS +if [ "$SYSMENU" = "NO" ]; then + echo "include syslinux.cfg" > ${LIVE_STAGING}/boot/syslinux/isolinux.cfg +else + # NOTE: Convert a PNG image to VESA bitmap before using it with vesamenu: + # $ convert -depth 16 -colors 65536 in.png out.png + cp -a /usr/share/syslinux/vesamenu.c32 ${LIVE_STAGING}/boot/syslinux/ + echo "include menu/vesamenu.cfg" > ${LIVE_STAGING}/boot/syslinux/isolinux.cfg + # Generate the multi-language menu: + gen_bootmenu ${LIVE_STAGING}/boot/syslinux +fi +for SLFILE in message.txt f2.txt syslinux.cfg lang.cfg ; do + if [ -f ${LIVE_STAGING}/boot/syslinux/${SLFILE} ]; then + sed -i ${LIVE_STAGING}/boot/syslinux/${SLFILE} \ + -e "s/@DIRSUFFIX@/$DIRSUFFIX/g" \ + -e "s/@KVER@/$KVER/g" \ + -e "s/@LIVEMAIN@/$LIVEMAIN/g" \ + -e "s/@MEDIALABEL@/$MEDIALABEL/g" \ + -e "s/@LIVEDE@/$(echo $LIVEDE |sed 's/BASE//')/g" \ + -e "s/@SL_VERSION@/$SL_VERSION/g" + fi +done +mv ${LIVE_STAGING}/boot/syslinux/memtest ${LIVE_STAGING}/boot/ + +# ----------------------------------------------------------------------------- +# Assemble the ISO +# ----------------------------------------------------------------------------- + +echo "-- Assemble the ISO image." + +# Tag the type of live environment to the ISO filename: +if [ "$LIVEDE" = "SLACKWARE" ]; then + ISOTAG="" +else + ISOTAG="-$(echo $LIVEDE |tr A-Z a-z)" +fi + +# Copy our stockpile of add-on modules into place: +if [ -f ${LIVE_TOOLDIR}/addons/*.sxz ]; then + cp ${LIVE_TOOLDIR}/addons/*.sxz ${LIVE_MOD_ADD}/ +fi + +# If we have optionals, copy those too: +if [ -f ${LIVE_TOOLDIR}/optional/*.sxz ]; then + cp ${LIVE_TOOLDIR}/optional/*.sxz ${LIVE_MOD_OPT}/ +fi + +if [ "$LIVEDE" != "XFCE" -a -f ${LIVE_TOOLDIR}/graphics/*.sxz ]; then + # KDE/PLASMA will profit; add custom (proprietary) graphics drivers: + echo "-- Adding binary GPU drivers." + cp ${LIVE_TOOLDIR}/graphics/*.sxz ${LIVE_MOD_OPT}/ +fi + +# Directory for rootcopy files (everything placed here will be copied +# verbatim into the overlay root): +mkdir -p ${LIVE_STAGING}/rootcopy + +# Create an ISO file from the directories found below ${LIVE_STAGING}: +cd ${LIVE_STAGING} +mkisofs -o ${OUTPUT}/slackware${DIRSUFFIX}-live${ISOTAG}-${SL_VERSION}.iso \ + -R -J \ + -hide-rr-moved \ + -v -d -N \ + -no-emul-boot -boot-load-size ${BOOTLOADSIZE} -boot-info-table \ + -sort boot/syslinux/iso.sort \ + -b boot/syslinux/isolinux.bin \ + -c boot/syslinux/isolinux.boot \ + -eltorito-alt-boot -no-emul-boot -eltorito-platform 0xEF \ + -eltorito-boot boot/syslinux/efiboot.img \ + -preparer "Built for Slackware${DIRSUFFIX}-Live by ${BUILDER}" \ + -publisher "The Slackware Linux Project - http://www.slackware.com/" \ + -A "Slackware Live ${SL_VERSION} for ${ARCH}" \ + -V "${MEDIALABEL}" \ + -x ./$(basename ${LIVE_WORK}) \ + -x ./${LIVEMAIN}/bootinst \ + -x boot/syslinux/testing \ + -x rootcopy \ + . + +# This copy is no longer needed: +rm -rf ./boot +cd - +isohybrid -u ${OUTPUT}/slackware${DIRSUFFIX}-live${ISOTAG}-${SL_VERSION}.iso +md5sum ${OUTPUT}/slackware${DIRSUFFIX}-live${ISOTAG}-${SL_VERSION}.iso \ + > ${OUTPUT}/slackware${DIRSUFFIX}-live${ISOTAG}-${SL_VERSION}.iso.md5 +echo "-- Live ISO image created:" +ls -l ${OUTPUT}/slackware${DIRSUFFIX}-live${ISOTAG}-${SL_VERSION}.iso* + +# Clean out the mounts etc: +cleanup + @@ -0,0 +1,48 @@ +#!/bin/sh +# Create squashfs module from a directory or a Slackware package. +# Module can then be added to liveslak/addons directory. + +if [ "x$1" = "x" ]; then + echo "-- Usage:" + echo " $(basename $0) <packagename|directory> modulename.sxz" + exit 1 +fi + +# .sxz extension uses xz compression: +COMPR="xz" + +if [ -d "$1" ]; then + echo "Creating .sxz from directory." + PKGDIR="$1" +else + MODEXT=$(echo "$2" |rev |cut -d'.' -f1 |rev) + case $MODEXT in + sxz) COMPR="xz" ;; + sgz) COMPR="gzip" ;; + xzm) COMPR="xz" ;; + *) echo "-- Unsupported module extension '$MODEXT'" ; exit 1 ;; + esac + echo "Creating .${MODEXT} from package." + TMPDIR=$(mktemp -t -d makesxz.XXXXXX) + PKGDIR="$TMPDIR" + if [ ! -d $PKGDIR ]; then + echo "-- Failed to create temporary directory for extraction!" + exit 1 + fi + # Extract the package: + /sbin/installpkg -root $PKGDIR "$1" + if [ $? -ne 0 ]; then + echo "-- Error installing package!" + exit 1 + fi +fi + +mksquashfs "${PKGDIR}" "$2" -comp ${COMPR} -b 256K $3 $4 $5 $6 $7 $8 $9 +if [ $? -ne 0 ]; then + echo "-- Error creating squashfs compressed module" + exit 1 +fi + +# If we extracted a package, clean up now: +[ ! -z "$TMPDIR" ] && rm -rf $TMPDIR + diff --git a/menu.tpl b/menu.tpl new file mode 100644 index 0000000..2a1ce0d --- /dev/null +++ b/menu.tpl @@ -0,0 +1,70 @@ +prompt 0 +timeout 300 +ui vesamenu.c32 +default live +f2 f2.txt +menu background swlogov.png +menu title Slackware@DIRSUFFIX@-@SL_VERSION@ Live + +menu hshift 1 +menu vshift 9 +menu width 45 +menu margin 1 +menu rows 10 +menu helpmsgrow 14 +menu helpmsgendrow 18 +menu cmdlinerow 18 +menu tabmsgrow 19 +menu timeoutrow 20 + +menu color screen 37;40 #00000000 #00000000 none +menu color border 34;40 #00000000 #00000000 none +menu color title 1;36;44 #ffb9556b #30002d1f none +menu color unsel 37;44 #ff354172 #007591ff none +menu color hotkey 1;37;44 #ffad37b7 #00000000 none +menu color sel 7;37;40 #ffffffff #00000000 none +menu color hotsel 1;7;37;40 #ffe649f3 #00000000 none +menu color scrollbar 30;44 #00000000 #00000000 none +menu color tabmsg 31;40 #ffA32222 #00000000 none +menu color cmdmark 1;36;40 #ffff0000 #00000000 none +menu color cmdline 37;40 #ffffffff #ff000000 none +menu color pwdborder 30;47 #ffff0000 #00000000 std +menu color pwdheader 31;47 #ffff0000 #00000000 std +menu color pwdentry 30;47 #ffff0000 #00000000 std +menu color timeout_msg 37;40 #ff809aef #00000000 none +menu color timeout 1;37;40 #ffb72f9f #00000000 none +menu color help 37;40 #ff354172 #00000000 none + +label live + menu label Start @LIVEDE@ Live + menu default + kernel /boot/generic + append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 kbd=@KBD@ + text help + Slackware@DIRSUFFIX@-@SL_VERSION@, kernel @KVER@. + Add 'load=nvidia' to the commandline + if you have a recent NVIDIA card. + endtext + +menu begin kbd + menu title Non-US Keyboard selection + label Previous + menu label Previous Menu + menu exit + menu separator + menu include menu/kbd.cfg +menu end + +menu begin language + menu title Non-US Language selection + label Previous + menu label Previous Menu + menu exit + menu separator + menu include menu/lang_@LANG@.cfg +menu end + +label memtest +menu label Memory test with memtest86+ + kernel /boot/memtest + diff --git a/pkglists/alien.conf b/pkglists/alien.conf new file mode 100644 index 0000000..df43eb3 --- /dev/null +++ b/pkglists/alien.conf @@ -0,0 +1,8 @@ +SL_REPO="/mnt/auto/sox/sbrepos/${SL_VERSION}/${SL_ARCH}" + +# Package root directory: +SL_PKGROOT=${SL_REPO} + +# Patches root directory: +SL_PATCHROOT="" + diff --git a/pkglists/alien.lst b/pkglists/alien.lst new file mode 100644 index 0000000..89c534a --- /dev/null +++ b/pkglists/alien.lst @@ -0,0 +1,63 @@ +# Showcases for using with Slackware Live: +calibre +chromium +chromium-pepperflash-plugin +chromium-widevine-plugin +dropbox-client +ffmpeg +gecko-mediaplayer +gmtk +gnome-mplayer +gst-plugins-ffmpeg0 +icedtea-web +libdvdcss +libreoffice +libreoffice-dict-af +libreoffice-dict-ar +libreoffice-dict-be +libreoffice-dict-bg +libreoffice-dict-bn +libreoffice-dict-br +libreoffice-dict-bs +libreoffice-dict-ca +libreoffice-dict-cs +libreoffice-dict-da +libreoffice-dict-de +libreoffice-dict-el +libreoffice-dict-en +libreoffice-dict-es +libreoffice-dict-et +libreoffice-dict-fr +libreoffice-dict-gl +libreoffice-dict-he +libreoffice-dict-hi +libreoffice-dict-hr +libreoffice-dict-hu +libreoffice-dict-is +libreoffice-dict-it +libreoffice-dict-lt +libreoffice-dict-lv +libreoffice-dict-nl +libreoffice-dict-pl +libreoffice-dict-pt-BR +libreoffice-dict-pt-PT +libreoffice-dict-ro +libreoffice-dict-ru +libreoffice-dict-si +libreoffice-dict-sk +libreoffice-dict-sl +libreoffice-dict-sr +libreoffice-dict-sv +libreoffice-dict-sw +libreoffice-dict-te +libreoffice-dict-th +libreoffice-dict-uk +libreoffice-dict-vi +libreoffice-dict-zu +libreoffice-kde-integration +libtorrent-rasterbar +openjdk +p7zip +qbittorrent +veracrypt +vlc diff --git a/pkglists/kde4add.lst b/pkglists/kde4add.lst new file mode 100644 index 0000000..64d68e3 --- /dev/null +++ b/pkglists/kde4add.lst @@ -0,0 +1,116 @@ +# kdesdk: +cervisia +dolphin-plugins +kapptemplate +kcachegrind +kde-dev-scripts +kde-dev-utils +kdesdk-kioslaves +kdesdk-strigi-analyzers +kdesdk-thumbnailers +okteta +poxml +umbrello + +# kdebindings: +smokegen +smokeqt +qtruby +perlqt +smokekde +korundum +perlkde +pykde4 +kross-interpreters + +# kdeutils: +kremotecontrol + +# kdemultimedia: +juk + +# kdenetwork: +krdc + +# kdegames: +klickety +kpat +klines +ksnakeduel +kollision +kshisen +kblocks +lskat +bovo +kajongg +granatier +kiriki +kigo +bomber +kolf +kbounce +konquest +kapman +killbots +kubrick +kgoldrunner +knetwalk +kbreakout +ksirk +kfourinline +kblackbox +palapeli +katomic +ktuberling +kjumpingcube +kspaceduel + +# kdetoys: +amor +kteatime +ktux + +# kdepim: +kdepim +kdepim-runtime + +# kdeedu: +artikulate +blinken +cantor +kalzium +kanagram +kgeography +khangman +kig +kiten +klettres +kstars +kqtquickcharts +ktouch +kturtle +kwordquiz +marble +parley +pairs +rocs +step + +# kdewebdev: +kdewebdev + +# extragear: +kaudiocreator +oxygen-gtk2 +kdevplatform +kdevelop-pg-qt +kdevelop +kdev-python +kdevelop-php +kdevelop-php-docs +#wicd-kde +amarok +calligra +partitionmanager +k3b + diff --git a/pkglists/kde4base.lst b/pkglists/kde4base.lst new file mode 100644 index 0000000..873e6c8 --- /dev/null +++ b/pkglists/kde4base.lst @@ -0,0 +1,282 @@ +# deps: +LibRaw +PyQt +akonadi +attica +boost +clucene +eigen3 +grantlee +gsl +libbluedevil +libcanberra +libdbusmenu-qt +libodfgen +librevenge +libtasn1 +libvisio +libwpd +libwpg +phonon +phonon-gstreamer +qca +qca-cyrus-sasl +qca-gnupg +qca-ossl +qimageblitz +qjson +qt +qt-gstreamer +shared-desktop-ontologies +sip +soprano +strigi +virtuoso-ose +xapian-core + +# kdebase: +kfilemetadata +baloo +baloo-widgets +nepomuk-core +nepomuk-widgets +kde-baseapps +kactivities +konsole +kate +kde-wallpapers +kde-workspace +kde-runtime +kde-base-artwork + +# kdelibs: +kdelibs + +# kdepimlibs. +kdepimlibs + +# kdesdk: +#cervisia +#dolphin-plugins +#kapptemplate +#kcachegrind +#kde-dev-scripts +#kde-dev-utils +#kdesdk-kioslaves +#kdesdk-strigi-analyzers +#kdesdk-thumbnailers +libkomparediff2 +kompare +lokalize +#okteta +#poxml +#umbrello + +# kdegraphics: +libkipi +libkexiv2 +libkdcraw +libksane +kdegraphics-mobipocket +okular +kdegraphics-strigi-analyzer +kdegraphics-thumbnailers +gwenview +kamera +kcolorchooser +kgamma +kolourpaint +kruler +ksaneplugin +ksnapshot +svgpart + +# kdebindings: +#smokegen +#smokeqt +#qtruby +#perlqt +#smokekde +#korundum +#perlkde +#pykde4 +#kross-interpreters + +# kdeaccessibility: +kaccessible +kmouth +kmousetool +kmag + +# kdeutils: +ark +filelight +kcalc +kcharselect +kdf +kfloppy +kgpg +print-manager +#kremotecontrol +ktimer +kwalletmanager +superkaramba +sweeper + +# kdemultimedia: +libkcddb +libkcompactdisc +audiocd-kio +dragon +mplayerthumbs +#juk +kmix + +# kdenetwork: +kdenetwork-filesharing +kdenetwork-strigi-analyzers +zeroconf-ioslave +kget +kopete +kppp +#krdc +krfb + +# oxygen-icons: +oxygen-icons + +# kdeadmin: +kcron +ksystemlog +kuser + +# kdeartwork: +kdeartwork + +# kdegames: +libkdegames +libkmahjongg +#klickety +ksudoku +ksquares +#kpat +#klines +#ksnakeduel +#kollision +#kshisen +#kblocks +#lskat +kreversi +#bovo +#kajongg +#granatier +kmines +#kiriki +#kigo +#bomber +#kolf +kdiamond +#kbounce +#konquest +#kapman +knavalbattle +#killbots +#kubrick +#kgoldrunner +#knetwalk +#kbreakout +#ksirk +#kfourinline +picmi +#kblackbox +#palapeli +#katomic +#ktuberling +#kjumpingcube +kmahjongg +#kspaceduel + +# kdetoys: +#amor +#kteatime +#ktux + +# kdepim: +#kdepim +#kdepim-runtime + +# kdeedu: +libkdeedu +analitza +#artikulate +#blinken +#cantor +kalgebra +#kalzium +#kanagram +kbruch +#kgeography +#khangman +#kig +#kiten +#klettres +kmplot +#kstars +#kqtquickcharts +#ktouch +#kturtle +#kwordquiz +#marble +#parley +#pairs +#rocs +#step + +# kdewebdev: +#kdewebdev + +# kdeplasma-addons: +kdeplasma-addons + +# polkit-kde: +polkit-kde-agent-1 +polkit-kde-kcmodules-1 + +# extragear: +bluedevil +#kaudiocreator +kplayer +kwebkitpart +#oxygen-gtk2 +#kdevplatform +#kdevelop-pg-qt +#kdevelop +#kdev-python +#kdevelop-php +#kdevelop-php-docs +#wicd-kde +libmm-qt +libnm-qt +plasma-nm +skanlite +kio-mtp +libktorrent +ktorrent +#amarok +#calligra +libkscreen +kscreen +kdeconnect-kde +#partitionmanager +#k3b + +# Supported languages in the ISO: +kde-l10n-de +kde-l10n-en_GB +kde-l10n-es +kde-l10n-fr +kde-l10n-ja +kde-l10n-it +kde-l10n-nl +kde-l10n-pt_BR +kde-l10n-ru diff --git a/pkglists/kde4plasma5.lst b/pkglists/kde4plasma5.lst new file mode 100644 index 0000000..55fb35c --- /dev/null +++ b/pkglists/kde4plasma5.lst @@ -0,0 +1,27 @@ +# Slackware deps: +#PyQt +#polkit-qt-1 +#qjson +#sip + +# Slackware's KDE4: +amarok +bluedevil +calligra +k3b +kaudiocreator +kdev-python +kdevelop +kdevelop-pg-qt +kdevelop-php +kdevelop-php-docs +kdevplatform +kio-mtp +kplayer +ktorrent +kwebkitpart +libktorrent +oxygen-gtk2 +partitionmanager +skanlite + diff --git a/pkglists/min.lst b/pkglists/min.lst new file mode 100644 index 0000000..dc778a7 --- /dev/null +++ b/pkglists/min.lst @@ -0,0 +1,117 @@ +aaa_base +aaa_elflibs +aaa_terminfo +acl +attr +bash +bin +binutils +bison +#bsd-games +bzip2 +ca-certificates +coreutils +cpio +cryptsetup +cxxlibs +cyrus-sasl +dcron +dev86 +devs +dhcpcd +dialog +diffutils +dmidecode +e2fsprogs +elvis +etc +eudev +file +findutils +flex +floppy +gawk +gc +gcc +ghostscript +#ghostscript-fonts-std +glibc +#glibc-solibs +glibc-zoneinfo +gnupg +gnupg2 +gnutls +gpgme +gptfdisk +grep +groff +guile +gzip +infozip +iproute2 +iptables +iputils +kbd +kernel-generic +kernel-firmware +kernel-headers +kernel-modules +kmod +less +libassuan +libgcrypt +libgpg-error +libgudev +libksba +libmpc +libtermcap +lilo +links +logrotate +lvm2 +make +man +man-pages +mc +mdadm +mkinitrd +mpfr +mtr +nano +ncurses +net-tools +network-scripts +openldap-client +openssh +openssl +parted +pciutils +perl +pkgtools +polkit +procps-ng +pth +python +quota +rsync +screen +sed +shadow +sharutils +slackpkg +slocate +strace +sudo +sysklogd +syslinux +sysvinit +sysvinit-scripts +tar +terminus-font +usbutils +utempter +util-linux +wget +which +whois +xz diff --git a/pkglists/plasma5.conf b/pkglists/plasma5.conf new file mode 100644 index 0000000..05904a9 --- /dev/null +++ b/pkglists/plasma5.conf @@ -0,0 +1,8 @@ +SL_REPO="/mnt/auto/sox/data/slackware/ktown/${SL_VERSION}/testing/${SL_ARCH}" + +# Package root directory: +SL_PKGROOT=${SL_REPO} + +# Patches root directory: +SL_PATCHROOT="" + diff --git a/pkglists/plasma5.lst b/pkglists/plasma5.lst new file mode 100644 index 0000000..ed61fe0 --- /dev/null +++ b/pkglists/plasma5.lst @@ -0,0 +1,385 @@ +# deps: +OpenAL +PyQt5 +cfitsio +grantlee +grantlee-qt4 +json-glib +libappindicator +libdbusmenu-gtk +libdbusmenu-qt5 +libindicator +libproxy +lmdb +phonon +phonon-gstreamer +phonon-vlc +polkit-qt5-1 +qca-qt5 +qt-gstreamer +qt5 +sni-qt +wayland + +# telepathy-deps: +farstream +libaccounts-glib +libaccounts-qt5 +libnice +libotr +libsignon-glib +signon +signon-plugin-oauth2 +signon-ui +telepathy-accounts-signon +telepathy-farstream +telepathy-gabble +telepathy-glib +telepathy-haze +telepathy-logger +telepathy-logger-qt5 +telepathy-mission-control +telepathy-qt5 + +# kde4 based: +akonadi4 +kdelibs +nepomuk-core +kdepimlibs4 +kfilemetadata +baloo +baloo-widgets +nepomuk-widgets +kactivities +katepart4 +konsolepart4 +smokegen +smokeqt +qtruby +perlqt +smokekde +korundum +perlkde +pykde4 +kross-interpreters +libkdegames4 +libkmahjongg4 +oktetapart4 + +# frameworks: +attica-framework +baloo5 +breeze-icons +extra-cmake-modules +frameworkintegration +kactivities-framework +kapidox +karchive +kauth +kbookmarks +kcmutils +kcodecs +kcompletion +kconfig +kconfigwidgets +kcoreaddons +kcrash +kdbusaddons +kdeclarative +kded +kdelibs4support +kdesignerplugin +kdesu +kdewebkit +kdnssd +kdoctools +kemoticons +kfilemetadata5 +kglobalaccel +kguiaddons +khtml +ki18n +kiconthemes +kidletime +kimageformats +kinit +kio +kitemmodels +kitemviews +kjobwidgets +kjs +kjsembed +kmediaplayer +knewstuff +knotifications +knotifyconfig +kpackage +kparts +kpeople +kplotting +kpty +kross +krunner +kservice +ktexteditor +ktextwidgets +kunitconversion +kwallet +kwidgetsaddons +kwindowsystem +kxmlgui +kxmlrpcclient +modemmanager-qt +networkmanager-qt +oxygen-icons5 +plasma-framework +solid +sonnet +threadweaver + +# plasma: +breeze +kde-cli-tools +kde-gtk-config +kdecoration +kdeplasma-addons +kgamma5 +khelpcenter +khotkeys +kinfocenter +kmenuedit +kscreen2 +ksshaskpass +ksysguard +kwayland +kwayland-integration +kwin +kwrited +libkscreen2 +libksysguard +milou +muon +oxygen +oxygen-fonts +plasma-desktop +plasma-mediacenter +plasma-sdk +plasma-workspace +plasma-workspace-wallpapers +plasma5-nm +polkit-kde-framework +powerdevil +sddm-kcm +systemsettings + +# plasma-extra: +kdeconnect-framework +polkit-kde-kcmodules-framework +sddm-qt5 +xembed-sni-proxy + +# applications: +amor +analitza +ark +artikulate +audiocd-kio +blinken +bomber +bovo +cantor +cervisia +dolphin +dolphin-plugins +dragon +filelight +granatier +gwenview +juk +kaccessible +kajongg +kalgebra +kalzium +kamera +kanagram +kapman +kapptemplate +kate +katomic +kblackbox +kblocks +kbounce +kbreakout +kbruch +kcachegrind +kcalc +kcharselect +kcolorchooser +kcron +kde-base-artwork +kde-baseapps +kde-dev-scripts +kde-dev-utils +kde-runtime +kde-wallpapers +kde-workspace +kdeartwork +kdebugsettings +kdeedu-data +kdegraphics-mobipocket +kdegraphics-strigi-analyzer +kdegraphics-thumbnailers +kdenetwork-filesharing +kdenetwork-strigi-analyzers +kdesdk-kioslaves +kdesdk-strigi-analyzers +kdesdk-thumbnailers +kdewebdev +kdf +kdiamond +kfloppy +kfourinline +kgeography +kget +kgoldrunner +kgpg +khangman +kig +kigo +killbots +kio-extras +kiriki +kiten +kjumpingcube +klettres +klickety +klines +kmag +kmahjongg +kmines +kmix +kmousetool +kmouth +kmplot +knavalbattle +knetwalk +kolf +kollision +kolourpaint +kompare +konquest +konsole +kopete +kpat +kppp +kqtquickcharts +krdc +kremotecontrol +kreversi +krfb +kruler +ksaneplugin +kshisen +ksirk +ksnakeduel +ksnapshot +kspaceduel +ksquares +kstars +ksudoku +ksystemlog +kteatime +ktimer +ktouch +ktuberling +kturtle +ktux +kubrick +kuser +kwalletmanager +kwordquiz +libkcddb +libkcompactdisc +libkdcraw +libkdeedu +libkdegames +libkeduvocdocument +libkexiv2 +libkgeomap +libkipi +libkmahjongg +libkomparediff2 +libksane +lokalize +lskat +marble +mplayerthumbs +okteta +okular +#oxygen-icons +palapeli +parley +picmi +poxml +print-manager +rocs +step +superkaramba +svgpart +sweeper +umbrello +zeroconf-ioslave + +# kdepim: + +akonadi +akonadi-calendar +akonadi-search +gpgmepp +kalarmcal +kblog +kcalcore +kcalutils +kcontacts +kdepim +kdepim-runtime +kdepimlibs +kholidays +kidentitymanagement +kimap +kldap +kmailtransport +kmbox +kmime +kontactinterface +kpimtextedit +ktnef +syndication + +# telepathy: +kaccounts-integration +kaccounts-providers +ktp-accounts-kcm +ktp-approver +ktp-auth-handler +ktp-common-internals +ktp-contact-list +ktp-contact-runner +ktp-desktop-applets +ktp-filetransfer-handler +ktp-kded-module +ktp-send-file +ktp-text-ui +signon-kwallet-extension + +# Supported languages in the ISO: +kde-l10n-de +kde-l10n-en_GB +kde-l10n-es +kde-l10n-fr +kde-l10n-ja +kde-l10n-it +kde-l10n-nl +kde-l10n-pt_BR +kde-l10n-ru + diff --git a/pkglists/slackextra.lst b/pkglists/slackextra.lst new file mode 100644 index 0000000..1f3682d --- /dev/null +++ b/pkglists/slackextra.lst @@ -0,0 +1,5 @@ +# extra: +bittorrent +fltk +recordmydesktop +tigervnc diff --git a/pkglists/xapbase.lst b/pkglists/xapbase.lst new file mode 100644 index 0000000..9c76166 --- /dev/null +++ b/pkglists/xapbase.lst @@ -0,0 +1,32 @@ +MPlayer +audacious +audacious-plugins +blueman +geeqie +gftp +gimp +gkrellm +gnuchess +gucharmap +gv +imagemagick +mozilla-firefox +mozilla-thunderbird +network-manager-applet +pidgin +rdesktop +rxvt +sane +seamonkey-solibs +vim-gvim +x11-ssh-askpass +x3270 +xaos +xchat +#xfractint +xgames +xlockmore +xmms +xpaint +xpdf +xsane diff --git a/pkglists/xbase.lst b/pkglists/xbase.lst new file mode 100644 index 0000000..46b9d1a --- /dev/null +++ b/pkglists/xbase.lst @@ -0,0 +1,386 @@ +ConsoleKit +ConsoleKit2 +GConf +ModemManager +NetworkManager +a52dec +aalib +adwaita-icon-theme +alsa-lib +alsa-oss +alsa-utils +appres +at-spi2-atk +at-spi2-core +atk +audiofile +babl +bdftopcf +bigreqsproto +cairo +cgmanager +compositeproto +damageproto +db48 +dbus +dbus-glib +dbus-python +dejavu-fonts-ttf +desktop-file-utils +djvulibre +dmxproto +dri2proto +dri3proto +elfutils +enchant +encodings +esound +evieext +exiv2 +fftw +fixesproto +flac +font-adobe-100dpi +font-alias +font-bh-100dpi +font-bh-75dpi +font-bh-lucidatypewriter-100dpi +font-bh-lucidatypewriter-75dpi +font-bh-ttf +font-bitstream-100dpi +font-bitstream-75dpi +font-bitstream-type1 +font-cursor-misc +font-misc-misc +font-util +fontcacheproto +fontconfig +fontsproto +fonttosfnt +freeglut +freetype +fribidi +fslsfonts +fstobdf +gamin +gccmakedep +gd +gdk-pixbuf2 +gegl +giflib +glew +glib-networking +glib +glib2 +glibc-i18n +glproto +glu +gmime +gnome-themes-standard +gsettings-desktop-schemas +gst-plugins-base +gst-plugins-base0 +gst-plugins-good +gst-plugins-good0 +gstreamer +gstreamer0 +gtk+ +gtk+2 +gtk+3 +gtkspell +gvfs +harfbuzz +hicolor-icon-theme +hunspell +iceauth +ico +icon-naming-utils +icu4c +ilmbase +imake +inputproto +intltool +ipw2100-fw +ipw2200-fw +iw +jasper +kbproto +keybinder +lcms +lcms2 +libFS +libICE +libSM +libX11 +libXScrnSaver +libXau +libXaw +libXaw3d +libXcomposite +libXcursor +libXdamage +libXdmcp +libXevie +libXext +libXfixes +libXfont +libXfontcache +libXft +libXi +libXinerama +libXmu +libXp +libXpm +libXpresent +libXrandr +libXrender +libXres +libXt +libXtst +libXv +libXvMC +libXxf86dga +libXxf86misc +libXxf86vm +libao +libarchive +libart_lgpl +libatasmart +libcaca +libcddb +libcdio +libcdio-paranoia +libcroco +libdmx +libdrm +libdvdnav +libdvdread +liberation-fonts-ttf +libepoxy +libevdev +libexif +libfakekey +libffi +libfontenc +libglade +libgnome-keyring +libgphoto2 +libgsf +libical +libidl +libieee1284 +libimobiledevice +libiodbc +libjpeg-turbo +libmad +libmbim +libmng +libmtp +libndp +libnih +libnl +libnl3 +libnotify +libogg +libpcap +libpciaccess +libplist +libpng +libproxy +libpthread-stubs +librsvg +libqmi +libsamplerate +libsecret +libsndfile +libsoup +libssh +libssh2 +libtheora +libtiff +libusbmuxd +libva +libva-intel-driver +libvdpau +libvisual +libvorbis +libvpx +libwmf +libwnck +libx86 +libxcb +libxkbfile +libxklavier +libxshmfence +libxml2 +libxslt +listres +llvm +lm_sensors +luit +lzo +makedepend +mesa +mkcomposecache +mkfontdir +mkfontscale +motif +mozilla-nss +mpg123 +mtdev +neon +nettle +newt +openexr +openjpeg +orc +p11-kit +pango +pixman +pm-utils +poppler +poppler-data +presentproto +printproto +pycairo +pygobject +pygtk +radeontool +randrproto +recordproto +rendercheck +renderproto +resourceproto +rgb +samba +sazanami-fonts-ttf +scrnsaverproto +sdl +sg3_utils +sessreg +setxkbmap +shared-mime-info +showfont +sinhala_lklug-font-ttf +smproxy +sqlite +startup-notification +svgalib +t1lib +tibmachuni-font-ttf +ttf-indic-fonts +udisks +udisks2 +upower +usb_modeswitch +util-macros +v4l-utils +vbetool +videoproto +viewres +vorbis-tools +vte +wavpack +wireless-tools +wpa_supplicant +wqy-zenhei-font-ttf +x11-skel +x11perf +xauth +xbacklight +xbitmaps +xcb-proto +xcb-util +xcb-util-keysyms +xclipboard +xclock +xcmiscproto +xcmsdb +xcompmgr +xcursor-themes +xcursorgen +xdbedizzy +xdm +xdg-utils +xdpyinfo +xdriinfo +xev +xextproto +xf86-input-acecad +xf86-input-aiptek +xf86-input-evdev +xf86-input-joystick +xf86-input-keyboard +xf86-input-mouse +xf86-input-penmount +xf86-input-synaptics +xf86-input-vmmouse +xf86-input-void +xf86-video-apm +xf86-video-ark +xf86-video-ast +xf86-video-ati +xf86-video-dummy +xf86-video-glint +xf86-video-i128 +xf86-video-i740 +xf86-video-intel +xf86-video-mach64 +xf86-video-mga +xf86-video-modesetting +xf86-video-nouveau +xf86-video-nv +xf86-video-openchrome +xf86-video-r128 +xf86-video-v4l +xf86-video-vesa +xf86-video-vmware +xf86bigfontproto +xf86dga +xf86dgaproto +xf86driproto +xf86miscproto +xf86vidmodeproto +xfd +xfontsel +xfs +xfsinfo +xgamma +xgc +xhost +xineramaproto +xinit +xinput +xkbcomp +xkbevd +xkbprint +xkbutils +xkeyboard-config +xkill +xlsatoms +xlsclients +xlsfonts +xmessage +xmodmap +xorg-cf-files +xorg-server +xorg-server-xvfb +xpr +xprop +xproto +xrandr +xrdb +xrefresh +xscreensaver +xset +xsetroot +xsm +xstdcmap +xtrans +xv +xvidtune +xvinfo +xwd +xwininfo +xwud +zd1211-firmware diff --git a/pkglists/xfcebase.lst b/pkglists/xfcebase.lst new file mode 100644 index 0000000..be2ddbb --- /dev/null +++ b/pkglists/xfcebase.lst @@ -0,0 +1,27 @@ +Thunar +exo +garcon +gtk-xfce-engine +libxfce4ui +libxfce4util +orage +thunar-volman +tumbler +xfce4-appfinder +xfce4-clipman-plugin +xfce4-dev-tools +xfce4-mixer +xfce4-notifyd +xfce4-panel +xfce4-power-manager +xfce4-screenshooter +xfce4-session +xfce4-settings +xfce4-systemload-plugin +xfce4-taskmanager +xfce4-terminal +xfce4-volumed +xfce4-weather-plugin +xfconf +xfdesktop +xfwm4 diff --git a/syslinux/efiboot.img b/syslinux/efiboot.img Binary files differnew file mode 100644 index 0000000..23ce1bc --- /dev/null +++ b/syslinux/efiboot.img diff --git a/syslinux/f2.txt b/syslinux/f2.txt new file mode 100644 index 0000000..bf4ee9a --- /dev/null +++ b/syslinux/f2.txt @@ -0,0 +1,27 @@ + + + + + + + + + + + -+ Customization Help +- + +To boot with default values just press ENTER. +Customizations of the Live environment: +boot: live lang=nl_NL kbd=nl tz=Europe/Amsterdam + "Specify language, keyboard and/or timezone" +boot: live nop "No persistence, i.e. boot the virgin installation" +boot: live nomodeset "Boot with kernel mode setting for graphics + -- needed with some machines." +boot: live load=nvidia "Load and configure binary Nvidia drivers" +boot: live rootdelay=10 + "Add 10 second delay to allow proper USB initialization" +boot: live swap "Activate swap partitions if found on the computer" + +To check your system memory with memtest86+, use 'memtest': +boot: memtest + diff --git a/syslinux/iso.sort b/syslinux/iso.sort new file mode 100644 index 0000000..ade31e7 --- /dev/null +++ b/syslinux/iso.sort @@ -0,0 +1,3 @@ +isolinux 100 +isolinux/isolinux.bin 200 +kernels 50 diff --git a/syslinux/isolinux.bin b/syslinux/isolinux.bin Binary files differnew file mode 100644 index 0000000..b179b3c --- /dev/null +++ b/syslinux/isolinux.bin diff --git a/syslinux/isolinux.cfg b/syslinux/isolinux.cfg new file mode 100644 index 0000000..1f06172 --- /dev/null +++ b/syslinux/isolinux.cfg @@ -0,0 +1 @@ +include syslinux.cfg diff --git a/syslinux/lang.cfg b/syslinux/lang.cfg new file mode 100644 index 0000000..c171eca --- /dev/null +++ b/syslinux/lang.cfg @@ -0,0 +1,51 @@ +label be +menu label belgisch +kernel /boot/generic +append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=nl_BE.utf8 kbd=be-latin1 tz=Europe/Brussels + +label br +menu label brazil +kernel /boot/generic +append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=pt_BR.utf8 kbd=br-latin1-us tz=America/Sao_Paulo + +label gb +menu label british +kernel /boot/generic +append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=en_GB.utf8 kbd=uk tz=Etc/GMT + +label de +menu label deutsch +kernel /boot/generic +append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=de_DE.utf8 kbd=de-latin1 tz=Europe/Berlin + +label es +menu label espanol +kernel /boot/generic +append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=es_ES.utf8 kbd=es tz=Europe/Madrid + +label fr +menu label francais +kernel /boot/generic +append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=fr_FR.utf8 kbd=fr tz=Europe/Paris + +label it +menu label italiano +kernel /boot/generic +append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=it_IT.utf8 kbd=it tz=Europe/Rome + +label ja +menu label japanese +kernel /boot/generic +append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=ja_JP.utf8 kbd=jp106 tz=Asia/Tokyo + +label nl +menu label nederlands +menu default +kernel /boot/generic +append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=nl_NL.utf8 kbd=nl tz=Europe/Amsterdam + +label ru +menu label russian +kernel /boot/generic +append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 locale=ru_RU.utf8 kbd=ru tz=Europe/Moscow + diff --git a/syslinux/memtest b/syslinux/memtest Binary files differnew file mode 100644 index 0000000..affaaab --- /dev/null +++ b/syslinux/memtest diff --git a/syslinux/message.txt b/syslinux/message.txt new file mode 100644 index 0000000..c9df271 --- /dev/null +++ b/syslinux/message.txt @@ -0,0 +1,12 @@ + +Welcome to 09Slackware@DIRSUFFIX@-Live07 version @SL_VERSION@ (Linux kernel @KVER@)! + +If you need to pass extra parameters to the kernel, enter them at the prompt +below after the name of the kernel to boot (default: live). + +To test your memory with memtest86+, enter memtest on the boot line below. + +This prompt is just for entering extra parameters. If you don't need to enter +any parameters, hit ENTER to boot with default values or press [F2] +for a listing of customization choices. Default kernel will boot in 30 seconds. + diff --git a/syslinux/swlogov.png b/syslinux/swlogov.png Binary files differnew file mode 100644 index 0000000..16bd64c --- /dev/null +++ b/syslinux/swlogov.png diff --git a/syslinux/syslinux.cfg b/syslinux/syslinux.cfg new file mode 100644 index 0000000..3f4bd5c --- /dev/null +++ b/syslinux/syslinux.cfg @@ -0,0 +1,15 @@ +default live +prompt 1 +timeout 300 +display message.txt +F1 message.txt +F2 f2.txt +label live + kernel /boot/generic + append initrd=/boot/initrd.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 kbd=us tz=localtime locale=us_EN.utf8 + +include lang.cfg + +label memtest + kernel /boot/memtest + diff --git a/xdm/Xresources b/xdm/Xresources new file mode 100644 index 0000000..7666d5c --- /dev/null +++ b/xdm/Xresources @@ -0,0 +1,56 @@ +#if ( HEIGHT == 1080 ) +# define LOGIN_POS_Y 740 +#elif ( HEIGHT == 1024 ) +# define LOGIN_POS_Y 635 +#elif ( HEIGHT == 900 ) +# define LOGIN_POS_Y 615 +#elif ( HEIGHT == 800 ) +# define LOGIN_POS_Y 550 +#elif ( HEIGHT == 768 ) +# define LOGIN_POS_Y 520 +#elif ( HEIGHT == 600 ) +# define LOGIN_POS_Y 400 +#elif ( HEIGHT == 480 ) +# define LOGIN_POS_Y 315 +#endif + +! The description of these resources is found in the xdm man page +xlogin.Login.greeting: +!xlogin.Login.greeting: CLIENTHOST +xlogin.Login.namePrompt: Username:\040 +xlogin.Login.passwdPrompt: Password:\040 +xlogin.Login.fail: incorrect +xlogin.Login.greetFace: Terminus-14:style=Bold +xlogin.Login.promptFace: Terminus-12:style=Bold +xlogin.Login.face: Terminus-10 +xlogin.Login.failFace: Terminus-14:style=Bold +xlogin.Login.frameWidth: 0 +xlogin.Login.greetColor: #5569B9 +xlogin.Login.promptColor: #5569B9 +xlogin.Login.failColor: red +xlogin.Login.width: 400 +xlogin.Login.height: 170 +xlogin.Login.y: LOGIN_POS_Y +xlogin.Login.borderWidth: 0 +xlogin.Login.foreground: #ffe4e4 +xlogin.Login.background: black +xlogin.Login.logoFileName: /etc/X11/xdm/liveslak-xdm/bluepiSW.xpm + +.XClock.geometry: 350x28+0-0 +.XClock.Clock.analog: false +.XClock.Clock.strftime: (%A)\040%F\040%T +.XClock.Clock.update: 1 +.XClock.Clock.render: false +.XClock.Clock.font: -misc-fixed-*-*-*-*-15-*-*-*-*-*-*-* +.XClock.Clock.background: black +.XClock.Clock.foreground: #9d9d9d + +.Xmessage.form.message.scrollVertical: never +.Xmessage.form.message.scrollHorizontal: never +.Xmessage.form.message.background: black +.Xmessage.geometry: -0-0 +.Xmessage.form.background: black +.Xmessage.form.Command.font: -misc-fixed-*-*-*-*-15-*-*-*-*-*-*-* +.Xmessage.form.Command.foreground: #9d9d9d +.Xmessage.form.Command.background: black +.Xmessage.form.Command.shapeStyle: Rectangle diff --git a/xdm/Xsetup b/xdm/Xsetup new file mode 100755 index 0000000..69a6d6d --- /dev/null +++ b/xdm/Xsetup @@ -0,0 +1,43 @@ +#!/bin/sh +# Borrowed from Arch Linux and adapted for Slackware. +# See https://aur.archlinux.org/packages/xdm-arch-theme/ + +# the root window should have this color +xsetroot -solid "#000000" -cursor_name left_ptr + +SVG_FILE=/etc/X11/xdm/liveslak-xdm/slackware_traditional.svg + +# identify resolution +declare -a RESOLUTION +RESOLUTION=( $(xrandr -q | head -n1 | sed -e 's/.*current \([1-9][0-9]\+\) x \([1-9][0-9]\+\).*/\1 \2/') ) + +CACHE_DIR=/var/cache/xdm-liveslak-theme +IMAGEFILE=${CACHE_DIR}/slackware_logo_${RESOLUTION[0]}x${RESOLUTION[1]}.png + +# create cache dir if necessary +if [[ ! -d ${CACHE_DIR} ]]; then + mkdir -p ${CACHE_DIR} +fi + +# check whether image file already exists +if [[ ! -f ${IMAGEFILE} ]]; then + rsvg-convert -a --background-color="#000000" -f png -w $((${RESOLUTION[0]}/3*2)) -o ${IMAGEFILE} ${SVG_FILE} +fi + +# try different methods to set the background +if which display >> /dev/null 2>&1; then + # imagemagick detected + display -background "#000000" -backdrop -window root ${IMAGEFILE}; +elif which feh >> /dev/null 2>&1; then + # feh detected + # feh gives error if $HOME isn't set, so... + HOME=/root feh --bg-center ${IMAGEFILE}; +elif which xv >> /dev/null 2>&1; then + # xv detected + # xv spits out an error when using -quit, but it still does the job, so... + xv -root -quit -rmode 5 ${IMAGEFILE} >> /dev/null 2>&1 +fi + +/etc/X11/xdm/liveslak-xdm/buttons & + +xclock & diff --git a/xdm/Xstartup b/xdm/Xstartup new file mode 100755 index 0000000..3ab2f54 --- /dev/null +++ b/xdm/Xstartup @@ -0,0 +1,8 @@ +#!/bin/sh + +# Get rid of all clients started by Xsetup +xwininfo -root -children | grep ' 0x' | cut -d' ' -f6 | xargs -n1 xkill -id + +# Register a login (derived from GiveConsole as follows:) +exec /usr/bin/sessreg -a -w /var/log/wtmp -u /var/run/utmp -x /etc/X11/xdm/Xservers -l $DISPLAY -h "" $USER + diff --git a/xdm/bluepiSW.xpm b/xdm/bluepiSW.xpm new file mode 100644 index 0000000..c7052f1 --- /dev/null +++ b/xdm/bluepiSW.xpm @@ -0,0 +1,387 @@ +/* XPM */ +static char *bluepiSW[] = { +/* columns rows colors chars-per-pixel */ +"128 125 256 2 ", +" c #020406", +". c #02020C", +"X c #02090A", +"o c #040113", +"O c #04021B", +"+ c #040518", +"@ c #020323", +"# c #02052B", +"$ c #010929", +"% c #020632", +"& c #010932", +"* c #01073B", +"= c #01093C", +"- c #231F2C", +"; c #231F31", +": c #24212D", +"> c #252232", +", c #292535", +"< c #26253B", +"1 c #29263C", +"2 c #2A293D", +"3 c #29293C", +"4 c #322E3E", +"5 c #000A44", +"6 c #000B4B", +"7 c #000745", +"8 c #01114D", +"9 c #011144", +"0 c #000D53", +"q c #010E5B", +"w c #001154", +"e c #00125C", +"r c #292740", +"t c #272941", +"y c #2A2B43", +"u c #2C2E4B", +"i c #272741", +"p c #322E45", +"a c #2E314E", +"s c #2E3046", +"d c #333244", +"f c #31314E", +"g c #393A4D", +"h c #2E3253", +"j c #2E355B", +"k c #313352", +"l c #3D3C56", +"z c #31355B", +"x c #32395D", +"c c #3D3D5A", +"v c #353853", +"b c #2C2F51", +"n c #050E64", +"m c #011363", +"M c #01156B", +"N c #01196C", +"B c #091268", +"V c #001673", +"C c #011A74", +"Z c #011C7C", +"A c #091D7E", +"S c #05217D", +"D c #09237D", +"F c #333B63", +"G c #353E6B", +"H c #373C62", +"J c #403E5A", +"K c #3D4259", +"L c #36406C", +"P c #3B436C", +"I c #3A4374", +"U c #3B4679", +"Y c #3D497C", +"T c #384474", +"R c #434355", +"E c #48485C", +"W c #474B59", +"Q c #454963", +"! c #474866", +"~ c #4E5469", +"^ c #54566B", +"/ c #424C7D", +"( c #494E76", +") c #4B5178", +"_ c #535474", +"` c #585A78", +"' c #504B63", +"] c #615F79", +"[ c #5B6579", +"{ c #65697D", +"} c #011D82", +"| c #042283", +" . c #0A2583", +".. c #0C2985", +"X. c #0B2689", +"o. c #0D2A8B", +"O. c #062188", +"+. c #122D8B", +"@. c #112B87", +"#. c #15328D", +"$. c #19358E", +"%. c #143393", +"&. c #1A3692", +"*. c #1D3994", +"=. c #1C3B9A", +"-. c #122E91", +";. c #233D95", +":. c #233E99", +">. c #3E4B83", +",. c #3E4D88", +"<. c #3F508A", +"1. c #254197", +"2. c #25429B", +"3. c #2A449B", +"4. c #2D499E", +"5. c #284395", +"6. c #334C9D", +"7. c #30459C", +"8. c #3A539F", +"9. c #2C4AA2", +"0. c #2647A0", +"q. c #324DA3", +"w. c #3A4FA1", +"e. c #3651A3", +"r. c #3B53A3", +"t. c #3C56A9", +"y. c #3F59A9", +"u. c #3853A7", +"i. c #414E84", +"p. c #414E8A", +"a. c #455286", +"s. c #43528C", +"d. c #4C5A8B", +"f. c #4A578A", +"g. c #565D87", +"h. c #455592", +"j. c #485792", +"k. c #465996", +"l. c #4A5A95", +"z. c #465A9B", +"x. c #4A5C9A", +"c. c #445799", +"v. c #535D91", +"b. c #5B6483", +"n. c #5A638B", +"m. c #576699", +"M. c #626C83", +"N. c #636B8B", +"B. c #65668A", +"V. c #6B748A", +"C. c #676D94", +"Z. c #6B7393", +"A. c #697797", +"S. c #737A9D", +"D. c #75799A", +"F. c #767C8F", +"G. c #435AA6", +"H. c #445DAA", +"J. c #485FAB", +"K. c #475AA4", +"L. c #4761AC", +"P. c #4C63AD", +"I. c #4C60A5", +"U. c #5364A3", +"Y. c #5166AD", +"T. c #5369AE", +"R. c #5B6CAC", +"E. c #5A6CA4", +"W. c #4D65B1", +"Q. c #4F68B2", +"!. c #5067B1", +"~. c #546BB4", +"^. c #586EB5", +"/. c #566EB8", +"(. c #586FB8", +"). c #5770B6", +"_. c #5A71B6", +"`. c #5770B8", +"'. c #5C73B9", +"]. c #6677A7", +"[. c #767BA5", +"{. c #6176BA", +"}. c #647ABC", +"|. c #697DBE", +" X c #6577B5", +".X c #6C79B1", +"XX c #677CC0", +"oX c #6A7EC1", +"OX c #788399", +"+X c #7C82A3", +"@X c #7B84AB", +"#X c #7A88A7", +"$X c #7282BD", +"%X c #7A88B7", +"&X c #6B80BF", +"*X c #6D81C2", +"=X c #7285C5", +"-X c #7589C6", +";X c #7A8AC6", +":X c #7587C8", +">X c #7689C9", +",X c #7B8CCB", +"<X c #7884C0", +"1X c #7E91CD", +"2X c #7F8ED0", +"3X c #8289AE", +"4X c #828AA6", +"5X c #838BB1", +"6X c #898EB4", +"7X c #8692B5", +"8X c #8B94B5", +"9X c #8B94BB", +"0X c #8B99B8", +"qX c #939DBD", +"wX c #9096B9", +"eX c #8890AA", +"rX c #91A0BE", +"tX c #818799", +"yX c #818DC7", +"uX c #8393CE", +"iX c #8A96CB", +"pX c #8999C7", +"aX c #939CC5", +"sX c #929ECB", +"dX c #949AC2", +"fX c #8594D2", +"gX c #8897D3", +"hX c #8699D3", +"jX c #8B9CD5", +"kX c #8D9CD8", +"lX c #929ED5", +"zX c #919FD9", +"xX c #808FD0", +"cX c #95A2C4", +"vX c #94A2CB", +"bX c #9AA4CC", +"nX c #9DAACC", +"mX c #99A1C5", +"MX c #8FA0D7", +"NX c #8EA0D8", +"BX c #94A3D5", +"VX c #9AA6D3", +"CX c #9CAAD3", +"ZX c #94A3DA", +"AX c #99A6DB", +"SX c #9CAADC", +"DX c #97A8DC", +"FX c #8FA3CD", +"GX c #A1AEDC", +"HX c #A0ADD5", +"JX c #A3B1DC", +"KX c #A4B0D5", +"LX c #9DADE0", +"PX c #A0AEE1", +"IX c #A3B1E0", +"UX c None", +/* pixels */ +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXB B B B A B Z V V V M B B B UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXB B O.X.#.&.;.7.7.w.w.w.w.w.w.7.3.:.;.+.X. .A V B B UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXB C D $.:.6.K.J.Y.Y.Y.R.R.R.^.^.^.^.R.^.T.R.Y.Y.K.K.G.7.*.+.} A V B UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXB C @.3.w.J.Y.R.R.R.R.R.^.R.T.^.!.!.^.!.R.(.!.^.~.R.^.R.R.~.!.!.J.G.:.;.} } V n UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXn C $.7.G.Y.T.R.^.R.R.~.!.R.!.T.^.!.!.R.!.!.!.!.!.!.T.~.~.T.R.~.~.~.^.^.^.^.!.H.q.&.} } V n UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXN A ;.w.Y.Y.!.R.T.^.T.^.!.~.!.!.!.!.!.!.!.!.!.!.!.!.!.!.~.~.R.!.~.!.~./.!.^.(.^.^.^.^.!.G.:.-.} V n UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXN @.3.J.Y.^.R.^.R.^.T.!.R.!.!.!.!.!.!.Y.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.~.!.!.^.!.~.^.^.^.^.^.^.~.J.q.-.} V n UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXB .7.J.R.^.R.R.!.R.Y.!.!.!.T.!.!.Y.Y.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.~.!.~.!.!.!.!./.^.^.!.^.^.^.^.^.^.W.q.-.} C m UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXB S :.J.^.^.!.R.!.!.!.!.R.^.!.!.!.!.!.!.!.Y.W.!.!.W.!.!.!.!.!.!.!.W.!.!.!.!.R.!./.Q.~.~.^.!.^.^.^.^.^.^.~.^././.P.7.X.} C 0 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXV &.G.!.^.^.T.^.T.T.T.!.Y.!.!.Y.Y.!.W.P.!.W.W.!.!.!.W.!.!.W.!.!.!.!.!.!.!.!.!.!.!.!.Q.!.~.~.^.!.^.~.^.^.^.~.^.^.^.^.^.J.;.| C m UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXn .6.Y.R.R.T.R.Y.!.!.T.Y.Y.!.Y.Y.!.W.P.W.W.W.Y.W.W.W.W.W.W.!.W.!.!.W.!.W.!.W.!.!.!.Q.!.~.~.~.~.!.^.~.^.~.^././.^.^.~.^./.^.!.u.+.Z V 0 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXN &.K.^.!.T.!.T.T.T.Y.!.!.!.Y.!.!.Y.!.P.P.W.W.W.J.W.J.W.W.!.J.W.!.!.!.!.W.W.!.!.!.!.Q.Q.!.!.!.~.~.^.~.^.~././.~.^.^.^.^.(.~.~.^.(.P.:.A V B UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXD 3.R.^.T.T.T.R.!.!.Y.Y.!.!.J.!.!.P.!.W.P.W.W.W.W.W.W.!.W.W.J.!.W.W.J.J.!.!.W.!.!.!.!.~.!.!.!.~.~.~.~.~.~.~./.~././.~.~.^.~.^.~./.(.^.~.q. .V M 5 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX.G._.R.Y.Y.R.Y.Y.Y.Q.Y.Y.Q.!.P.!.Q.P.Y.W.L.W.W.W.W.W.W.W.W.L.W.W.W.W.W.W.W.!.W.W.W.W.W.W.!./.!.~.~.~.~././.~./.~./.~.~.~././.!.~.(.~.~.(.(.J.@.C N 6 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXn -.J.'.R.T.Y.Y.Y.Y.Y.Y.P.Y.Q.P.Q.P.P.!.W.W.W.L.P.P.J.J.W.W.W.J.W.W.W.W.W.W.W.!.!.W.!.W.!.W.!.!.W./.~.~.~.~.~.~./.~.!.!.~.~.~.Q.!./.~.~.~.(.R.(.(.W.*.C N 0 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXM &.R._.T.T.T.Y.T.Y.T.!.Q.W.Q.P.P.Q.W.W.W.P.P.W.P.P.L.W.W.W.J.W.J.W.L.W.W.W.W.W.!.W.W.!.!.W.Q.W./.W.W.Q.!.~.~.~.~.~.~.~./.!.~.~.Q.~.!.~.~.~.~./.~.(.(.!.1.Z N 0 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXB :.^._.T.T.T.T.!.Y.Y.!.Y.Y.P.Y.P.Y.P.W.W.W.P.P.L.W.P.W.W.J.J.W.W.W.W.W.W.W.W.W.W.Q.!.W.!.W.W.!.W.W.!.!.Q.Q.Q.~.Q.~.Q.!.!.!.!.~.!.!.~.~.~.~./.~.~.(.(.(.`.^.3.C M 8 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXM :.'._.T.Y.Y.Y.Y.Y.P.Y.Y.W.P.P.P.P.P.P.P.P.W.P.W.W.P.P.W.W.W.L.W.W.W.W.W.W.W.W.W.Q.Q.!.W.W.W.W.W.W.W.W.!.Q.!.Q.!.~.!.!.^.!.!.!.!.~.Q.~.~.~.~.~.~.~.~.~./._.'._.4.C N 8 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXM ;. X^.Y.Y.W.Y.!.Y.Y.P.W.W.P.W.P.P.Q.W.W.W.P.W.P.P.W.P.P.P.J.W.W.W.Q.Q.Q.~./././././.(././._.^.~.~./.W./.W.Q.Q.~.Q.^.^.'.^.(././.!.~.!.~.!.!.~.~.~.~./.(./.`.`.`.^.4.C N 5 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXM &.^.^.Y.Y.Y.Y.Y.P.Y.W.P.W.P.P.P.W.P.P.Q.W.W.W.P.P.P.W.W.W.P.W.~.~./.'.XXXXXXoXoXoXoXoXoXoXoX*XoXoXXX{.(././.^.~.~._.'.oXoXoXoXoXXXXX(.!.~.~.~.~.~.~.(.(.~.~.^.`.`.`.^.3.N M 5 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXn #.T.R.Y.Y.Y.Y.W.W.Y.P.P.P.W.P.P.P.P.P.Y.P.Q.W.W.W.W.W.L.W.!._.'.'.oX:X2XgXzXZXLXLXLXLXZXLXLXLXLXDXzXgXxX2XoXoX}.'.'.oX>XjXAXzXZXZXfX2XoXXX/.!.~.~.~.~.~.~././.(.^.'.`._.!.*.M m = UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX.J.^.Y.!.Y.Y.P.W.P.P.P.P.J.J.P.P.W.P.Q.P.P.Q.P.W.W.P.Q.~.`.{.*X,XjXLXAXAXlXiXyX$X&X|.=X$X$X|.%X$XuXiXCXDXPXSXBXfX>X*XhXLXSXzXiXlXAXGXGXgX*X`.~.~./.~.~.~./.~.~.^./.`.`._._.W.#.N e & UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXA G._.Y.Y.Y.Y.J.Y.P.P.P.P.W.P.P.W.P.P.P.P.Q.P.P.P.P.Y.~._.}.=XgXAXSXlX%X XU.K.c.k.c.c.x.x.z.z.K.z.x.K.K.U.E.&X;XVXSXLXLXIX5XE.I.I.K.U.R.iXJX1XXX~.~.~.~.~././././.^.(.`.^.`._.'.L...m e @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXC 3.R.Y.Y.Y.P.Y.P.!.P.Y.W.P.J.W.W.J.P.P.P.P.P.P.P.P.Q._.{.=XhXLXAX%X Xl.k.h.z.h.l.l.k.k.h.z.x.z.h.x.k.x.l.l.z.k.x.x.E.$XjXsXE.x.x.x.x.x.x.E.SXjX*X_./.~.~.~.~.~././.^./././.`.`.'.(.t.C m 6 + UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXB &.Y.Y.Y.Y.Y.Y.J.P.P.P.P.P.P.P.J.P.P.P.P.P.P.P.P.Q.~._.}.fXDXBX<Xm.z.s.k.h.k.h.c.h.h.k.h.z.h.z.h.x.j.c.c.l.k.l.z.l.l.j.x.l.U.l.x.x.l.l.x.x.x.iXZX*X'.Q.Q.~.~.~.~.~.~.~././.^.`.^.(.^.^.4.M e = UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUX..K.Y.Y.P.Y.Y.Y.J.Y.P.L.P.J.J.P.P.P.P.P.P.P.Y.P.Y.~.`.*XkXSX%Xm.h.h.<.h.<.j.s.h.<.h.h.h.h.<.h.p.c.p.l.s.k.h.h.h.s.j.s.l.f.l.s.l.h.x.j.j.l.j.x.yXSX<X'.~.Q.~.~.~.~.~.~.).~./.~.(././.^._.Q.#.m e $ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXC 6.!.Y.Y.Y.Y.J.!.J.J.P.P.L.W.W.P.P.J.P.P.P.P.P.Y.!.}.:XDXBXE.h.<.h.<.h.s.h.a.h.<.p.h.,.s.s.s.,.h.p.c.p.h.s.k.<.h.h.s.h.s.k.s.s.f.h.s.d.s.j.l.p..XSX-X'./.Q.~.Q.~.~.~.~.~./.~./.^.^.^.~.`._.y.S m 8 O UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXm &.P.Y.Y.Y.P.J.Y.J.Y.J.P.W.P.P.P.W.J.J.W.P.P.P.P.^.'.,XLXiXl.p.p.s.<.h.>.<.<.h.<.<.,.,.h.f.l.j.E.m.E.j.x.s.h.<.<.<.s.j.a.h.s.k.p.h.s.h.s.s.j.j.j..XSX-X'./.~.Q.~.~.~.~.~.~.~.~././.~./.(._.~.^.4.M m = . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXS G.T.Y.Y.Y.Y.P.P.P.P.P.L.P.P.L.L.W.W.W.J.P.P.P.T.'.1XLX5Xj.i.i.p.>.<.>.<.>.<.>.<.j.E.@XyXiXlXVXPXGXGXzXkXFX9X@Xm.d.<.>.h.>.s.p.s.i.s.p.s.p.p.s.i. XGX;X'.Q./.~.Q.!.~./.~.Q./.~.~.~.^.^./.`.~._.Q.@.e w @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXN :.P.Y.Y.P.Y.J.P.P.J.Y.P.P.P.P.L.W.W.P.J.L.W.P.!.'.-XDXyXs.>.p.>.>.<.>.<.>.<.>.m.@XBXDXSXzXgXgXfX2XoXgXgXxXkXAXSXSXFX+Xm.a.s.Y s.<.s.>.a.p.a.s.p.s.].GX;X{./.!./.Q./.!.Q././././.Q./.~././.~.`.`.^.u.C m 5 o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXw X.K.Y.Y.Y.P.Y.P.P.P.P.J.P.J.P.I.L.P.J.P.L.W.L.!.^.&XZXiXf.>.>.i.>.>.>.>.>.>.s.%XDXSXjX,XoXoX{.{.{.(./.XXXXXXXX*X>X2XkXSXvX$Xf.s.a.s.a.s.p.a.a.a.s.p.m.SXuX}./.!.!.Q.!.!./.!.~.Q.~.~./.~./././.^.^.^.~.$.e w @ . UXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXM 3.Y.U.Y.Y.I.P.P.J.Y.J.J.Y.P.P.P.P.W.L.L.L.W.P.T.'.fXCXm.Y <.Y >.>.Y >.Y >.d.sXDXxX=X}.'.^.~.!.!.~.!.W.W.!./.!./.`.}.*X>XkXIXpXa.a.Y a.>.p.i.i.i.>.>.l.CXuX{./.W./.Q.!.!.!./.~.Q./.Q.~.~.Q././.~.~.^._.y.C e 5 o UXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXq @.G.Y.Y.Y.Y.P.Y.I.P.P.J.P.J.J.P.J.P.J.W.L.P.P.Y.).=XDX].Y >.Y Y Y U Y Y Y v.BXzX:X{./.!.W.W.P.!.P.!.!.W.W.W.W.W.W.~.Q./.`.XXfXJXpXa.p./ i./ i.Y / a.Y l.BXiX X~.~.Q.Q.W././.Q.Q./.Q./.Q.~.~.~./.^././._.Q.&.m 0 # . UXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXV 1.P.Y.P.P.Y.I.J.Y.P.P.J.J.J.W.J.P.P.P.J.P.P.P.Y.'.fXVXd.U Y U U Y U Y U a.FXBX*X'.~.W.W.W.W.W.P.W.W.W.W.J.J.W.W.W.W.W.W.!._.}.1XIX%Xa./ / Y / / / Y i.g.bXgX}.~.!.~.!.Q.Q./.!.Q.~.~.Q.Q.~.~.~.~././.^.(.(.G.V 0 5 . UXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXX.z.Y.Y.Y.Y.P.P.Y.P.J.P.P.P.P.L.P.P.P.P.J.J.L.P.Q.*XCX%XU U U U T U T I U $XDX=X'.Q.Q.W.W.W.L.W.W.P.W.W.W.W.W.W.W.W.W.W.W.W.Q.^.}.hXHXm.U U U U U U U U a.sXjX}.(.!.~.~.!./.!./.~.~.~././.~.~.~.~././.^.(.(.~.$.e w @ . UXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXM &.P.Y.P.Y.I.P.P.P.L.I.L.P.J.L.L.L.L.L.L.L.J.L.W.).-XSXm.U P U T I T T T a.vXjX}.~.W.W.W.L.W.W.L.J.J.W.J.J.W.J.W.W.W.P.!.W.W.W.~.'.:XSX#X/ / I U U I U U / yXzXoX/.~.~.!.Q.Q./.Q.Q.~.Q.~./.Q./.~.^./././.(./.(.e.N w = o UXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXZ 8.Y.Y.P.P.Y.P.P.P.P.P.P.J.J.L.P.P.J.P.J.W.P.W.P.).,XCXv.L U L T I G L G m.DX;X_.W.L.W.L.W.L.L.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.Q.~.XXNXCXd.G U I I U I U / iXzXXX/.!.~.~.W./.W./.Q./././././././././.^.^./.^.(.W...e 6 O o UXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXe +.K.P.P.P.P.U.L.P.P.L.P.P.P.J.J.J.L.L.P.P.L.P.L.P.).,XvX/ T L P L G G G G E.AX$X^.W.P.P.L.W.W.L.W.L.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.~.'.>XLXpX/ T T I P U L d.GXiX}./.!.!.Q.Q.Q./.W././././././.Q././.Q./././././.^.3.m w # o UXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXC 5.U.P.P.Y.P.P.P.P.P.P.L.L.L.J.P.J.P.L.L.L.L.P.L.!._.1XaX) F T G L G G G G ].AXoXT.P.L.L.W.L.W.W.L.W.H.W.H.L.W.J.W.W.W.W.W.W.W.W.W.W.~.XX,XSX%X>.T I T P d.pXSX,X'./.Q.Q.Q./.Q.W./.Q././.Q.!./././././././././././.G.C q = o o UXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUX} r.Y.P.P.P.I.P.P.P.L.I.L.J.L.J.J.L.J.J.L.L.J.L.L.!._.1XaXP P F L F T G G G C.AX=X^.Q.P.W.L.W.P.P.W.W.L.H.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W./.XXfXLXvX+XC.A.%XCXSXuX}.`.Q.Q.Q.Q.!./.!.W.Q.Q.Q./././.Q./././././.~././.~.Q.+.e 6 @ o UXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXm #.K.Y.P.Y.U.P.P.P.L.P.L.L.L.P.J.I.L.L.J.J.J.J.P.P.P._.1XvX/ F L F L F F F F f.CX;X_.Q.W.L.P.L.W.L.P.W.W.W.W.W.W.W.W.W.W.Q.W.L.W.W.W.W.W.~.`.oX,XBXLXLXSXDXkX;X}.^.^.Q.Q.Q.W.Q.Q.Q./././.Q.Q./.Q./.Q.!./.Q./././././.~.3.m w # o UXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXV 1.P.Y.P.P.I.P.P.P.I.L.W.L.P.P.J.L.L.L.L.P.L.L.P.L.W._.1XVX( F x F x F F F F G 5XkX|._.Y.Y.P.W.L.L.W.W.H.W.W.W.Q.W.J.W.P.Q.W.W.W.W.W.W.W.W.!.(.{.oX:X,X>X=XoX'./.~.W.Q.Q./.W./.Q./.Q.W./././.Q./.Q./././././././././.).y.N w = O o UXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXZ 6.Y.P.P.Y.Y.P.P.P.P.I.P.P.L.L.J.W.J.L.P.L.P.L.P.L.P.~.*XSXm.j G x x j j F x F g.vXjX&X'.^.Y.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.P.W.W.Q.Q.W.~./.(.'.`.(././.~.~.!.Q.Q.Q./.W.W.Q.Q.W./.Q././.Q././././.Q./././.~./.^.P...w 5 O . UXUXUXUXUXUXUXUXUX", +"UXUXUXUXq X.z.Y.Y.P.P.P.P.P.L.L.P.J.P.P.P.J.W.J.L.P.P.P.P.L.L.L.!.*XDX+XF x x j j j x x h x n.sXZX1X*X'./.~.Q.!.Q.Q.W.W.W.W.Q.W.W.W.W.W.W.W.W.W.W.W.W.W.!.W.!.~.!.!.~.Q.Q.!.Q.Q.W.Q.W./.Q././.W.Q./.W.Q.Q.Q./.Q.!./././././.~.~.~.~.*.e 6 @ o UXUXUXUXUXUXUXUXUX", +"UXUXUXUXM %.I.Y.Y.P.P.L.I.P.I.P.P.L.J.P.L.J.J.J.L.L.J.P.L.W.L.P.Q.'.hXcX! h x j h h h z j v z ( @XCXZXhX>X*XXXXX'./././.~.^./.~.Q.Q.Q.Q.W.Q.Q.W.Q.Q.Q.Q.Q.Q.!.!.!.!.Q.Q.!.Q.Q.Q./.Q.Q.W./.W.W././.Q.Q././.Q./.Q./././././.!.~./._.^.q.m 0 & o o UXUXUXUXUXUXUXUX", +"UXUXUXUXV :.Y.Y.P.P.P.P.P.J.J.J.P.J.J.W.J.J.J.L.L.L.L.L.W.L.L.P.Y._.:XDXS.x z h h j h h j z j h x ) [.dXCXAXBXjXuX,X;X=X=X*XoXXX}.{.'.'._._.^.^.!.!.Q.Q.W.W.!.!.!.!.!.Q.~.Q.Q.Q.Q.Q.Q.~.Q.Q./././.~.Q.~.Q./.Q././.~./././.^.~./.)._.y.C 0 * O o UXUXUXUXUXUXUXUX", +"UXUXUXUXA 6.Y.I.W.I.I.P.P.P.P.P.I.J.J.P.L.P.L.J.L.J.J.L.L.P.W.L.P.Y.}.hXVX) h a b b a h u h h h b h h P ) C.[.9XVXVXSXSXDXZXzXkXhX1X1X>X-X:X*X}.}.'.`._.~.Q.Q.!.!.!.!.!.Q.~.Q.~.Q.~.~.!./.Q.Q.Q.Q.~.~././.Q.~.~.~./.~././.`.`.^.~.^.L.S 0 5 O o UXUXUXUXUXUXUXUX", +"UXUXUX0 X.8.Y.I.I.P.P.P.I.W.J.J.P.L.P.P.P.L.J.L.W.L.J.W.L.L.L.L.P.P._.*XZX0X! b h h b u h u h u h a h a u h j H c ( _ n.B.@X3X6X9XaXBXLXGXSXDXMXhX,X=X}.'._.^.!.!.Q.!.!.Q.!.Q.Q.Q.~.~.Q.Q.~.Q./.Q./.~.Q.Q./.~./././.~._./.).~.`.^.^.Q.#.0 6 O o UXUXUXUXUXUXUXUX", +"UXUXUXq .G.U.P.Y.J.P.P.P.J.J.P.J.L.L.L.J.J.J.P.L.L.J.L.L.P.P.W.P.P.Y._.=XDXeXP a h u h u h u h u k s a u k u u h u h u k a h h x P P ` ` C.[.wXvXSXDXBXfX-X}.'.^.~.!.!.Q.Q.!.Q.~.Q.~.Q.Q./.Q.Q.Q./.~.~./.Q.~././././.~././.`.`.~.^.^.*.q 0 @ o o UXUXUXUXUXUXUX", +"UXUXUXM +.I.!.P.Y.I.P.P.L.J.J.P.L.L.J.P.J.L.P.J.J.W.J.L.L.W.L.W.P.L.P.~.'.>XDX0X) h a y b t b t h y u u u u y u y a y a y a y a y u a y a s h f ! _ [.9XVXDXMX>X|.'._.~.!.!.!.!.Q.~.Q.~.~.~./././././.Q.~.~.~.~.~.~.~././.~.).~././.`.3.m 0 # o o UXUXUXUXUXUXUX", +"UXUXUXM $.I.Y.P.P.P.P.I.P.I.P.L.L.J.P.P.P.J.L.L.L.L.L.L.L.L.L.L.P.L.P.P.T.'.>XZXCXOXK s t u t y t y 2 t t y y 2 y t y y s y s r y y y s y a t a y u y v ! S.cXLXMX;X|.'.^.~.~.~.Q./.~.Q.Q./.Q././././././.Q./.~././././.^.`.`.~.~.^.`.e.m 0 # O . UXUXUXUXUXUXUX", +"UXUXUXV ;.U.Y.Y.Y.P.P.Y.P.P.J.P.P.I.P.J.J.J.P.L.W.J.L.L.L.L.L.W.L.P.P.P.P.!.'.*XfXDXbXV.P y y t t 2 t t t t < t 2 y 2 u 1 y r y 2 2 r r y 2 y 2 y r y y y y c B.bXSXfX*X'._.!.^./././././.~././././././.~./././.`.~./././.~.)./._._.^.u.N 0 % o o UXUXUXUXUXUXUX", +"UXUXUXC 5.Y.P.Y.P.P.I.J.P.P.!.L.P.L.L.L.L.P.J.P.L.H.W.W.J.L.L.L.P.L.P.P.P.P.Y.^.'.-XhXSXbX#X` c t t < t i t y < t 2 y y t < y i y y 2 r 3 r 2 r < y 1 p 2 y i r c +XHXkX>X}.(.~.Q./.Q././././././././.Q././././.`././.`._./.`.^.~._.^.y.C 0 = O o UXUXUXUXUXUXUX", +"UXUXUXZ 7.U.Y.Y.P.I.P.Y.L.P.J.I.P.P.J.L.J.J.L.W.L.L.P.L.L.L.W.L.P.L.P.L.Q.L.Q.Q.Q.`.'.-XfXAXSXcX#XM.~ v s t < < < < < 3 1 1 1 i < 3 < < 3 , < < r < < 3 2 2 2 2 1 y g.HXzX:X}.^.~.~.~.~.~.).~.`./././.Q./././././.~./.^.~.`./.~.~.^.^.L.Z 6 * o o UXUXUXUXUXUXUX", +"UXUXUX} 6.Y.P.P.I.P.P.P.P.P.P.J.L.L.P.L.P.P.W.J.L.P.J.W.L.L.L.W.L.P.L.W.L.P.L.L.Q.P.Q.).'.*X;XgXAXDXGXcX7XOXb.^ K K a 3 2 , < < < > < , < < < < < < < < < 2 1 < r 1 r _ nXZX-X{.^.~.~.~.~.~.~.`./.Q./././.Q./././.~.~._.`.~./.^././._.W.A 0 7 O o . UXUXUXUXUXUX", +"UXUXUXZ 6.U.Y.P.P.P.P.P.P.P.L.I.P.L.P.L.W.J.J.P.P.P.P.P.L.W.L.L.P.L.P.P.P.Q.P.P.P.P.P.P.W.~.`.'.oXoX;XgXzXAXSXSXCXFXrX0X4XA.[ ` Q K K 4 3 < , > 3 > < < , < < , 1 1 , 1 ` HXgX=X'.^./.~.~.~.~.~./.Q./.Q.~.~./././.~././.`.~.`.^.^._.^.L.S 6 7 O o o UXUXUXUXUXUX", +"UXUXUXZ 6.Y.Y.P.P.Y.P.I.P.P.L.L.L.J.J.P.J.J.P.L.J.L.W.L.L.L.L.W.L.P.P.P.P.P.P.P.W.P.P.P.P.W.Q.W.!.^.`.}.|.oX=X>X1XfXjXMXAXDXSXGXHXnXrX0X#XM.' d , > > > - > > , , ; ; , r D.GXyX}._.^.~.~.~.~./.Q././././.~./././.~.~.~././.~./.).~.^.W.A 6 * O o o UXUXUXUXUXUX", +"UXUXUXA 6.Y.Y.P.P.Y.P.Y.P.L.L.L.L.J.J.P.J.L.L.P.L.L.P.P.L.W.L.L.L.W.P.P.P.W.P.P.L.P.L.L.P.P.L.W.W.!.!.!.~.~.^._.'.'.}.XX*X*X:X:X1XfXhXBXAXSXGXqX{ J , , > > > ; > > , , , v aXZX*X'.^.^./.~.~.~./.~.~././././././.~./.^.).~.~.~.~.~.).P.S 6 5 O + . UXUXUXUXUXUX", +"UXUX6 } 6.Y.Y.Y.Y.P.Y.P.Q.P.L.P.P.L.L.L.J.W.W.L.W.W.J.W.W.J.L.W.L.W.Q.~.~.).).~.Q.Q.Q.P.P.W.W.W.W.P.W.W.W.W.Q.Q.~.~.!.!.^./.(.`.'.'.}.}.oX:XuXzXJXnXM.4 > , > : > > > > , > N.JX1X{.^.^.~.~.~.~.Q./.~.Q./.Q./.Q./.~.~./.~.^.).).~.).).P.A 6 = O o . UXUXUXUXUXUX", +"UXUX6 Z 6.Y.Y.Y.P.P.P.Y.P.P.P.P.J.P.L.W.L.J.W.L.L.P.J.P.L.W.J.W.Q.`.'.*X*X*X-X&X'.).Q.Y.P.P.W.L.W.W.W.W.W.W.W.W.P.P.W.W.W.Q.Q.Q.~.!.~.~._._.{.oXuXlXJXtXd ; ; > > ; > ; ; ; c nXjX|.^.~.~.`.Q././././././.~.Q./.~.~.~./.^.).~.~.^.).^.L.S 6 = O o o UXUXUXUXUXUX", +"UXUX9 A 7.U.Y.P.Y.I.P.P.P.P.P.L.L.L.J.L.L.W.J.L.P.W.W.L.W.L.W.~.'.=XhXDXSXSXSXDXhX=X'.T.Q.W.P.W.P.W.L.P.W.W.P.W.Q.Q.Q.W.W.W.Q.W.W.W.Q.P.!.!.!.^.{.$XfXJXF.1 , ; ; : > > > > 2 7XBX*X_.~.~.~./././.Q.Q./././.~././.~./.^.~.~.^.^.~.~.^.H.Z 6 * o o . UXUXUXUXUXUX", +"UXUXUX} 5.Y.Y.Y.Y.P.P.P.P.P.L.P.P.P.P.L.P.L.P.P.P.P.P.P.P.Y.Q.'.;XZXaXN._ _ ` A.VXMX*X_.Q.W.P.P.W.W.W.W.W.W.W.W.W.W.W.W.L.W.W.W.Q.Q.P.W.!.W.!.!.~._.*XhXHX' > > ; ; ; > > > > S.LX=X'.).~.~././.~.~.~./.~.~./.~.Q.~.~.~./.^.~.^.~.^.~.y.C 6 * O o o UXUXUXUXUXUX", +"UXUXUXC 5.P.Y.P.P.Y.P.P.P.P.P.P.P.L.P.P.P.P.L.P.P.P.P.P.P.L.).&XZX6Xl < > > > < ! aXMX*X).Q.P.Q.W.y.W.W.W.W.W.W.W.W.W.W.W.W.W.W.P.W.P.W.W.!.W.!.Q.!.'.-XSXOX< , ; - ; > , > > N.LX-X{.).~./.~.~.~.~./.~.~.~.~././.~.~.`.~.~.~.^.^.~.).u.N 6 * o o . UXUXUXUXUXUX", +"UXUXUXC $.I.Y.Y.Y.P.P.P.P.I.P.P.P.L.L.L.L.P.P.L.L.P.P.P.P.P._.=XDX` ; > > > : - ; ( VXuX'.~.P.L.W.y.W.W.H.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.!._.}.zXqXd > > < > : > > : ` JX;X{.).~.~.~.~./.~.~./.~.~.~.~.~.~./.^.~.~.~./.).).).6.B 6 % o o . UXUXUXUXUXUX", +"UXUXUXC #.I.Y.Y.Y.P.P.P.P.L.L.P.P.L.L.P.P.L.P.P.L.L.P.P.P.P.).-XVXE ; > : ; - - : > S.DX&X^.Y.P.W.Q.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.!.W.W.!.Q.P.!.}.iXnXg , > ; ; > > > > ` JX,X'.T.Q.~.~./.Q./.~.~././././.~./.~.~.^.~.^.~.T.~.).3.B 7 % o o . UXUXUXUXUXUX", +"UXUXUXV X.L.Y.P.P.P.P.U.P.I.L.P.P.L.L.P.P.L.P.L.Q.L.Q.L.Q.P._.-XCXR ; ; : > ; ; - ; Q CX;X{.Y.P.W.W.W.L.W.W.W.W.W.W.W.W.J.W.W.W.W.W.W.W.W.W.W.W.W.Q.!.{.fXnXJ : > ; > > ; > > [ JX;X{.^.!.!.Q.Q.Q./.Q.~.~./.~.~./.~.~.~.~.~.~.~.).).Q.*.e 5 @ O o . UXUXUXUXUXUX", +"UXUXUXm | r.Y.P.P.Y.P.P.P.P.P.P.P.L.P.L.P.L.P.P.P.L.P.P.L.Y.).-XnXR - ; - - ; - ; ; r 9XjX}.^.P.W.W.W.W.H.W.W.H.H.W.W.W.W.W.W.W.W.W.W.P.W.W.Q.!.!.Q.^.}.jXdXd , > - ; ; > ; < Z.GX=X'.^.!.^.~.~.~.Q.~./.~.~.~.~.~.~.~./.~.).~._.).T.Y.#.w 5 @ O o . UXUXUXUXUXUX", +"UXUXUXm | 6.Y.Y.P.P.P.P.Y.L.L.Y.P.J.L.P.P.L.P.P.Q.L.P.L.L.Q.`.-XCXR ; ; : > : ; - > > M.SX:X_.Y.W.W.W.L.W.W.W.W.W.W.W.W.Q.W.W.W.Q.W.W.Q.W.W.W.!.P.Q.^.*XAX4X1 , > > > : : > < +XDX|.'.!.^.~.~.Q.~.Q.Q.~.~.~./.~.~.~.~.~.~.^.~.~.~.).L.D 6 5 O o o UXUXUXUXUXUXUX", +"UXUXUXw } 5.P.P.Y.P.P.P.L.Y.L.L.P.L.P.L.P.L.L.L.L.P.P.P.L.Q.).-XCXE > > > > > : : > - k pXsX}.^.W.W.L.W.W.W.H.W.H.W.W.W.W.L.W.W.W.W.Q.W.P.Q.Q.P.P.^.{.xXGX] ; , ; > ; > ; - d rXBX|.'.T.~.~.Q./.Q./.~./.~.~.~./.^.~.~.~.`.~.~.~.).).t.C 6 * O O o UXUXUXUXUXUXUX", +"UXUXUX5 Z %.J.Y.P.P.P.Y.P.P.L.P.I.L.L.P.P.P.P.P.P.P.P.P.P.Q.).-XCXE : : : : > : : : : : ^ nXuX}./.Q.P.P.Y.W.L.W.W.Q.P.P.W.W.W.W.Q.Q.Q.Y.W.Y.!.!.~.'.=XDXwXd , ; ; > > > > : Q CXuX}._.Q.Q./.).Q.~.Q.~.`./.Q.`.~.`.).~.`.^.^.^.^.).^.q.B 6 % O o . UXUXUXUXUXUXUX", +"UXUXUXUXC X.K.Y.U.P.P.P.L.Y.P.P.P.W.P.Y.^.^.'.'._.Q.Y.L.P.P._.-XHX' > : : : : : : - : : , F.SXuXXX`.^.T.!.Y.W.W.P.W.W.P.W.Q.W.W.Q.P.Q.P.W.!.^._.}.-XZXbXE , , > : : - > ; , D.GX-X'.).~.~.~.~.)./.`././.~.~./././.~.~./.(._._.^.).!.;.q 7 # o o o UXUXUXUXUXUXUX", +"UXUXUXUXM | w.P.P.P.P.P.P.P.P.L.P.P.P.!.}.>XuX1X$X'.Q.P.Y.Y.).-XSX^ > : - - ; ; : : : : : 3 C.VXNX-X|.'.^.!.W.W.P.W.W.W.W.W.W.W.Q.Q.T.)._._.{.|.1XDXmX' , , > : > - : : : K nXlX&X_.~.~.~.~.~.Q.~./.^./.~./././.`.~.`.^.(._.^.^.^.P.@.6 7 @ o o . UXUXUXUXUXUXUX", +"UXUXUXUXw } 1.Y.P.P.T.Y.Y.P.P.P.P.L.P.^.-XZXaXvXMX}.T.P.L.Q.).&XSX^ : , : : : - : : - - - - , ^ pXSXjX-X&X}.'.^.^.^.^.~.~.~.~._.).).'.'.}.*XxXlXJX4XR , , > > - : > > > 2 +XGX;X{._.!.~.~.^./.~.^.~.~.~./.^.^./.~.~.).).^.'.`.`._.H.A 6 5 O o o o UXUXUXUXUXUXUX", +"UXUXUXUX= } #.J.P.P.P.P.Y.P.L.P.P.L.P.R.>XVXQ n.BX&X~.P.L.P.).$XCX^ > : : : : : : : - - - : : : d B.qXCXBXhX,X=XoXoX|.|.|.}.|.|.&X&X-X1XlXAXHXwX] p , , ; : > - : : , > [ JXiX|._.~.~.~.~./.~./.~.~././.~.~./.~._.`.`.`.`.'._._.).4.m 6 % o o o UXUXUXUXUXUXUXUX", +"UXUXUXUXUXC | r.Y.Y.P.P.P.P.P.P.P.P.Y._.>XVXK b.MX&X~.P.P.P.~.&XSX{ > : : - : : : : : : - - - : - > p ^ +XaXHXSXAXSXZXlXMXlXlXlXDXDXJXKXqX+X_ d > , > , > ; > : , : : ~ HXBX<X{.^.~.Q.~.~.~./.Q.~.~.Q.~.`.~./.~.~.).`.`.'.`._._.Y.#.0 6 # o O o UXUXUXUXUXUXUXUX", +"UXUXUXUXUXm | 2.P.P.P.Y.P.P.P.U.P.P.P._.-XVXK b.BX&X~.P.P.P.).&XSX{ > > : : : : - - - - - - - - : - - : : d E ` B.D.eXwXwXwXwXeXD.Z.` E g , : , > : : : : : : > : , ~ nXBX<X{.).~.~.~.~.~.`.~.~.~./.~./.~.).~./.`.).).^.^._.^._.H.S 6 7 O o o . UXUXUXUXUXUXUXUX", +"UXUXUXUXUX9 } +.I.Y.P.P.P.P.P.P.P.L.P.^.>XbXc b.BX&X~.Q.L.P.).&XSXV.> : : : : : - - - - - - - : - - - : - : : : ; ; , 2 2 2 4 , , , , : : : : : : : > : : ; > ; , [ nXZX-X}.).~.Q.Q.~.~.~.~.~././.~././.`.~.`.`.~.`.).).^._.^.^.0.m 7 % O o o . UXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXC | e.Y.P.P.P.P.P.P.P.P.P.).-XnXJ b.ZX|.!.P.L.P.~.'.BXOX, : : : : : - - - - - - - - - - - - - - : : : : : : - - : : : : : , : : : : : : : : > > > g OXHXlX=X{.(.~.!.~./.Q./.~.~.~.~./.~.~.~.~./.~.~.~.).^.^._._.).P.o.w 5 # o o o UXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXe | *.I.P.U.U.P.P.P.P.P.Y.).>XnXK M.ZX|.T.P.P.P.Y.&XNX+X, : > : - : : : : - - - - - : : - - : - : : : - - - - - : : : : : : : : : : : : > > > d { rXJXfX=X{.^.~.~./.~.~.~.~.~.~.~.~.~.Q././.~.^././.~.~.~.)._.).).u.C 6 5 O o o o UXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUX= } X.t.Y.Y.Y.P.P.P.P.P.Y._.>XbXK n.BX&XR.P.P.L.Q.}.jX0Xd : > : > : > : > [ { R 3 : : : : : : : - : - - - - - - - ; : > : ; : : : : : - , d [ 0XJXBX;X|.{.^.~.!.~.~.~.Q.Q./.Q.~././.`.Q.`.~././.^.~.).^.).^.)._.~.&.e 6 # O o o o UXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXm | 1.Y.P.P.P.P.U.P.P.Y.).>XbXK n.BX}.!.W.P.P.Q.'.,XCX' - > > : : - ; y 0XJXnX0XM.W 4 , > : - - : : : - - - ; ; ; > , > > > : : , d ~ OXcXJXBXuX&X{.`.~.~.~././.!.~.Q./.~.~./.~.~.`.`.~.~./.~.^./._.~.).).)._.y.S 6 5 O o o o UXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUX9 S X.L.P.Y.P.P.P.P.Y.Q.).1XbXK N.ZX}.~.P.L.P.Q.).=XZXeXd > > - ; : < [ CXpX,XBXSXCXrXOXM.~ K d 2 : : > : ; ; ; , > , 4 d R ^ { 4XcXJXSXkX,X*X}._./.Q.Q.Q.~.~.~.Q.Q.~.~.~./.Q.`.Q.~.`./.~.~.~.~.`.~.)._./._.~.=.m 5 * o o o o UXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUX$ C Z 5.Y.Y.Y.Y.P.P.Y.Y.).,XbXK n.ZXoX).Y.P.P.P.Q.'.,XSX8X` R R R W V.CXjX&X_.}.=X,XjXAXSXKXnXrX7XtXtXOXM.M.M.Z.tXOX4X0XqXnXJXJXAXkX1X-X|.{._.^.~.!.Q./././.!.~./.Q././.Q./.).).)./.Q./.`.`.^.`.`.`._.^._.'.H.| w 5 @ o o o o UXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUX8 Z ..G.Y.P.Y.P.P.P.P._.,XvXK N.BX}.^.P.P.P.P.P.^.{.,XBXCXnXCXCXCXDXiX&X_.~.T._.'.{.}.=X;XuXjXBXCXZXAXDXSXSXLXzXDXCXZXjXuX,X-X=X}.'.'.`.^.!.Q.~./.!.Q.~.Q.~.Q././.Q.~./.Q.`.~.).`.Q./.`./.`.`./.`.`.`._.!.=.m 6 = O o o o UXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUX@ V S 5.P.Y.P.Y.P.Y.Y._.1XbXK N.ZX}.T.P.P.P.P.Q.W.^.'.|.-X,X,X;X;X=X{.).Y.P.Y.Y.Y.~.^._._.'.'.{.XXoX*X=X=X=XoXoXXX*X|.}.}.{.'.^._.).Q.~.!.Q.Q.~.!./.~.~.~.!./.Q.Q.Q.~.Q./.Q./.`.`.`.~././.^.(.^./.`.`.`.t.| 6 5 @ o o o X UXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUX8 Z | r.Y.P.Y.P.P.T._.1XrXl N.BX{.~.Y.P.P.P.P.P.Q.Y.~._.'._._._._.).Y.P.P.P.P.Y.Q.P.Y.Q.!.~.).~.^.)._.'.`.^.^.^._.^.~.).^.~.~.~.Q.Q.~.Q.~.Q.!.~.!.~.~.Q.~.~.Q.Q.Q./.~.~.).~.Q.Q.`.).`./.)././.^.^.`.Q.%.m 5 * O o o o UXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUX+ N S #.L.Y.P.P.P.T._.1XcXc V.BX&X~.P.P.P.Y.P.Y.P.Y.Y.Y.!.Y.~.P.Q.P.Y.Q.W.Y.Q.P.Q.Q.Q.Q.Y.Y.Y.Y.Q.Y.Q.!.W.~.!.Q.!.Y.Y.!.!.Y.~.Q.~.~.~.~.Q.Q.~.!.~.!.Q.Q.Q.Q././.Q./.~.~.~.Q.`.Q./.Q.)./.).`.~.`./.~.9.C 6 5 @ O o . . UXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUX5 C S 4.U.P.Y.Y.E._.1XcXl C.BX&X).Q.Q.Q.~.Q.Q.Q.~.~.~.T.Y.!.!.Y.~.T.T.Q.Q.Q.^.Y.!.!.!.^.~.~.~.~.~.~.!.~.(.^.).T.).~.~.~.~.^.).).~.).~.~.^.`.~.^./.^.).)._._./._.).).`.'.`.`.'.`.`.`.`./.~.~./.`.H.X.w 5 % o o o . UXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUX+ w C .8.Y.P.Y.Q._.1XcXl Z.MX&X'.'.&X'.'.'.'.&X{.{.}.'.{.'.{.}.'.}.'.'.}.{.{.{.}.{.{.{.'.{.{.{.{.}.{.}.{.{.}.}.}.{.}.}.}.}.'.}.}.{.}.XX}.}.XXXX}.XXXX}.}.}.XXXXXXXX}.XX*XXX*XXX*XXX'.`._.`.`.Q.=.m 6 5 O o o o . UXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUX$ N Z #.I.P.P.Y._.1XcXl A.LXhXhXhXhXhXhXhXFX1XNX1XhXhXjXhXfXhXfXhXNXhXhXhXhXhXhXhXhXjXhXjXhXhXjXNXkXgXgXkXhXNXMXjXjXhXjXjXNXhXkXkXNXhXkXjXhXkXMXjXNXNXkXNXjXNXkXMXjXMXBXNXkXMXjXuX*X'.`.`.^.0.Z 6 6 $ o o o . UXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUX= C Z 5.U.Y.Y._.1XaXl _ #X+X@X@X@X@X@X@X@X+X@X#X@X[.@X@X@X@X@X@X#X@X@X@X@X+X@X@X@X@X@X@X@X@X@X@X@X@X[.5X@X#X@X@X@X@X@X3X@X@X@X3X3X%X@X5X%X@X3X3X5X@X3X3X3X%X3X3X5X5X3X3X5X5XcXSX-X'._.`.t.| 0 5 % O o o o . UXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXo e C S 8.Y.Y.'.1XaXK a v k a a h a a a a a h b k f f f a a f f f k h a f f f k h u f f k f h a b b b b h f a f k f f f f f a f f f f f f f f f f f f g f f f g f f f g f f Z.GX:X{._.W.-.m 5 * O o o o . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUX+ m C ..r.Y._.,XCXqX7X7X7X8X7X7X7X0X7X0X0X0X%X7X7X7X7X7X7X7X7X8X8X7X7X7X8X6X8X7X7X6X8X7X8X9X7XwXwX6XdX8X8X8X8X0X8X8X8X0X0X8X0X8X0X8X8X8X8X8X8X0X0X8X8X0X8X8X8X8X0XwX8X8XwXnXSX:X{.W.=.M 7 5 @ o o o . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUX & N C +.G._.&X;XuXuXiXfXiXfX1XfXfXfX1XpX1X1XhXhXhXhXfXfXfXgXjXfXfXgXjXgXjXgXgXgXgXgXgXgXgXgXgXkXgXgXkXkXkXjXzXkXkXkXzXkXkXkXkXkXkXkXkXkXzXzXzXzXzXzXzXzXzXzXzXZXZXZXVXAXZXfXoX^.2.V 6 5 # o o o . X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXX = N C $.L._.'.'.{.{.'.{.'.'.{.'.'.).&X&X'.'.'.'.}.{.{.'.{.{.{.{.{.{.{.{.{.{.}.{.XXXXXXXXXXXXXXXXXX{.|.{.|.XX{.|.}.XX}.}.XXoXXXoXXXXXXXoXXXoXoXoXoXoXoX=XoXoXoXoX*X*X*X*XoX'.9.} 6 5 % O o o o . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX+ 8 N N $.L.Y.T.T.Y.Y.T.T.!.!.!.!.T.T.T.).).Q.T.Q.Y.Q.!.!.!.~.!.~.!.!.!.^.~.^.^.!.!.!.!.!.!.!.~.!./.~.~.!.!./.(./.^.~.^.~.~.^./././.~././.(.(./.(.'.(.(.`.{.'.`.'.'.'.'.`.q.| 0 7 * O o o o . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo 8 N C $.I.Y.P.Y.P.Y.P.Y.!.Y.P.P.P.Q.P.P.Q.P.Y.Y.Y.P.Y.P.P.Q.P.W.!.!.Y.P.W.!.!.!.!.!.W.W.W.!.W.!.!.!.!.!.!.!.!.!.Q.~.!.!.W.!.!.~.!.~.~.~./.~.~.~.~.~./././.~./.^./.~.9.| 0 7 * O o o o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX + w M C &.L.Y.Y.P.Y.P.P.P.Y.W.Q.P.T.P.Q.P.P.T.Q.P.P.W.P.W.W.W.W.!.W.!.W.!.W.W.W.W.W.W.W.W.W.W.!.W.!.!.!.Q.!.!.Q.Q.Q.~.!.!.!.Q.!.Q.~.~./.~.Q.~.~.~.~.~.Q./.~././.~.q.} 0 5 = O o o o . X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX + w N C #.G.P.Y.P.Y.Y.P.P.P.P.Q.P.Q.P.P.P.Q.W.P.W.W.Q.P.P.W.W.W.P.P.W.W.W.P.W.W.W.W.W.W.W.W.W.W.Q.W.W.W.W.!.W.Q.Q.W.Q.Q.Q.Q.!.Q.~.!.Q.Q.~.Q.~.~.~.~.~./.~./.W.0.| 0 6 7 @ o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX + 0 m C o.r.Y.P.P.P.P.P.Y.P.P.P.P.Q.P.P.P.P.P.P.P.L.W.P.!.W.W.W.!.W.!.W.W.W.W.W.W.W.W.W.W.W.W.W.W.Q.W.W.W.W.Q.Q.W.Q.~.Q.!./.Q.!.Q.Q.~.~.~.Q.~.~.~.~.~./.L.=.Z w 5 * @ o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. + 6 m N D 6.Y.P.P.Q.Y.Y.T.P.P.P.Q.P.Q.P.W.P.P.W.W.P.!.P.P.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.Q.Q.Q.Q.~.Q.Q.~.~.W.!.Q.~.~.Q.Q.Q.~.~.~.Q.~.~.H.%.V 6 5 * O o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX + 9 e N S 5.L.Y.Y.P.Y.P.Y.P.Q.P.P.P.P.W.P.P.P.Y.Q.Q.P.P.W.W.W.W.P.Q.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.Q.Q.Q.Q.~.Q.~.Q.W.Q.Q.Q./.W.~.Q./.!.~.~.~.Q.u.o.M 6 5 = O o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX o = e m C $.t.Y.Q.P.Y.P.P.P.P.P.P.P.Y.Y.P.Q.W.P.P.P.W.W.P.W.W.W.P.W.P.W.L.W.W.W.W.W.W.W.W.W.W.W.W.Q.!.Q.Q.!.Q.Q.Q.~.!.!.W./.!.!.!.Q.!.~.~.W.0.} q 5 5 % o o o o o X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX . $ e m N D 4.L.Y.P.Y.P.P.P.P.T.Q.P.P.P.Q.P.W.P.P.W.L.W.!.Q.P.P.W.W.W.W.W.!.W.W.W.W.W.W.W.W.W.W.!.Q.Q.Q.Q.~.!.~.~././.W.!.!.~.!./.~.!.t.%.C 0 7 5 # o o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX X + 9 e e S $.e.P.P.Q.Y.Q.P.P.P.Q.P.P.W.L.W.Q.P.W.W.W.P.P.W.Q.W.W.W.W.W.W.W.W.W.W.W.Q.W.W.Q.!.Q.Q.Q.Q.~.W.!.!.!.Q.Q./.W.~.!.~.!.H.0.| m 6 6 * O o o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX . o & e e N S 5.L.Y.P.Y.P.Y.P.P.P.P.P.P.Y.Q.P.P.W.P.!.W.W.P.Q.W.W.W.W.W.W.W.P.W.P.P.Q.W.W.!.!.Q.Q.P.!.Y.Q.Y.Q.!.!.~.Q.~.!.W.9.o.M 0 5 6 % o o o . . . X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. . $ 9 e e N D 5.L.P.Q.Y.Y.P.Y.P.P.P.Y.P.Q.W.W.P.P.P.Q.Q.P.P.W.W.W.W.W.W.!.P.W.Y.W.W.W.W.!.Q.Q.Q.Q.Q.Q.~.~.!.!.!.~.W.q.-.} q 5 5 = @ o o o o . . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX . o & 8 e N N ..5.y.P.Y.Y.Q.Q.P.P.P.Y.Y.P.P.Y.!.P.Y.Q.Q.W.P.W.W.W.W.W.W.W.W.P.W.W.W.W.!.Y.Q.Y.~.Q.!.!.~.^.!.W.q.-.Z n 6 6 5 # O o o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX X + + = w e e N D *.e.L.P.P.Q.P.W.Y.P.W.P.P.Q.W.P.P.P.P.W.W.W.W.W.W.P.W.W.!.!.P.!.!.!.Q.Q.Q.!.!.!.Q.P.H.3.o.V q 6 7 7 # O o o . o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. . . O = 8 e e m C +.3.y.L.P.W.P.P.P.P.P.P.P.P.P.P.Y.!.W.W.P.W.W.W.P.Y.Y.Q.Q.P.!.!.!.!.!.Q.W.H.9.=. .B 0 5 5 5 % O o o o o . . X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX . X o + & 6 0 e e N S #.3.e.L.L.P.Y.Y.P.!.!.P.!.!.P.W.Y.W.W.W.W.W.P.Y.P.W.W.Y.!.P.L.t.9.&.| V m 0 7 6 7 # + o o o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX . . . o $ = w w 0 e m C X.&.3.e.t.J.P.P.W.W.Y.W.!.!.!.!.W.!.Q.Y.P.P.J.H.e.9.;.o.| M q 6 5 5 5 * @ O o o o o . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX . . . o O & = 8 w 0 0 m m N A X.#.*.2.0.6.q.e.e.q.u.w.q.4.4.=.%.o. .C M e 0 6 5 6 7 5 # O O o . o . . . . X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX . . . . o @ # = 5 6 0 6 6 0 0 e m m M N M V V M V M M m e 0 0 6 6 6 5 5 5 % @ O o o . o o o . . . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX . . . . . o o @ # % = 6 5 6 6 8 6 6 6 6 6 6 6 5 6 6 6 5 5 7 * # # @ o . o o o o . . . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX . . . . . o . o O O @ # # % % & % # % # # $ # $ O o o o . . o o o o . . . . . X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX . o . . o . . . o . . o o o . o o . o o . o o o o . . . . . . X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. X . . . . o . . . . o o o . . . . . o . . . . . . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX . X . . . . . . . . . . . X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", +"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX" +}; diff --git a/xdm/buttons b/xdm/buttons new file mode 100755 index 0000000..c50acf7 --- /dev/null +++ b/xdm/buttons @@ -0,0 +1,15 @@ +#!/bin/sh + +if which xmessage >> /dev/null 2>&1; then + xmessage -buttons reboot,halt "$@" ""; + + case "$?" in + 101) + /sbin/reboot + ;; + 102) + /sbin/poweroff + ;; + esac +fi + diff --git a/xdm/slackware_traditional.svg b/xdm/slackware_traditional.svg new file mode 100644 index 0000000..52bfb55 --- /dev/null +++ b/xdm/slackware_traditional.svg @@ -0,0 +1,109 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" + "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> +<svg version="1.0" xmlns="http://www.w3.org/2000/svg" + width="468pt" height="99pt" viewBox="0 0 468 99" + preserveAspectRatio="xMidYMid meet"> +<metadata> +Created by potrace 1.7, written by Peter Selinger 2001-2005 +</metadata> +<g transform="translate(0,99) scale(0.040696,-0.040696)" +fill="#5569B9" stroke="none"> +<path d="M1636 2374 c-36 -35 -32 -105 7 -126 13 -7 80 -13 160 -16 l137 -5 0 +-523 0 -524 -150 0 c-172 0 -214 -10 -222 -55 -8 -41 5 -78 33 -93 18 -9 125 +-11 452 -10 411 3 429 4 443 22 24 34 18 91 -12 115 -25 19 -40 21 -200 21 +l-174 0 0 589 c0 523 -2 591 -16 605 -23 24 -435 24 -458 0z"/> +<path d="M5082 2374 c-17 -12 -22 -25 -22 -59 0 -56 20 -71 113 -80 l67 -7 0 +-523 0 -522 -72 -6 c-58 -5 -77 -11 -90 -28 -26 -31 -23 -75 7 -104 23 -24 30 +-25 145 -25 67 0 130 5 140 10 30 16 40 74 40 240 l0 156 44 36 43 37 147 +-161 146 -160 -33 -22 c-37 -25 -48 -77 -23 -111 13 -19 28 -20 203 -23 180 +-3 190 -2 216 18 21 16 27 30 27 58 0 20 -4 42 -8 49 -12 19 -60 33 -115 33 +l-52 1 -190 206 c-104 114 -190 210 -190 213 0 9 141 130 200 171 59 42 91 55 +164 69 79 15 101 32 101 80 0 66 -14 70 -232 70 -175 0 -189 -1 -208 -20 -27 +-27 -25 -66 6 -97 31 -31 42 -17 -126 -157 l-115 -96 -5 375 c-4 319 -7 377 +-20 385 -8 5 -76 10 -150 10 -107 0 -140 -3 -158 -16z"/> +<path d="M775 2009 c-170 -25 -272 -104 -295 -229 -18 -97 8 -187 72 -246 73 +-69 157 -93 368 -104 186 -9 241 -24 265 -71 38 -72 5 -146 -82 -186 -48 -22 +-71 -26 -143 -26 -157 1 -265 51 -328 153 -41 66 -74 86 -115 71 -43 -17 -49 +-41 -45 -191 3 -119 6 -141 22 -159 25 -27 74 -27 128 0 40 20 42 20 122 4 44 +-10 133 -20 196 -22 215 -10 351 50 415 182 38 77 38 184 0 261 -53 107 -155 +147 -418 164 -219 14 -258 26 -282 84 -30 72 19 142 123 172 47 14 68 15 134 +6 98 -14 146 -39 228 -117 80 -77 100 -88 134 -75 39 14 46 40 46 167 0 139 +-10 163 -66 163 -19 0 -49 -7 -66 -16 -20 -11 -44 -14 -67 -11 -20 4 -79 13 +-131 21 -105 17 -127 18 -215 5z"/> +<path d="M3070 2010 c-143 -13 -252 -54 -287 -106 -19 -30 -11 -84 18 -110 29 +-26 71 -21 179 22 82 32 106 37 180 38 75 0 91 -3 131 -26 52 -31 84 -82 93 +-151 5 -43 4 -48 -12 -43 -98 29 -287 34 -395 11 -230 -48 -342 -191 -307 +-389 16 -91 63 -161 136 -205 147 -88 392 -61 545 60 20 16 39 29 42 29 3 0 8 +-18 12 -40 11 -66 39 -80 161 -80 121 0 148 8 162 49 25 70 -17 109 -120 110 +l-47 1 -3 293 c-3 275 -4 295 -26 347 -42 106 -132 171 -262 190 -71 10 -88 +10 -200 0z m170 -499 c36 -5 84 -14 108 -20 l42 -12 0 -62 c0 -99 -44 -151 +-174 -209 -52 -23 -87 -31 -154 -34 -79 -5 -91 -3 -132 19 -109 59 -122 180 +-28 250 58 42 123 61 263 75 6 1 39 -2 75 -7z"/> +<path d="M4355 2013 c-209 -20 -390 -174 -439 -374 -69 -280 83 -545 356 -623 +63 -18 179 -20 279 -6 140 20 317 120 350 198 24 56 24 73 -1 100 -35 37 -78 +29 -167 -31 -103 -71 -130 -84 -209 -103 -148 -34 -300 24 -376 143 -74 117 +-71 277 7 383 46 62 129 117 198 131 169 33 277 -11 373 -151 54 -80 85 -98 +138 -80 51 16 60 53 54 217 -7 163 -16 183 -83 183 -44 0 -76 -19 -87 -50 -3 +-10 -25 -5 -86 18 -78 31 -189 53 -242 50 -14 -1 -43 -3 -65 -5z"/> +<path d="M8120 2010 c-81 -7 -188 -33 -231 -56 -79 -40 -92 -141 -22 -173 29 +-13 51 -9 168 37 77 30 102 35 175 36 72 0 92 -4 128 -24 51 -29 87 -87 94 +-153 5 -41 3 -47 -11 -43 -114 34 -341 32 -455 -4 -193 -61 -279 -194 -246 +-380 15 -86 62 -155 134 -198 149 -89 393 -63 547 59 20 16 39 29 42 29 2 0 7 +-18 11 -39 10 -67 39 -81 163 -81 99 0 138 9 155 34 10 15 10 78 0 94 -11 17 +-67 32 -119 32 l-43 0 0 260 c0 263 -6 327 -40 405 -38 86 -131 148 -247 165 +-74 10 -90 10 -203 0z m170 -499 c36 -5 84 -14 108 -20 l42 -12 0 -55 c0 -73 +-19 -114 -71 -156 -73 -57 -157 -89 -257 -95 -79 -4 -91 -3 -132 19 -108 59 +-122 182 -28 251 58 42 123 61 263 75 6 1 39 -2 75 -7z"/> +<path d="M9722 2010 c-112 -17 -194 -62 -304 -169 l-58 -55 0 90 c0 57 -4 94 +-12 102 -8 8 -60 12 -168 12 -185 0 -200 -6 -200 -75 0 -63 21 -75 132 -75 +l88 0 0 -329 0 -329 -114 -4 c-134 -4 -156 -15 -156 -79 0 -29 6 -42 26 -58 +26 -20 37 -21 404 -21 356 0 379 1 401 19 18 14 24 29 24 60 0 73 -8 76 -230 +79 l-195 3 0 206 0 206 52 56 c160 170 284 218 412 158 75 -35 115 -35 150 -1 +57 57 27 152 -59 188 -43 18 -130 25 -193 16z"/> +<path d="M10565 2014 c-11 -2 -45 -9 -75 -15 -123 -25 -272 -134 -325 -239 +-56 -111 -75 -276 -45 -400 51 -216 244 -360 482 -360 130 0 237 18 363 62 +142 50 195 89 195 144 0 44 -30 74 -74 74 -18 0 -66 -14 -107 -31 -121 -51 +-180 -70 -255 -83 -201 -37 -378 58 -413 222 -6 29 -11 57 -11 62 0 6 154 10 +399 10 226 0 410 4 424 9 32 12 41 40 39 116 -7 246 -239 439 -522 434 -30 -1 +-64 -3 -75 -5z m155 -159 c98 -15 201 -105 228 -201 7 -23 12 -44 12 -48 0 -3 +-148 -6 -329 -6 l-330 0 22 54 c27 64 91 137 150 168 42 22 159 49 187 43 8 +-2 35 -7 60 -10z"/> +<path d="M6290 1970 c-26 -26 -27 -90 -2 -113 10 -10 30 -17 45 -17 30 0 14 +44 177 -480 96 -305 108 -337 135 -360 24 -20 104 -16 126 7 12 11 44 111 86 +265 37 136 70 244 72 242 3 -3 36 -109 72 -236 37 -127 76 -243 87 -257 10 +-14 30 -28 45 -32 37 -10 94 8 111 34 8 12 67 201 132 420 118 395 119 397 +146 397 39 0 58 24 58 75 0 73 -5 75 -213 75 -215 0 -227 -4 -227 -74 0 -58 +17 -70 110 -76 l77 -5 -80 -293 c-44 -161 -83 -289 -87 -285 -4 5 -35 102 -69 +217 -34 114 -69 219 -78 232 -30 47 -121 49 -154 4 -11 -14 -46 -119 -80 -235 +-34 -115 -64 -213 -68 -217 -5 -6 -171 550 -171 575 0 4 34 7 75 7 91 0 115 +17 115 79 0 67 -14 71 -232 71 -175 0 -189 -1 -208 -20z"/> +<path d="M0 790 l0 -410 3255 0 3255 0 0 35 0 35 -3220 0 -3220 0 0 375 0 375 +-35 0 -35 0 0 -410z"/> +<path d="M6642 648 c-33 -33 -4 -68 55 -68 l43 0 0 -155 0 -155 -54 0 c-30 0 +-61 -3 -70 -6 -19 -7 -21 -45 -4 -62 14 -14 305 -17 326 -3 8 5 12 21 10 37 +-3 28 -5 29 -65 32 l-63 3 0 194 0 195 -83 0 c-51 0 -88 -5 -95 -12z"/> +<path d="M7690 620 l0 -40 45 0 45 0 0 40 0 40 -45 0 -45 0 0 -40z"/> +<path d="M8703 509 c-28 -18 -33 -19 -33 -5 0 12 -10 16 -44 16 -24 0 -51 -3 +-60 -6 -24 -9 -20 -55 4 -61 18 -5 20 -14 20 -92 0 -80 -2 -87 -22 -96 -27 +-12 -35 -40 -18 -60 9 -11 33 -15 80 -15 47 0 71 4 80 15 17 20 9 48 -18 60 +-20 9 -22 17 -22 77 0 65 1 67 34 87 18 12 47 21 64 21 49 0 62 -21 62 -103 0 +-65 -2 -73 -22 -82 -27 -12 -35 -40 -18 -60 15 -19 130 -21 148 -3 18 18 14 +46 -8 60 -17 11 -20 24 -20 99 0 72 -3 91 -21 113 -45 57 -127 73 -186 35z"/> +<path d="M7622 508 c-33 -33 -4 -68 55 -68 l43 0 0 -85 0 -85 -54 0 c-30 0 +-61 -3 -70 -6 -19 -7 -21 -45 -4 -62 14 -14 305 -17 326 -3 8 5 12 21 10 37 +-3 28 -5 29 -65 32 l-63 3 0 124 0 125 -83 0 c-51 0 -88 -5 -95 -12z"/> +<path d="M9522 508 c-7 -7 -12 -20 -12 -30 0 -19 35 -42 50 -33 6 4 10 -27 10 +-82 0 -100 10 -127 59 -160 43 -29 104 -30 149 -3 26 16 32 17 32 5 0 -19 90 +-21 108 -3 18 18 14 46 -8 58 -18 10 -20 21 -20 135 l0 125 -69 0 c-50 0 -72 +-4 -82 -16 -19 -23 1 -48 40 -52 l31 -3 0 -69 c0 -64 -2 -70 -31 -94 -35 -30 +-89 -35 -113 -10 -13 12 -16 39 -16 130 l0 114 -58 0 c-32 0 -63 -5 -70 -12z"/> +<path d="M10532 508 c-19 -19 -14 -48 11 -58 12 -5 42 -26 67 -48 l45 -40 -49 +-43 c-27 -24 -59 -50 -72 -57 -28 -15 -33 -57 -8 -66 32 -12 141 -6 154 9 13 +16 5 55 -13 55 -7 1 1 12 17 25 l30 24 29 -21 c25 -18 27 -22 13 -30 -9 -5 +-16 -17 -16 -27 0 -33 24 -42 102 -39 71 3 73 4 76 30 2 20 -3 30 -20 39 -13 +6 -47 32 -76 56 l-52 45 52 44 c29 24 58 44 65 44 18 0 26 39 12 56 -18 22 +-138 16 -153 -8 -8 -13 -8 -23 0 -35 9 -14 6 -21 -10 -34 -18 -15 -23 -15 -43 +-2 -19 12 -20 18 -11 38 18 40 -4 55 -76 55 -35 0 -67 -5 -74 -12z"/> +</g> +</svg> diff --git a/xdm/slackware_traditional_black.svg b/xdm/slackware_traditional_black.svg new file mode 100644 index 0000000..6a1a8a7 --- /dev/null +++ b/xdm/slackware_traditional_black.svg @@ -0,0 +1,109 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" + "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> +<svg version="1.0" xmlns="http://www.w3.org/2000/svg" + width="468pt" height="99pt" viewBox="0 0 468 99" + preserveAspectRatio="xMidYMid meet"> +<metadata> +Created by potrace 1.7, written by Peter Selinger 2001-2005 +</metadata> +<g transform="translate(0,99) scale(0.040696,-0.040696)" +fill="#000000" stroke="none"> +<path d="M1636 2374 c-36 -35 -32 -105 7 -126 13 -7 80 -13 160 -16 l137 -5 0 +-523 0 -524 -150 0 c-172 0 -214 -10 -222 -55 -8 -41 5 -78 33 -93 18 -9 125 +-11 452 -10 411 3 429 4 443 22 24 34 18 91 -12 115 -25 19 -40 21 -200 21 +l-174 0 0 589 c0 523 -2 591 -16 605 -23 24 -435 24 -458 0z"/> +<path d="M5082 2374 c-17 -12 -22 -25 -22 -59 0 -56 20 -71 113 -80 l67 -7 0 +-523 0 -522 -72 -6 c-58 -5 -77 -11 -90 -28 -26 -31 -23 -75 7 -104 23 -24 30 +-25 145 -25 67 0 130 5 140 10 30 16 40 74 40 240 l0 156 44 36 43 37 147 +-161 146 -160 -33 -22 c-37 -25 -48 -77 -23 -111 13 -19 28 -20 203 -23 180 +-3 190 -2 216 18 21 16 27 30 27 58 0 20 -4 42 -8 49 -12 19 -60 33 -115 33 +l-52 1 -190 206 c-104 114 -190 210 -190 213 0 9 141 130 200 171 59 42 91 55 +164 69 79 15 101 32 101 80 0 66 -14 70 -232 70 -175 0 -189 -1 -208 -20 -27 +-27 -25 -66 6 -97 31 -31 42 -17 -126 -157 l-115 -96 -5 375 c-4 319 -7 377 +-20 385 -8 5 -76 10 -150 10 -107 0 -140 -3 -158 -16z"/> +<path d="M775 2009 c-170 -25 -272 -104 -295 -229 -18 -97 8 -187 72 -246 73 +-69 157 -93 368 -104 186 -9 241 -24 265 -71 38 -72 5 -146 -82 -186 -48 -22 +-71 -26 -143 -26 -157 1 -265 51 -328 153 -41 66 -74 86 -115 71 -43 -17 -49 +-41 -45 -191 3 -119 6 -141 22 -159 25 -27 74 -27 128 0 40 20 42 20 122 4 44 +-10 133 -20 196 -22 215 -10 351 50 415 182 38 77 38 184 0 261 -53 107 -155 +147 -418 164 -219 14 -258 26 -282 84 -30 72 19 142 123 172 47 14 68 15 134 +6 98 -14 146 -39 228 -117 80 -77 100 -88 134 -75 39 14 46 40 46 167 0 139 +-10 163 -66 163 -19 0 -49 -7 -66 -16 -20 -11 -44 -14 -67 -11 -20 4 -79 13 +-131 21 -105 17 -127 18 -215 5z"/> +<path d="M3070 2010 c-143 -13 -252 -54 -287 -106 -19 -30 -11 -84 18 -110 29 +-26 71 -21 179 22 82 32 106 37 180 38 75 0 91 -3 131 -26 52 -31 84 -82 93 +-151 5 -43 4 -48 -12 -43 -98 29 -287 34 -395 11 -230 -48 -342 -191 -307 +-389 16 -91 63 -161 136 -205 147 -88 392 -61 545 60 20 16 39 29 42 29 3 0 8 +-18 12 -40 11 -66 39 -80 161 -80 121 0 148 8 162 49 25 70 -17 109 -120 110 +l-47 1 -3 293 c-3 275 -4 295 -26 347 -42 106 -132 171 -262 190 -71 10 -88 +10 -200 0z m170 -499 c36 -5 84 -14 108 -20 l42 -12 0 -62 c0 -99 -44 -151 +-174 -209 -52 -23 -87 -31 -154 -34 -79 -5 -91 -3 -132 19 -109 59 -122 180 +-28 250 58 42 123 61 263 75 6 1 39 -2 75 -7z"/> +<path d="M4355 2013 c-209 -20 -390 -174 -439 -374 -69 -280 83 -545 356 -623 +63 -18 179 -20 279 -6 140 20 317 120 350 198 24 56 24 73 -1 100 -35 37 -78 +29 -167 -31 -103 -71 -130 -84 -209 -103 -148 -34 -300 24 -376 143 -74 117 +-71 277 7 383 46 62 129 117 198 131 169 33 277 -11 373 -151 54 -80 85 -98 +138 -80 51 16 60 53 54 217 -7 163 -16 183 -83 183 -44 0 -76 -19 -87 -50 -3 +-10 -25 -5 -86 18 -78 31 -189 53 -242 50 -14 -1 -43 -3 -65 -5z"/> +<path d="M8120 2010 c-81 -7 -188 -33 -231 -56 -79 -40 -92 -141 -22 -173 29 +-13 51 -9 168 37 77 30 102 35 175 36 72 0 92 -4 128 -24 51 -29 87 -87 94 +-153 5 -41 3 -47 -11 -43 -114 34 -341 32 -455 -4 -193 -61 -279 -194 -246 +-380 15 -86 62 -155 134 -198 149 -89 393 -63 547 59 20 16 39 29 42 29 2 0 7 +-18 11 -39 10 -67 39 -81 163 -81 99 0 138 9 155 34 10 15 10 78 0 94 -11 17 +-67 32 -119 32 l-43 0 0 260 c0 263 -6 327 -40 405 -38 86 -131 148 -247 165 +-74 10 -90 10 -203 0z m170 -499 c36 -5 84 -14 108 -20 l42 -12 0 -55 c0 -73 +-19 -114 -71 -156 -73 -57 -157 -89 -257 -95 -79 -4 -91 -3 -132 19 -108 59 +-122 182 -28 251 58 42 123 61 263 75 6 1 39 -2 75 -7z"/> +<path d="M9722 2010 c-112 -17 -194 -62 -304 -169 l-58 -55 0 90 c0 57 -4 94 +-12 102 -8 8 -60 12 -168 12 -185 0 -200 -6 -200 -75 0 -63 21 -75 132 -75 +l88 0 0 -329 0 -329 -114 -4 c-134 -4 -156 -15 -156 -79 0 -29 6 -42 26 -58 +26 -20 37 -21 404 -21 356 0 379 1 401 19 18 14 24 29 24 60 0 73 -8 76 -230 +79 l-195 3 0 206 0 206 52 56 c160 170 284 218 412 158 75 -35 115 -35 150 -1 +57 57 27 152 -59 188 -43 18 -130 25 -193 16z"/> +<path d="M10565 2014 c-11 -2 -45 -9 -75 -15 -123 -25 -272 -134 -325 -239 +-56 -111 -75 -276 -45 -400 51 -216 244 -360 482 -360 130 0 237 18 363 62 +142 50 195 89 195 144 0 44 -30 74 -74 74 -18 0 -66 -14 -107 -31 -121 -51 +-180 -70 -255 -83 -201 -37 -378 58 -413 222 -6 29 -11 57 -11 62 0 6 154 10 +399 10 226 0 410 4 424 9 32 12 41 40 39 116 -7 246 -239 439 -522 434 -30 -1 +-64 -3 -75 -5z m155 -159 c98 -15 201 -105 228 -201 7 -23 12 -44 12 -48 0 -3 +-148 -6 -329 -6 l-330 0 22 54 c27 64 91 137 150 168 42 22 159 49 187 43 8 +-2 35 -7 60 -10z"/> +<path d="M6290 1970 c-26 -26 -27 -90 -2 -113 10 -10 30 -17 45 -17 30 0 14 +44 177 -480 96 -305 108 -337 135 -360 24 -20 104 -16 126 7 12 11 44 111 86 +265 37 136 70 244 72 242 3 -3 36 -109 72 -236 37 -127 76 -243 87 -257 10 +-14 30 -28 45 -32 37 -10 94 8 111 34 8 12 67 201 132 420 118 395 119 397 +146 397 39 0 58 24 58 75 0 73 -5 75 -213 75 -215 0 -227 -4 -227 -74 0 -58 +17 -70 110 -76 l77 -5 -80 -293 c-44 -161 -83 -289 -87 -285 -4 5 -35 102 -69 +217 -34 114 -69 219 -78 232 -30 47 -121 49 -154 4 -11 -14 -46 -119 -80 -235 +-34 -115 -64 -213 -68 -217 -5 -6 -171 550 -171 575 0 4 34 7 75 7 91 0 115 +17 115 79 0 67 -14 71 -232 71 -175 0 -189 -1 -208 -20z"/> +<path d="M0 790 l0 -410 3255 0 3255 0 0 35 0 35 -3220 0 -3220 0 0 375 0 375 +-35 0 -35 0 0 -410z"/> +<path d="M6642 648 c-33 -33 -4 -68 55 -68 l43 0 0 -155 0 -155 -54 0 c-30 0 +-61 -3 -70 -6 -19 -7 -21 -45 -4 -62 14 -14 305 -17 326 -3 8 5 12 21 10 37 +-3 28 -5 29 -65 32 l-63 3 0 194 0 195 -83 0 c-51 0 -88 -5 -95 -12z"/> +<path d="M7690 620 l0 -40 45 0 45 0 0 40 0 40 -45 0 -45 0 0 -40z"/> +<path d="M8703 509 c-28 -18 -33 -19 -33 -5 0 12 -10 16 -44 16 -24 0 -51 -3 +-60 -6 -24 -9 -20 -55 4 -61 18 -5 20 -14 20 -92 0 -80 -2 -87 -22 -96 -27 +-12 -35 -40 -18 -60 9 -11 33 -15 80 -15 47 0 71 4 80 15 17 20 9 48 -18 60 +-20 9 -22 17 -22 77 0 65 1 67 34 87 18 12 47 21 64 21 49 0 62 -21 62 -103 0 +-65 -2 -73 -22 -82 -27 -12 -35 -40 -18 -60 15 -19 130 -21 148 -3 18 18 14 +46 -8 60 -17 11 -20 24 -20 99 0 72 -3 91 -21 113 -45 57 -127 73 -186 35z"/> +<path d="M7622 508 c-33 -33 -4 -68 55 -68 l43 0 0 -85 0 -85 -54 0 c-30 0 +-61 -3 -70 -6 -19 -7 -21 -45 -4 -62 14 -14 305 -17 326 -3 8 5 12 21 10 37 +-3 28 -5 29 -65 32 l-63 3 0 124 0 125 -83 0 c-51 0 -88 -5 -95 -12z"/> +<path d="M9522 508 c-7 -7 -12 -20 -12 -30 0 -19 35 -42 50 -33 6 4 10 -27 10 +-82 0 -100 10 -127 59 -160 43 -29 104 -30 149 -3 26 16 32 17 32 5 0 -19 90 +-21 108 -3 18 18 14 46 -8 58 -18 10 -20 21 -20 135 l0 125 -69 0 c-50 0 -72 +-4 -82 -16 -19 -23 1 -48 40 -52 l31 -3 0 -69 c0 -64 -2 -70 -31 -94 -35 -30 +-89 -35 -113 -10 -13 12 -16 39 -16 130 l0 114 -58 0 c-32 0 -63 -5 -70 -12z"/> +<path d="M10532 508 c-19 -19 -14 -48 11 -58 12 -5 42 -26 67 -48 l45 -40 -49 +-43 c-27 -24 -59 -50 -72 -57 -28 -15 -33 -57 -8 -66 32 -12 141 -6 154 9 13 +16 5 55 -13 55 -7 1 1 12 17 25 l30 24 29 -21 c25 -18 27 -22 13 -30 -9 -5 +-16 -17 -16 -27 0 -33 24 -42 102 -39 71 3 73 4 76 30 2 20 -3 30 -20 39 -13 +6 -47 32 -76 56 l-52 45 52 44 c29 24 58 44 65 44 18 0 26 39 12 56 -18 22 +-138 16 -153 -8 -8 -13 -8 -23 0 -35 9 -14 6 -21 -10 -34 -18 -15 -23 -15 -43 +-2 -19 12 -20 18 -11 38 18 40 -4 55 -76 55 -35 0 -67 -5 -74 -12z"/> +</g> +</svg> diff --git a/xdm/xdm-config b/xdm/xdm-config new file mode 100644 index 0000000..5ab90f2 --- /dev/null +++ b/xdm/xdm-config @@ -0,0 +1,28 @@ +DisplayManager.authDir: /var/lib/xdm +DisplayManager.errorLogFile: /var/log/xdm.log +DisplayManager.pidFile: /var/run/xdm.pid +DisplayManager.keyFile: /usr/lib64/X11/xdm/xdm-keys +DisplayManager.servers: /usr/lib64/X11/xdm/Xservers +DisplayManager.accessFile: /usr/lib64/X11/xdm/Xaccess +DisplayManager*resources: /etc/X11/xdm/liveslak-xdm/Xresources +DisplayManager.willing: su nobody -c /usr/lib64/X11/xdm/Xwilling +! All displays should use authorization, but we cannot be sure +! X terminals may not be configured that way, so they will require +! individual resource settings. +DisplayManager*authorize: true +! +DisplayManager*chooser: /usr/lib64/X11/xdm/chooser +DisplayManager*startup: /usr/lib64/X11/xdm/Xstartup +DisplayManager*session: /usr/lib64/X11/xdm/Xsession +DisplayManager*reset: /usr/lib64/X11/xdm/Xreset +DisplayManager*authComplain: true +! The following three resources set up display :0 as the console. +DisplayManager._0.setup: /etc/X11/xdm/liveslak-xdm/Xsetup +DisplayManager._0.startup: /etc/X11/xdm/liveslak-xdm/Xstartup +DisplayManager._0.reset: /usr/lib64/X11/xdm/TakeConsole + +DisplayManager*loginmoveInterval: 10 + +! SECURITY: do not listen for XDMCP or Chooser requests +! Comment out this line if you want to manage X terminals with xdm +DisplayManager.requestPort: 0 |