mirror of
git://git.2f30.org/morpheus.git
synced 2024-06-16 08:48:34 +00:00
102 lines
3.0 KiB
Bash
Executable File
102 lines
3.0 KiB
Bash
Executable File
#!/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; <copy 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"
|