#!/bin/sh set -e mirror="http://mirror.nl.leaseweb.net/slackware/" release="slackware64-current" # "slackware-current", "slackware64-current" url="$mirror/$release/slackware64" # "slackware", "slackware64" filelist="$url/FILE_LIST" pkgtools="pkgtools-14.1-noarch-2.tgz" pkgtoolsurl="$url/a/$pkgtools" root="/ns/$release" test x"$1" != x"" && root="$1" tmpdir="/tmp/slackware/$release" pkgdir="$tmpdir/pkgs" # a template file is just a plain-text file with a package per line. templateurl="http://git.2f30.org/templates/plain/minimal-server.template" templatefile="$tmpdir/template" tar113="$tmpdir/tar-1.13" tar113url="http://www.codemadness.nl/downloads/morpheus/slackware/tar-1.13.gz" tar113checksum="b121b4d03e5ac37fa601f3edf44a80ad1782316442a69372ec1ab33871369780150dffe2d9c67459cbe90ea3ee33a1ea566e57a7b5d63cab08655e2b5220858a tar-1.13" mkdir -p "$tmpdir" cd "$tmpdir" # get precompiled tar-1.13 required by installpkg (static i486 glibc binary). # NOTE: if you want to build tar-1.13 yourself, the source is available at: # http://mirror.nl.leaseweb.net/slackware/slackware-current/source/a/tar/tar-1.13.tar.gz # build instructions: # ./configure --disable-nls; make CC="gcc -static"; strip src/tar; . if ! test -f "$tar113"; then wget "${tar113url}" -O - | gunzip -c - > "${tar113}" printf '%s' "$tar113checksum" | sha512sum -c - fi # make sure this tar version is in $PATH and preferred. export PATH="${tmpdir}:$PATH" chmod "755" "$tar113" ln -sf "$tar113" "tar" # get template of packages to install. if ! test -f "$templatefile"; then wget "$templateurl" -O "$templatefile" fi # get pkgtools. installpkg="$tmpdir/sbin/installpkg" if ! test -f "$pkgtools"; then wget "${pkgtoolsurl}" -O "$tmpdir/$pkgtools" fi if ! test -f "$installpkg"; then tar -xzf "$tmpdir/$pkgtools" fi # get packages. mkdir -p "$pkgdir" cd "$pkgdir" wget "$filelist" -q -O - | grep -E -o '[^ ]*$' | grep -E '\.(txz|tgz|txt|asc)$' | while read -r line; do pset=$(dirname "$line" | sed 's@[^a-z]*@@g') pfilename=$(basename "$line") # strip version part of name for matching (this should be fine in most cases). pname=$(printf '%s' "${pfilename}" | sed -E 's@^([^-]*-?[a-z]*?)-.+@\1@g') pattern="^${pname}\$" if grep -qE "$pattern" "$templatefile"; then mkdir -p "$pset" if ! test -f "$pset/$pfilename"; then wget "$url/$line" -O "$pset/$pfilename" fi fi done # install package sets in order. mkdir -p "$root" cd "$pkgdir" for pset in *; do find "$pset" -name "*.t?z" | while read -r f; do "$installpkg" --terse --root "$root" "$f" done done # fix symlink references for libs. libdir="$root/lib64" if ! test -d "$libdir"; then libdir="$root/lib" fi cd "$libdir" for i in *; do if readlink "$i" | grep -qE '\.incoming$'; then r=$(basename "$(readlink "$i" | sed -E 's@\.incoming$@@')") if test -L "$i"; then ln -sf "$r" "$i" fi fi done # copy /etc/resolv.conf mkdir -p "${root}/etc" cp /etc/resolv.conf "${root}/etc/resolv.conf" chmod 644 "${root}/etc/resolv.conf"