Compare commits
No commits in common. 'master' and 'lxc' have entirely different histories.
25 changed files with 3757 additions and 1149 deletions
@ -1,95 +0,0 @@ |
|||
# List of tested packages using convert32pkg. |
|||
# This list is safe to use with massconvert32.sh and safe to install. |
|||
# Note that these are from slackware 14.2, including patches. -current is unsupported. |
|||
|
|||
# a |
|||
bzip2 |
|||
dbus |
|||
eudev |
|||
xz |
|||
|
|||
# ap |
|||
cups |
|||
mpg123 |
|||
|
|||
# d |
|||
libtool |
|||
llvm |
|||
|
|||
# l |
|||
alsa-lib |
|||
atk |
|||
cairo |
|||
elfutils |
|||
expat |
|||
freetype |
|||
gdk-pixbuf2 |
|||
glib2 |
|||
glibc |
|||
gmp |
|||
gst-plugins-base |
|||
gstreamer |
|||
gtk+2 |
|||
harfbuzz |
|||
icu4c |
|||
lcms2 |
|||
libexif |
|||
libffi |
|||
libgphoto2 |
|||
libidn |
|||
libieee1284 |
|||
libjpeg-turbo |
|||
libnl3 |
|||
libpcap |
|||
libpng |
|||
libtiff |
|||
libunistring |
|||
libusb |
|||
libxml2 |
|||
libxslt |
|||
ncurses |
|||
orc |
|||
pango |
|||
sdl |
|||
svgalib |
|||
v4l-utils |
|||
zlib |
|||
gamin |
|||
|
|||
# n |
|||
cyrus-sasl |
|||
gnutls |
|||
libgcrypt |
|||
libgpg-error |
|||
nettle |
|||
openldap-client |
|||
openssl |
|||
p11-kit |
|||
|
|||
# x |
|||
fontconfig |
|||
glu |
|||
libX11 |
|||
libXau |
|||
libXcomposite |
|||
libXcursor |
|||
libXdamage |
|||
libXdmcp |
|||
libXext |
|||
libXfixes |
|||
libXi |
|||
libXinerama |
|||
libXrandr |
|||
libXrender |
|||
libXv |
|||
libXvMC |
|||
libXxf86vm |
|||
libdrm |
|||
libpciaccess |
|||
libxcb |
|||
libxshmfence |
|||
mesa |
|||
pixman |
|||
|
|||
# xap |
|||
sane |
@ -1,144 +0,0 @@ |
|||
#!/bin/sh -e |
|||
|
|||
pkginfodir='/var/log/packages/' |
|||
pkgscriptdir='/var/log/scripts/' |
|||
|
|||
if [ "$#" -lt 1 ]; then |
|||
echo "Usage: $0 <package32> [package64]" 1>&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
pkg32="$(realpath "$1")" |
|||
unset pkg64 |
|||
[ "$2" ] && pkg64="$(realpath "$2")" |
|||
|
|||
# Extract all package info |
|||
# See /sbin/installpkg |
|||
pkgbase="$(echo "$pkg32" | sed -e 's?.*/??;s/\.t[bglx]z$//')" |
|||
pkgext="$(echo "$pkg32" | sed -e 's?.*/??;s/.*\.\(t[bglx]z\)$/\1/')" |
|||
pkgname="$(echo "$pkgbase" | sed -e 's?-[^-]*-[^-]*-[^-]*$??')" |
|||
pkgver="$(echo "$pkgbase" | sed -e 's?.*-\([^-]*\)-[^-]*-[^-]*$?\1?')" |
|||
pkgarch="$(echo "$pkgbase" | sed -e 's?.*-[^-]*-\([^-]*\)-[^-]*$?\1?')" |
|||
pkgbuild="$(echo "$pkgbase" | sed -e 's?.*-[^-]*-[^-]*-\([^-]*\)$?\1?')" |
|||
|
|||
case "$pkgarch" in |
|||
i?86) pkgarch=x86_64 ;; |
|||
*) |
|||
echo "Unsupported package architecture '$pkgarch'. Can't proceed." 1>&2 |
|||
exit 1 |
|||
;; |
|||
esac |
|||
|
|||
pkginfo="$pkginfodir/$pkgname-$pkgver-$pkgarch-$pkgbuild" |
|||
pkgscript="$pkgscriptdir/$pkgname-$pkgver-$pkgarch-$pkgbuild" |
|||
|
|||
case "$pkgext" in |
|||
tgz) tool=gzip ;; |
|||
tbz) tool=bzip2 ;; |
|||
tlz) tool=lzma ;; |
|||
txz) tool=xz ;; |
|||
esac |
|||
|
|||
temp="$(mktemp -d)" |
|||
trap "rm -rf '$temp'" EXIT |
|||
|
|||
cd "$temp" |
|||
explodepkg "$pkg32" |
|||
|
|||
# Remove all files present in the 64bit package |
|||
if [ "$pkg64" ]; then |
|||
echo |
|||
echo "Removing files:" |
|||
$tool -cd "$pkg64" | tar-1.13 t | grep -v '^install/' | while read -r file; do |
|||
echo "./$file" |
|||
rm -f "./$file" 2> /dev/null || true |
|||
done |
|||
else |
|||
if [ ! -f "$pkginfo" ]; then |
|||
echo "Package '$pkgname-$pkgver-$pkgarch-$pkgbuild' is not installed. Can't proceed." 1>&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
# See /sbin/removepkg |
|||
if fgrep './' "$pkginfo" 1> /dev/null 2>&1; then |
|||
TRIGGER='^\.\/' |
|||
else |
|||
TRIGGER='FILE LIST:' |
|||
fi |
|||
|
|||
echo |
|||
echo 'Removing files:' |
|||
sed -n "/$TRIGGER/,/^$/p" "$pkginfo" | fgrep -v 'FILE LIST:' | grep -v '^install/' | while read -r file; do |
|||
echo "./$file" |
|||
rm -f "./$file" 2> /dev/null || true |
|||
done |
|||
fi |
|||
|
|||
# Clean empty directories |
|||
echo |
|||
echo 'Empty directories:' |
|||
find . -type d -empty -print -delete |
|||
|
|||
# Remove all symlinks present in the 64bit package |
|||
if [ -f install/doinst.sh ]; then |
|||
if [ "$pkg64" ]; then |
|||
if ! $tool -cd "$pkg64" | tar-1.13 xO install/doinst.sh > install/doinst.64; then |
|||
echo "Failed to extract install/doinst.sh from '$pkg64'. Can't proceed." 1>&2 |
|||
exit 1 |
|||
fi |
|||
else |
|||
if [ ! -f "$pkgscript" ]; then |
|||
echo "Package '$pkgname-$pkgver-$pkgarch-$pkgbuild' is installed but has no installation script. Can't proceed." 1>&2 |
|||
exit 1 |
|||
fi |
|||
cp "$pkgscript" install/doinst.64 |
|||
fi |
|||
|
|||
# There's some packages that need special treatment |
|||
if [ "$pkgname" = 'glib2' -o "$pkgname" = 'cups' -o "$pkgname" = 'sane' ]; then |
|||
sed -i -e '/^for file in/,/^done/d' install/doinst.sh |
|||
fi |
|||
if [ "$pkgname" = 'cups' ]; then |
|||
sed -i -e '/^if \[ -e etc\/rc.d\/rc.cups \]; then/,/^fi/d' install/doinst.sh |
|||
fi |
|||
if [ "$pkgname" = 'eudev' ]; then |
|||
sed -i -e '/^if \[ \(-e etc\/rc.d\/rc.udev\|-r etc\/rc.d\/rc.udev.new\) \]; then/,/^fi/d' install/doinst.sh |
|||
fi |
|||
if [ "$pkgname" = 'dbus' ]; then |
|||
sed -i -e '/^if \[ \(-e etc\/rc.d\/rc.messagebus\|-r etc\/rc.d\/rc.messagebus.new\) \]; then/,/^fi/d' install/doinst.sh |
|||
fi |
|||
|
|||
# Extract all lines treating with symlinks or config files. See /sbin/removepkg |
|||
sed -n -e 's,^[ ]*( [ ]*cd[ ]* .* [ ]*; [ ]*\(rm\|ln\) [ ]*-\(rf\|sf\)[ ]* .* [ ]*)[ ]*$,&,p' \ |
|||
-e 's,^[ ]*config .*[ ]*$,&,p' install/doinst.64 > install/doinst |
|||
rm install/doinst.64 |
|||
|
|||
echo |
|||
echo 'Removed lines in doinst.sh:' |
|||
if [ -s install/doinst ]; then |
|||
fgrep -xf install/doinst install/doinst.sh || true |
|||
|
|||
# Remove all symlinks present in the 64bit package |
|||
fgrep -vxf install/doinst install/doinst.sh > install/doinst.sh.new || true |
|||
mv install/doinst.sh.new install/doinst.sh |
|||
|
|||
# If the resulting doinst.sh is empty, remove it. |
|||
if [ ! -s install/doinst.sh ]; then |
|||
rm install/doinst.sh |
|||
fi |
|||
fi |
|||
rm install/doinst |
|||
fi |
|||
|
|||
# Rename package in slack-desc |
|||
if [ -f install/slack-desc ]; then |
|||
sed -i -e '/^\$\|#\| *|/!s/^[^:]*:/convert32-&/' install/slack-desc |
|||
fi |
|||
|
|||
if ! find . | grep -v '^.$\|^./install' > /dev/null; then |
|||
echo |
|||
echo 'Package is empty. Not running makepkg.' 1>&2 |
|||
exit 0 |
|||
fi |
|||
|
|||
makepkg -l n -c n "$OLDPWD/convert32-$pkgname-$pkgver-$pkgarch-$pkgbuild.$pkgext" |
@ -1,229 +0,0 @@ |
|||
#!/bin/sh |
|||
set -e |
|||
|
|||
# This is a SlackBuild script for building as-original-as-possible kernel packages. |
|||
# It combines existing SlackBuilds and other files in the slackware source tree with vanilla SlackBuild conventions in a way that is clean and functional. |
|||
# Unlike the "official" method of building a Slackware kernel, it builds and installs everything in $TMP, so it doesn't taint the host system, and you can build it as a regular user under fakeroot, if you wanted to. |
|||
# This often means that the $PKG directory is used as an intermediate directory to run a SlackBuild in, and that said SlackBuilds may need to be modified to run properly in $PKG. |
|||
|
|||
# This script is tailored for x86_64. i?86 support is untested, and would need more modifications (such as building the -smp kernels and fixing $TMP in the packaging SlackBuilds). |
|||
# Other architectures can be added, provided the source tree for them is anywhere close to the original slackware tree. |
|||
|
|||
# This SlackBuild should be placed in the "source/k" directory of the source DVD. |
|||
# However, this directory doesn't contain all the files we need, as they're scattered all throughout the slackware tree. |
|||
|
|||
# This code may help prepare the source directory: |
|||
if [ "$1" = prepare ]; then |
|||
shift |
|||
|
|||
if [ $# -lt 3 ]; then |
|||
echo Usage: $0 prepare \<source\> \<install\> \<output\> 1>&2 |
|||
echo e.g. $0 prepare /mnt/tmp/slackware-14.2-source-dvd/source /mnt/tmp/slackware64-14.2-install-dvd/slackware64 ./kernel 1>&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
SOURCE=$1 |
|||
INSTALL=$2 |
|||
OUT=$3 |
|||
|
|||
# Copy the "source/k" directory |
|||
cp -aT $SOURCE/k $OUT |
|||
|
|||
# Copy the "source/d/kernel-headers" and "source/a/kernel-firmware" directories into it |
|||
cp -at $OUT $SOURCE/d/kernel-headers $SOURCE/a/kernel-firmware |
|||
|
|||
# Copy "slackware*/k/kernel-source-*-noarch-*.txt" to use as slack-desc for kernel-source into it |
|||
mkdir -p $OUT/kernel-source |
|||
cp -aT $INSTALL/k/kernel-source-*-noarch-*.txt $OUT/kernel-source/slack-desc |
|||
|
|||
# Copy the SlackBuild |
|||
cp -at $OUT $0 |
|||
|
|||
exit |
|||
fi |
|||
|
|||
PKGNAM=${PKGNAM:-linux} |
|||
BASEVER=${BASEVER:-4.4.14} |
|||
VERSION=${VERSION:-$BASEVER} |
|||
ARCH=${ARCH:-x86_64} |
|||
KARCH=${KARCH:-x86} |
|||
BUILD=${BUILD:-1} |
|||
|
|||
CWD=$(pwd) |
|||
TMP=${TMP:-/tmp/kernel} |
|||
|
|||
NUMJOBS=${NUMJOBS:-" -j7 "} |
|||
|
|||
export VERSION ARCH BUILD TMP |
|||
|
|||
# Extract the kernel source |
|||
mkdir -p $TMP |
|||
cd $TMP |
|||
rm -rf $PKGNAM-$BASEVER $PKGNAM-$VERSION |
|||
tar xvf $CWD/$PKGNAM-$BASEVER.tar.xz |
|||
|
|||
# Rename the kernel source directory to the proper VERSION |
|||
# This is useful if you're applying stable patches and the actual VERSION is different from the one the tarball is named after |
|||
if [ "$BASEVER" != "$VERSION" ]; then |
|||
mv $PKGNAM-$BASEVER $PKGNAM-$VERSION |
|||
fi |
|||
|
|||
# Apply patches |
|||
cd $PKGNAM-$VERSION |
|||
#xzcat $CWD/patch-x.x.xx.xz | patch -p1 --verbose |
|||
|
|||
|
|||
# |
|||
# Build kernel-headers |
|||
# |
|||
cd $TMP/$PKGNAM-$VERSION |
|||
|
|||
# Install the kernel headers |
|||
PKG=$TMP/package-kernel-headers |
|||
rm -rf $PKG |
|||
mkdir -p $PKG/usr |
|||
make $NUMJOBS INSTALL_HDR_PATH=$PKG/usr headers_install |
|||
|
|||
# Apply some modifications that are present in the original kernel-headers package |
|||
find $PKG/usr -type f -a ! -name '*.h' -delete |
|||
rm -rf $PKG/usr/include/drm |
|||
mv $PKG/usr/include/asm $PKG/usr/include/asm-$KARCH |
|||
ln -sf asm-$KARCH $PKG/usr/include/asm |
|||
|
|||
# Install the slack-desc |
|||
mkdir -p $PKG/install |
|||
cat $CWD/kernel-headers/slack-desc > $PKG/install/slack-desc |
|||
|
|||
# Create the package |
|||
cd $PKG |
|||
/sbin/makepkg -l y -c n $TMP/kernel-headers-$(echo $VERSION | tr - _)-$KARCH-$BUILD.txz |
|||
|
|||
|
|||
# |
|||
# Build kernel-huge |
|||
# |
|||
cd $TMP/$PKGNAM-$VERSION |
|||
|
|||
# Build the kernel image |
|||
make $NUMJOBS mrproper |
|||
cat $CWD/config-$ARCH/config-huge-* > .config |
|||
make $NUMJOBS oldconfig |
|||
make $NUMJOBS bzImage |
|||
|
|||
# Prepare the directory to run the packaging SlackBuild in |
|||
PKG=$TMP/kernel-huge |
|||
rm -rf $PKG |
|||
mkdir -p $PKG |
|||
cp arch/$KARCH/boot/bzImage $PKG |
|||
cp System.map $PKG |
|||
cp .config $PKG/config |
|||
|
|||
# Copy the packaging SlackBuild |
|||
cp -aT $CWD/packaging-$ARCH/kernel-huge $PKG |
|||
|
|||
# Run the packaging SlackBuild |
|||
cd $PKG |
|||
./kernel-huge.SlackBuild |
|||
|
|||
|
|||
# |
|||
# Build kernel-generic |
|||
# |
|||
cd $TMP/$PKGNAM-$VERSION |
|||
|
|||
# Build the kernel image |
|||
make $NUMJOBS mrproper |
|||
cat $CWD/config-$ARCH/config-generic-* > .config |
|||
make $NUMJOBS oldconfig |
|||
make $NUMJOBS bzImage |
|||
|
|||
# Prepare the directory to run the packaging SlackBuild in |
|||
PKG=$TMP/kernel-generic |
|||
rm -rf $PKG |
|||
mkdir -p $PKG |
|||
cp arch/$KARCH/boot/bzImage $PKG |
|||
cp System.map $PKG |
|||
cp .config $PKG/config |
|||
|
|||
# Copy the packaging SlackBuild |
|||
cp -aT $CWD/packaging-$ARCH/kernel-generic $PKG |
|||
|
|||
# Run the packaging SlackBuild |
|||
cd $PKG |
|||
./kernel-generic.SlackBuild |
|||
|
|||
|
|||
# |
|||
# Build kernel-modules |
|||
# |
|||
cd $TMP/$PKGNAM-$VERSION |
|||
|
|||
# Build the kernel modules with the already-present kernel-generic config |
|||
make $NUMJOBS modules |
|||
|
|||
# Prepare the directory to run the packaging SlackBuild in |
|||
PKG=$TMP/kernel-modules |
|||
rm -rf $PKG |
|||
mkdir -p $PKG |
|||
make $NUMJOBS INSTALL_MOD_PATH=$PKG modules_install |
|||
|
|||
# Point the build and source links to the proper source directory in /usr/src, as packaged in kernel-source |
|||
rm -f $PKG/lib/modules/$VERSION/build $PKG/lib/modules/$VERSION/source |
|||
ln -s /usr/src/$PKGNAM-$VERSION $PKG/lib/modules/$VERSION/build |
|||
ln -s /usr/src/$PKGNAM-$VERSION $PKG/lib/modules/$VERSION/source |
|||
|
|||
# Copy the packaging SlackBuild |
|||
cp -aT $CWD/packaging-$ARCH/kernel-modules $PKG |
|||
|
|||
# Prefix absolute module paths in the SlackBuild with $CWD, since we installed the modules there |
|||
sed -i -e 's@/lib/modules/@$CWD&@' $PKG/kernel-modules.SlackBuild |
|||
|
|||
# Run the packaging SlackBuild |
|||
cd $PKG |
|||
KERNELRELEASE=$VERSION ./kernel-modules.SlackBuild |
|||
|
|||
|
|||
# |
|||
# Build kernel-source |
|||
# |
|||
cd $TMP/$PKGNAM-$VERSION |
|||
|
|||
# Cleanup the source directory that was prepared and built with the kernel-generic config |
|||
make $NUMJOBS clean |
|||
make $NUMJOBS prepare |
|||
rm .version .config.old |
|||
|
|||
# Install the kernel source |
|||
PKG=$TMP/package-kernel-source |
|||
rm -rf $PKG |
|||
mkdir -p $PKG/usr/src |
|||
ln -s $PKGNAM-$VERSION $PKG/usr/src/$PKGNAM |
|||
|
|||
# Install the slack-desc |
|||
mkdir -p $PKG/install |
|||
cat $CWD/kernel-source/slack-desc > $PKG/install/slack-desc |
|||
|
|||
# Create the package |
|||
cd $PKG |
|||
mv $TMP/$PKGNAM-$VERSION usr/src |
|||
/sbin/makepkg -l y -c n $TMP/kernel-source-$(echo $VERSION | tr - _)-noarch-$BUILD.txz |
|||
|
|||
|
|||
# |
|||
# Build kernel-firmware |
|||
# |
|||
cd $TMP |
|||
|
|||
# Prepare the directory to run the packaging SlackBuild in |
|||
PKG=$TMP/kernel-firmware |
|||
rm -rf $PKG |
|||
mkdir -p $PKG |
|||
cp -aT $CWD/kernel-firmware $PKG |
|||
|
|||
# Use --depth=1 to cause git to not to download the entire history |
|||
sed -i -e 's/git clone/& --depth=1/' $PKG/kernel-firmware.SlackBuild |
|||
|
|||
# Run the packaging SlackBuild |
|||
cd $PKG |
|||
unset VERSION # The script uses `date` to make a $VERSION |
|||
./kernel-firmware.SlackBuild |
@ -1,151 +0,0 @@ |
|||
#!/bin/sh |
|||
set -eu |
|||
|
|||
if [ "$(id -u)" != 0 ]; then |
|||
echo "This script needs root permissions!" 1>&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
if [ "$#" -lt 2 ]; then |
|||
echo "Usage: $0 [-a arch] [-v version] [-m mirror] [-b localmirror]" 1>&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
|
|||
version='14.2' |
|||
arch="$(uname -m)" |
|||
mirror='https://mirrors.slackware.com/slackware' |
|||
base='' |
|||
|
|||
# Minimal amount of packages required to run installpkg, removepkg and upgradepkg |
|||
# bzip2 and gzip are optional, but required to support .tgz and .tbz packages |
|||
# All of these exist in the 'a' package set |
|||
packages_pkgtools=' |
|||
aaa_base |
|||
aaa_elflibs |
|||
bash |
|||
bzip2 |
|||
coreutils |
|||
etc |
|||
findutils |
|||
glibc-solibs |
|||
grep |
|||
gzip |
|||
pkgtools |
|||
sed |
|||
tar |
|||
util-linux |
|||
xz |
|||
' |
|||
|
|||
# Minimal amount of packages required to run slackpkg without the dialog interface |
|||
# gnupg is optional, but required to verify the GPG signatures of packages |
|||
# ca-certificates, openssl, bin and perl are optional, but required for HTTPS support |
|||
# These exist over the 'a', 'ap' and 'n' package sets |
|||
# perl exists in the 'd' package set |
|||
# openssl and ca-certificates need to be installed last (after perl and bin, at least) for the doinst.sh to run correctly |
|||
packages_slackpkg=' |
|||
bin |
|||
diffutils |
|||
gawk |
|||
gnupg |
|||
openssl-solibs |
|||
perl |
|||
slackpkg |
|||
wget |
|||
which |
|||
|
|||
openssl |
|||
ca-certificates |
|||
' |
|||
|
|||
# Parse arguments |
|||
while getopts "v:a:m:b:" opt; do |
|||
case "$opt" in |
|||
v) version="$OPTARG" ;; |
|||
a) arch="$OPTARG" ;; |
|||
m) mirror="$OPTARG" ;; |
|||
b) base="$(realpath "$OPTARG")" # Path to local mirror, to get the files from. |
|||
esac |
|||
done |
|||
|
|||
# Build final variables |
|||
case "$arch" in |
|||
x86_64) |
|||
pkgmain='slackware64' |
|||
;; |
|||
|
|||
*) |
|||
pkgmain='slackware' |
|||
;; |
|||
esac |
|||
release="$pkgmain-$version" |
|||
initrd='isolinux/initrd.img' |
|||
checksums='CHECKSUMS.md5' |
|||
|
|||
# Create working directory |
|||
temp="$(mktemp -d -t "$(basename "$0")".XXXXXX)" |
|||
trap "rm -rf '$temp'" EXIT |
|||
destdir="$PWD" |
|||
cd "$temp" |
|||
|
|||
# Function to download (or copy) a file |
|||
get() { |
|||
if [ "$base" ]; then |
|||
cp "$base/$1" "$2" |
|||
else |
|||
wget "$mirror/$release/$1" -O "$2" |
|||
fi |
|||
} |
|||
|
|||
# Function to verify files based on the checksums file |
|||
check() { |
|||
printf '%s' "$(tail +13 CHECKSUMS.md5 | grep "^[0-9a-f]* ./$1$" | cut -d ' ' -f 1) $2" | md5sum -c --quiet - |
|||
} |
|||
|
|||
# Get the full path to a package |
|||
package() { |
|||
tail +13 CHECKSUMS.md5 | grep "^[0-9a-f]* ./$pkgmain/[^/]*/$1-[^-]*-[^-]*-[^-]*\.t.z$" | cut -d ' ' -f 3- | cut -c 3- |
|||
} |
|||
|
|||
# Download checksums |
|||
get "$checksums" CHECKSUMS.md5 |
|||
|
|||
# Download installer initrd.img |
|||
get "$initrd" initrd.img |
|||
check "$initrd" initrd.img |
|||
|
|||
# Unpack and prepare the installer |
|||
zcat initrd.img | cpio -id |
|||
rm -rf initrd.img mnt pkg |
|||
mkdir -p mnt/pkg pkg |
|||
|
|||
# Download packages |
|||
for pkg in $packages_pkgtools; do |
|||
path="$(package "$pkg")" |
|||
name="$(basename "$path")" |
|||
|
|||
get "$path" "pkg/$name" |
|||
check "$path" "pkg/$name" |
|||
echo "$name" >> pkg/_ |
|||
done |
|||
for pkg in $packages_slackpkg; do |
|||
path="$(package "$pkg")" |
|||
name="$(basename "$path")" |
|||
|
|||
get "$path" "mnt/pkg/$name" |
|||
check "$path" "mnt/pkg/$name" |
|||
echo "$name" >> mnt/pkg/_ |
|||
done |
|||
|
|||
# Bootstrap pkgtools and it's dependencies |
|||
env -i chroot . sh -l -c 'while read pkg; do /usr/lib/setup/installpkg --root /mnt --terse "/pkg/$pkg"; done < /pkg/_' |
|||
|
|||
# Install slackpkg and it's dependencies |
|||
env -i chroot mnt sh -l -c 'while read pkg; do /sbin/installpkg --terse "/pkg/$pkg"; done < /pkg/_' |
|||
|
|||
# Configuration |
|||
printf '%s\n' "$mirror/$release/" >> mnt/etc/slackpkg/mirrors |
|||
|
|||
# Compress the package |
|||
tar cvJf "$destdir/$release.tar.xz" --sort=name --exclude=./pkg -C mnt . |
@ -1,63 +0,0 @@ |
|||
#!/bin/sh -e |
|||
set -e |
|||
|
|||
if [ "$(id -u)" != 0 ]; then |
|||
echo "This script needs root permissions!" 1>&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
if [ "$#" -lt 2 ]; then |
|||
echo "Usage: $0 <slackware> <chroot>" 1>&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
slackware="$(realpath "$1")" |
|||
chroot="$(realpath "$2")" |
|||
|
|||
temp="$(mktemp -d -t makechroot.XXXXXX)" |
|||
|
|||
# Make sure we clean up properly before exitting |
|||
cleanup() { |
|||
mountpoint -q "$temp/mnt" && umount "$temp/mnt" |
|||
mountpoint -q "$temp/dvd" && umount "$temp/dvd" |
|||
rm -rf "$temp" |
|||
} |
|||
trap 'cleanup' EXIT |
|||
|
|||
# Extract the initrd |
|||
cd "$temp" |
|||
gzip -cd "$slackware/isolinux/initrd.img" | cpio -id |
|||
|
|||
# Mount the dvd |
|||
mkdir dvd |
|||
mount --bind "$slackware" dvd |
|||
|
|||
# Mount the destination |
|||
mkdir -p "$chroot" |
|||
mount --bind "$chroot" mnt |
|||
|
|||
# Install the packages |
|||
env -i chroot . sh -l -c ' |
|||
/usr/lib/setup/installpkg --root /mnt --terse /dvd/slackware*/*/*.t?z |
|||
|
|||
cd /mnt |
|||
for script in \ |
|||
04.mkfontdir \ |
|||
05.fontconfig \ |
|||
07.update-desktop-database \ |
|||
07.update-mime-database \ |
|||
08.gtk-update-icon-cache \ |
|||
11.cacerts \ |
|||
cups-genppdupdate |
|||
do |
|||
var/log/setup/setup.$script |
|||
done |
|||
chroot . /usr/bin/update-gtk-immodules > /dev/null 2>&1 |
|||
chroot . /usr/bin/update-gdk-pixbuf-loaders > /dev/null 2>&1 |
|||
chroot . /usr/bin/update-pango-querymodules > /dev/null 2>&1 |
|||
chroot . /usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas > /dev/null 2>&1 |
|||
' |
|||
# We only run a few setup scripts that do not require user interaction, and deal with updating caches and such, which is not done (properly) by the doinst.sh scripts. |
|||
# To get a full list, run: bzcat MANIFEST.bz2 | awk '{print $6}' | grep '^var/log/setup/setup\.' | sort |
|||
# Besides the setup scripts, we also need to run some programs which are usually ran from /etc/rc.d/rc.M, but not from the setup scripts. |
|||
# This is tailored to Slackware 14.2. I'm unsure whether it'll work properly on any other version. |
@ -1,58 +0,0 @@ |
|||
#!/bin/sh |
|||
set -e |
|||
|
|||
# DISCLAIMER |
|||
# Don't ever think of installing every single package generated with this script. |
|||
# While it *should* not cause any problems, doing so is simply overkill, untested, and not recommended in the least. |
|||
|
|||
if [ "$#" -lt 2 ]; then |
|||
echo "Usage: $0 <slackware> <slackware64> [whitelist]" 1>&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
scriptdir="$(realpath "$(dirname "$0")")" |
|||
|
|||
slackware="$1" |
|||
slackware64="$2" |
|||
whitelist="$3" |
|||
|
|||
find "$slackware" -type f -name "*.t?z" -printf '%P\n' | sort | while read -r pkg; do |
|||
# See /sbin/installpkg |
|||
pkgbase="$(echo "$pkg" | sed -e 's?.*/??;s/\.t[bglx]z$//')" |
|||
pkgext="$(echo "$pkg" | sed -e 's?.*/??;s/.*\.\(t[bglx]z\)$/\1/')" |
|||
pkgname="$(echo "$pkgbase" | sed -e 's?-[^-]*-[^-]*-[^-]*$??')" |
|||
pkgver="$(echo "$pkgbase" | sed -e 's?.*-\([^-]*\)-[^-]*-[^-]*$?\1?')" |
|||
pkgarch="$(echo "$pkgbase" | sed -e 's?.*-[^-]*-\([^-]*\)-[^-]*$?\1?')" |
|||
|
|||
if [ "$whitelist" ]; then |
|||
if ! grep -v '^#' "$whitelist" | fgrep -xq "$pkgname"; then |
|||
continue |
|||
fi |
|||
fi |
|||
|
|||
case "$pkgarch" in |
|||
i?86) pkgarch=x86_64 ;; |
|||
# Architecture-independent stuff |
|||
noarch|fw) continue ;; |
|||
# Only kernel-headers uses x86 as pkgarch. That doesn't need conversion. |
|||
x86) continue ;; |
|||
*) |
|||
echo "WARNING: Package '$pkg' has an unsupported architecture: '$pkgarch'" |
|||
exit |
|||
;; |
|||
esac |
|||
|
|||
if [ ! -f "$slackware64/$(dirname "$pkg")/$pkgname-$pkgver-$pkgarch-"*".$pkgext" ]; then |
|||
echo "WARNING: Package '$pkg' doesn't exist in slackware64, or there were multiple with different build versions." |
|||
continue |
|||
fi |
|||
|
|||
rpkg="$(realpath "$slackware/$pkg")" |
|||
rpkg64="$(realpath "$slackware64/$(dirname "$pkg")/$pkgname-$pkgver-$pkgarch-"*".$pkgext")" |
|||
|
|||
mkdir -p "$(dirname "$pkg")" |
|||
|
|||
( cd "$(dirname "$pkg")" |
|||
"$scriptdir/convert32pkg.sh" "$rpkg" "$rpkg64" |
|||
) |
|||
done |
@ -1,188 +0,0 @@ |
|||
#!/bin/sh |
|||
set -e |
|||
|
|||
gpgkey='' |
|||
timestamp="$(LC_ALL=C date -u)" |
|||
cachedir='.cache' |
|||
|
|||
# Cleanup |
|||
if [ "$1" = 'clean' ]; then |
|||
rm -rf "$cachedir" ChangeLog.txt PACKAGES.TXT MANIFEST.bz2 FILELIST.TXT CHECKSUMS.md5 CHECKSUMS.md5.asc GPG-KEY |
|||
find . -regex '.*\.t[bglx]z$' | while read -r package; do |
|||
pkgbase="$(echo "$package" | sed 's?.*/??;s/\.t[bglx]z$//')" |
|||
rm -f "$(dirname "$package")/$pkgbase.txt" |
|||
rm -f "$package.asc" |
|||
done |
|||
|
|||
exit |
|||
fi |
|||
|
|||
mkdir -p "$cachedir" |
|||
|
|||
# Process all packages |
|||
find . -regex '.*\.t[bglx]z$' | while read -r package; do |
|||
case "$package" in |
|||
*.tgz) |
|||
tool=gzip |
|||
;; |
|||
*.tbz) |
|||
tool=bzip2 |
|||
;; |
|||
*.tlz) |
|||
tool=lzma |
|||
;; |
|||
*.txz) |
|||
tool=xz |
|||
;; |
|||
esac |
|||
|
|||
# See the pkgbase and package_name functions in /sbin/installpkg |
|||
pkgbase="$(echo "$package" | sed 's?.*/??;s/\.t[bglx]z$//')" |
|||
pkgdir="$(dirname "$package")" |
|||
pkgname="$(echo "$pkgbase" | sed 's?-[^-]*-[^-]*-[^-]*$??')" |
|||
|
|||
pkgtxt="$pkgdir/$pkgbase.txt" |
|||
pkgmeta="$cachedir/$pkgdir/$pkgbase.meta" |
|||
pkgmanifest="$cachedir/$pkgdir/$pkgbase.manifest" |
|||
pkgsize="$cachedir/$pkgdir/$pkgbase.size" |
|||
pkgusize="$cachedir/$pkgdir/$pkgbase.usize" |
|||
|
|||
pkgsum="$cachedir/$pkgdir/$pkgbase.checksum" |
|||
|
|||
if [ -f "$pkgtxt" -a \ |
|||
-f "$pkgmeta" -a \ |
|||
-f "$pkgmanifest" -a \ |
|||
-f "$pkgsize" -a \ |
|||
-f "$pkgusize" -a \ |
|||
-f "$pkgsum" ]; then |
|||
if [ "$gpgkey" ]; then |
|||
if [ -f "$package.asc" ]; then |
|||
md5sum --status -c "$pkgsum" && continue |
|||
fi |
|||
else |
|||
md5sum --status -c "$pkgsum" && continue |
|||
fi |
|||
fi |
|||
|
|||
echo "Adding $package..." |
|||
mkdir -p "$cachedir/$pkgdir" |
|||
|
|||
# Decompress the package |
|||
tmppkg="$(mktemp)" |
|||
$tool -cd "$package" > "$tmppkg" |
|||
|
|||
# Get package size |
|||
du -k "$package" | cut -f 1 > "$pkgsize" |
|||
du -k "$tmppkg" | cut -f 1 > "$pkgusize" |
|||
|
|||
# Generate .txt file (see /usr/bin/slackdtxt) |
|||
(tar xOf "$tmppkg" install/slack-desc 2> /dev/null || echo "$pkgname:") | egrep -v '^($|#| *\|)' > "$pkgtxt" |
|||
|
|||
# Create manifest for this package |
|||
cat > "$pkgmanifest" << EOF |
|||
++======================================== |
|||
|| |
|||
|| Package: $package |
|||
|| |
|||
++======================================== |
|||
$(TZ=EST tar tvvf "$tmppkg") |
|||
|
|||
|
|||
EOF |
|||
|
|||
# Create metadata for this package |
|||
# Source for the sed line: https://stackoverflow.com/questions/1444406/how-can-i-delete-duplicate-lines-in-a-file-in-unix#1444433 |
|||
cat > "$pkgmeta" << EOF |
|||
PACKAGE NAME: $(basename "$package") |
|||
PACKAGE LOCATION: $pkgdir |
|||
PACKAGE SIZE (compressed): $(cat "$pkgsize" | xargs) K |
|||
PACKAGE SIZE (uncompressed): $(cat "$pkgusize" | xargs) K |
|||
PACKAGE DESCRIPTION: |
|||
$(cat "$pkgtxt" | sed -e '$!N; /^\(.*\)\n\1$/!P; D') |
|||
|
|||
EOF |
|||
|
|||
# Sign the package |
|||
rm -f "$package.asc" |
|||
[ "$gpgkey" ] && gpg -bas --use-agent --batch -u "$gpgkey" "$package" |
|||
|
|||
# Remove decompressed package |
|||
rm -f "$tmppkg" |
|||
|
|||
# Save checksum |
|||
md5sum "$package" > "$pkgsum" |
|||
done |
|||
|
|||
# Generate shitty ChangeLog.txt |
|||
echo "$timestamp" > ChangeLog.txt |
|||
|
|||
# Create GPG-KEY |
|||
if [ "$gpgkey" ]; then |
|||
gpg --list-keys "$gpgkey" > GPG-KEY |
|||
gpg -a --export "$gpgkey" >> GPG-KEY |
|||
fi |
|||
|
|||
# Generate PACKAGES.TXT |
|||
echo "Generating PACKAGES.TXT..." |
|||
|
|||
cat > PACKAGES.TXT << EOF |
|||
|
|||
PACKAGES.TXT; $timestamp |
|||
|
|||
This file provides details on the Slackware packages found |
|||
in this directory. |
|||
|
|||
Total size of all packages (compressed): $(expr \( 0$(find "$cachedir" -type f -name '*.size' | xargs cat | xargs printf ' + %s') \) / 1024 || true) MB |
|||
Total size of all packages (uncompressed): $(expr \( 0$(find "$cachedir" -type f -name '*.usize' | xargs cat | xargs printf ' + %s') \) / 1024 || true) MB |
|||
|
|||
|
|||
EOF |
|||
|
|||
# https://stackoverflow.com/questions/4255603/sort-files-by-basename#4256095 |
|||
find "$cachedir" -type f -name '*.meta' | perl -e 'print sort{($p=$a)=~s!.*/!!;($q=$b)=~s!.*/!!;$p cmp$q}<>' | xargs cat >> PACKAGES.TXT |
|||
|
|||
echo >> PACKAGES.TXT |
|||
|
|||
# Generate MANIFEST.bz2 |
|||
echo "Generating MANIFEST.bz2..." |
|||
find "$cachedir" -type f -name '*.manifest' | sort | xargs cat | bzip2 -9 -z > MANIFEST.bz2 |
|||
|
|||
# Generate FILELIST.TXT |
|||
echo "Generating FILELIST.TXT..." |
|||
|
|||
cat > FILELIST.TXT << EOF |
|||
$timestamp |
|||
|
|||
Here is the file list for this directory. If you are using a |
|||
mirror site and find missing or extra files in the disk |
|||
subdirectories, please have the archive administrator refresh |
|||
the mirror. |
|||
|
|||
EOF |
|||
find . ! -path "./$cachedir/*" -a ! -name "$cachedir" | sort | xargs fakeroot ls -ld --time-style=long-iso > FILELIST.TXT |
|||
|
|||
# Generate CHECKSUMS.md5 |
|||
echo "Generating CHECKSUMS.md5..." |
|||
|
|||
cat > CHECKSUMS.md5 << EOF |
|||
These are the MD5 message digests for the files in this directory. |
|||
If you want to test your files, use 'md5sum' and compare the values to |
|||
the ones listed here. |
|||
|
|||
To test all these files, use this command: |
|||
|
|||
tail +13 CHECKSUMS.md5 | md5sum -c --quiet - | less |
|||
|
|||
'md5sum' can be found in the GNU coreutils package on ftp.gnu.org in |
|||
/pub/gnu, or at any GNU mirror site. |
|||
|
|||
MD5 message digest Filename |
|||
EOF |
|||
find . -type f -a ! -path "./$cachedir/*" | sort | xargs md5sum >> CHECKSUMS.md5 |
|||
|
|||
# Sign CHECKSUMS.md5 |
|||
rm -f CHECKSUMS.md5.asc |
|||
[ "$gpgkey" ] && gpg -bas --use-agent --batch -u "$gpgkey" CHECKSUMS.md5 |
|||
|
|||
# Remove tmpdir |
|||
rm -rf "$tmpdir" |
@ -1,143 +0,0 @@ |
|||
#!/bin/sh |
|||
set -eu |
|||
|
|||
if [ "$(id -u)" != 0 ]; then |
|||
echo "This script needs root permissions!" 1>&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
if [ "$#" -lt 1 ]; then |
|||
echo "Usage: $0 [-a arch] [-m mirror] <chroot>" 1>&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
|
|||
arch="$(uname -m)" |
|||
mirror='https://mirrors.slackware.com/slackware/slackware64-current' |
|||
|
|||
# Minimal amount of packages required to run installpkg, removepkg, upgradepkg, explodepkg and makepkg |
|||
# All of these exist in the 'a' package set |
|||
packages_pkgtools=' |
|||
aaa_base |
|||
aaa_elflibs |
|||
bash |
|||
coreutils |
|||
etc |
|||
findutils |
|||
glibc-solibs |
|||
grep |
|||
pkgtools |
|||
sed |
|||
tar |
|||
util-linux |
|||
which |
|||
xz |
|||
' |
|||
|
|||
# Minimal amount of packages required to run slackpkg without the dialog interface |
|||
# Supporting https, gpg, and upgrade-all. |
|||
# These exist over the 'a', 'ap', 'n' and 'l' package sets |
|||
# ca-certificates needs to be installed after openssl for the doinst.sh to run correctly |
|||
packages_extra=' |
|||
bzip2 |
|||
diffutils |
|||
gawk |
|||
gnupg |
|||
gzip |
|||
libpsl |
|||
libunistring |
|||
pcre2 |
|||
slackpkg |
|||
wget |
|||
|
|||
openssl |
|||
ca-certificates |
|||
' |
|||
|
|||
# Parse arguments |
|||
while getopts "a:m:" opt; do |
|||
case "$opt" in |
|||
a) arch="$OPTARG" ;; |
|||
m) |
|||
if [ -d "$OPTARG" ]; then |
|||
mirror="$(realpath "$OPTARG")" |
|||
else |
|||
mirror="$OPTARG" |
|||
fi |
|||
;; |
|||
esac |
|||
done |
|||
shift $(expr $OPTIND - 1) |
|||
[ "$#" -ge 1 ] && [ "$1" = "--" ] && shift |
|||
|
|||
# Build final variables |
|||
case "$arch" in |
|||
x86_64) pkgmain='slackware64' ;; |
|||
*) pkgmain='slackware' ;; |
|||
esac |
|||
initrd='isolinux/initrd.img' |
|||
checksums='CHECKSUMS.md5' |
|||
chroot="$(realpath "$1")" |
|||
|
|||
# Create working directory |
|||
temp="$(mktemp -d -t "$(basename "$0")".XXXXXX)" |
|||
cleanup() { |
|||
if mountpoint -q "$temp/mnt/pkg"; then |
|||
umount "$temp/mnt/pkg" |
|||
rmdir "$temp/mnt/pkg" |
|||
fi |
|||
mountpoint -q "$temp/mnt" && umount "$temp/mnt" |
|||
rm -rf "$temp" |
|||
} |
|||
trap 'cleanup' EXIT |
|||
cd "$temp" |
|||
|
|||
# Function to download (or copy) a file |
|||
get() { |
|||
if [ -d "$mirror" ]; then |
|||
cp "$mirror/$1" "$2" |
|||
else |
|||
wget "$mirror/$1" -O "$2" |
|||
fi |
|||
} |
|||
|
|||
# Function to verify files based on the checksums file |
|||
check() { |
|||
printf '%s' "$(tail +13 CHECKSUMS.md5 | grep "^[0-9a-f]* ./$1$" | cut -d ' ' -f 1) $2" | md5sum -c --quiet - |
|||
} |
|||
|
|||
# Get the full path to a package |
|||
package() { |
|||
tail +13 CHECKSUMS.md5 | grep "^[0-9a-f]* ./$pkgmain/[^/]*/$1-[^-]*-[^-]*-[^-]*\.t.z$" | cut -d ' ' -f 3- | cut -c 3- |
|||
} |
|||
|
|||
# Download checksums |
|||
get "$checksums" CHECKSUMS.md5 |
|||
|
|||
# Download installer initrd.img |
|||
get "$initrd" initrd.img |
|||
check "$initrd" initrd.img |
|||
|
|||
# Unpack and prepare the installer |
|||
xz -cd initrd.img | cpio -id |
|||
rm -f initrd.img |
|||
mkdir -p pkg "$chroot" |
|||
mount --bind "$chroot" mnt |
|||
mkdir -p mnt/pkg |
|||
mount --bind pkg mnt/pkg |
|||
|
|||
# Download packages |
|||
for pkg in $packages_pkgtools $packages_extra; do |
|||
path="$(package "$pkg")" |
|||
name="$(basename "$path")" |
|||
get "$path" "pkg/$name" |
|||
check "$path" "pkg/$name" |
|||
done |
|||
for pkg in $packages_pkgtools; do echo "$(basename "$(package "$pkg")")" >> pkg/__; done |
|||
for pkg in $packages_extra; do echo "$(basename "$(package "$pkg")")" >> pkg/_; done |
|||
|
|||
# Bootstrap pkgtools and its dependencies |
|||
env -i chroot . sh -l -c 'while read pkg; do /sbin/installpkg --root /mnt --terse "/pkg/$pkg"; done < /pkg/__' |
|||
|
|||
# Install slackpkg and its dependencies |
|||
env -i chroot mnt sh -l -c 'while read pkg; do /sbin/installpkg --terse "/pkg/$pkg"; done < /pkg/_' |
@ -1,63 +0,0 @@ |
|||
#!/bin/sh -e |
|||
set -e |
|||
|
|||
if [ "$(id -u)" != 0 ]; then |
|||
echo "This script needs root permissions!" 1>&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
if [ "$#" -lt 2 ]; then |
|||
echo "Usage: $0 <slackware> <chroot>" 1>&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
slackware="$(realpath "$1")" |
|||
chroot="$(realpath "$2")" |
|||
|
|||
temp="$(mktemp -d -t makechroot.XXXXXX)" |
|||
|
|||
# Make sure we clean up properly before exitting |
|||
cleanup() { |
|||
mountpoint -q "$temp/mnt" && umount "$temp/mnt" |
|||
mountpoint -q "$temp/dvd" && umount "$temp/dvd" |
|||
rm -rf "$temp" |
|||
} |
|||
trap 'cleanup' EXIT |
|||
|
|||
# Extract the initrd |
|||
cd "$temp" |
|||
xz -cd "$slackware/isolinux/initrd.img" | cpio -id |
|||
|
|||
# Mount the dvd |
|||
mkdir dvd |
|||
mount --bind "$slackware" dvd |
|||
|
|||
# Mount the destination |
|||
mkdir -p "$chroot" |
|||
mount --bind "$chroot" mnt |
|||
|
|||
# Install the packages |
|||
env -i chroot . sh -l -c ' |
|||
/sbin/installpkg --root /mnt --terse /dvd/slackware*/*/*.t?z |
|||
|
|||
cd /mnt |
|||
for script in \ |
|||
04.mkfontdir \ |
|||
05.fontconfig \ |
|||
07.update-desktop-database \ |
|||
07.update-mime-database \ |
|||
08.gtk-update-icon-cache \ |
|||
11.cacerts \ |
|||
cups-genppdupdate |
|||
do |
|||
var/lib/pkgtools/setup/setup.$script |
|||
done |
|||
chroot . /usr/bin/update-gtk-immodules > /dev/null 2>&1 |
|||
HOME=/root chroot . /usr/bin/update-gdk-pixbuf-loaders > /dev/null 2>&1 |
|||
chroot . /usr/bin/update-pango-querymodules > /dev/null 2>&1 |
|||
chroot . /usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas > /dev/null 2>&1 |
|||
' |
|||
# We only run a few setup scripts that do not require user interaction, and deal with updating caches and such, which is not done (properly) by the doinst.sh scripts. |
|||
# To get a full list, run: bzcat MANIFEST.bz2 | awk '{print $6}' | grep '^var/log/setup/setup\.' | sort |
|||
# Besides the setup scripts, we also need to run some programs which are usually ran from /etc/rc.d/rc.M, but not from the setup scripts. |
|||
# This is tailored to Slackware 15.0-current, I'm unsure whether it'll work properly on any other version. |
@ -0,0 +1,25 @@ |
|||
config() { |
|||
NEW="$1" |
|||
OLD="$(dirname $NEW)/$(basename $NEW .new)" |
|||
if [ ! -r $OLD ]; then |
|||
mv $NEW $OLD |
|||
elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then |
|||
rm $NEW |
|||
fi |
|||
} |
|||
|
|||
preserve_perms() { |
|||
NEW="$1" |
|||
OLD="$(dirname $NEW)/$(basename $NEW .new)" |
|||
if [ -e $OLD ]; then |
|||
cp -a $OLD ${NEW}.incoming |
|||
cat $NEW > ${NEW}.incoming |
|||
mv ${NEW}.incoming $NEW |
|||
fi |
|||
config $NEW |
|||
} |
|||
|
|||
preserve_perms etc/rc.d/rc.lxc.new |
|||
config etc/lxc/default.conf.new |
|||
config etc/default/lxc.new |
|||
|
Binary file not shown.
@ -0,0 +1,489 @@ |
|||
#!/bin/bash |
|||
|
|||
# |
|||
# lxc: linux Container library |
|||
|
|||
# Authors: |
|||
# Daniel Lezcano <daniel.lezcano@free.fr> |
|||
|
|||
# Template for slackware by Matteo Bernardini <ponce@slackbuilds.org> |
|||
# some parts are taken from the debian one (used as model) |
|||
|
|||
# This library is free software; you can redistribute it and/or |
|||
# modify it under the terms of the GNU Lesser General Public |
|||
# License as published by the Free Software Foundation; either |
|||
# version 2.1 of the License, or (at your option) any later version. |
|||
|
|||
# This library is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|||
# Lesser General Public License for more details. |
|||
|
|||
# You should have received a copy of the GNU Lesser General Public |
|||
# License along with this library; if not, write to the Free Software |
|||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|||
|
|||
cache=${cache:-/var/cache/lxc/slackware} |
|||
|
|||
# Use the primary Slackware site by default, but please consider changing |
|||
# this to a closer mirror site. |
|||
MIRROR=${MIRROR:-http://ftp.slackware.com/pub/slackware} |
|||
|
|||
if [ -z "$arch" ]; then |
|||
case "$( uname -m )" in |
|||
i?86) arch=i486 ;; |
|||
arm*) arch=arm ;; |
|||
*) arch=$( uname -m ) ;; |
|||
esac |
|||
fi |
|||
|
|||
configure_slackware() |
|||
{ |
|||
rootfs=$1 |
|||
hostname=$2 |
|||
|
|||
echo "Configuring..." ; echo |
|||
|
|||
# The next part contains excerpts taken from SeTconfig (written by |
|||
# Patrick Volkerding) from the slackware setup disk. |
|||
# But before pasting them just set a variable to use them as they are |
|||
T_PX=$rootfs |
|||
|
|||
( cd $T_PX ; chmod 755 ./ ) |
|||
( cd $T_PX ; chmod 755 ./var ) |
|||
if [ -d $T_PX/usr/src/linux ]; then |
|||
chmod 755 $T_PX/usr/src/linux |
|||
fi |
|||
if [ ! -d $T_PX/proc ]; then |
|||
mkdir $T_PX/proc |
|||
chown root.root $T_PX/proc |
|||
fi |
|||
if [ ! -d $T_PX/sys ]; then |
|||
mkdir $T_PX/sys |
|||
chown root.root $T_PX/sys |
|||
fi |
|||
chmod 1777 $T_PX/tmp |
|||
if [ ! -d $T_PX/var/spool/mail ]; then |
|||
mkdir -p $T_PX/var/spool/mail |
|||
chmod 755 $T_PX/var/spool |
|||
chown root.mail $T_PX/var/spool/mail |
|||
chmod 1777 $T_PX/var/spool/mail |
|||
fi |
|||
|
|||
echo "#!/bin/sh" > $T_PX/etc/rc.d/rc.keymap |
|||
echo "# Load the keyboard map. More maps are in /usr/share/kbd/keymaps." \ |
|||
>> $T_PX/etc/rc.d/rc.keymap |
|||
echo "if [ -x /usr/bin/loadkeys ]; then" >> $T_PX/etc/rc.d/rc.keymap |
|||
echo " /usr/bin/loadkeys us" >> $T_PX/etc/rc.d/rc.keymap |
|||
echo "fi" >> $T_PX/etc/rc.d/rc.keymap |
|||
chmod 755 $T_PX/etc/rc.d/rc.keymap |
|||
|
|||
# Network configuration is left to the user, that have to edit |
|||
# /etc/rc.d/rc.inet1.conf and /etc/resolv.conf of the container |
|||
# just set the hostname |
|||
cat <<EOF > $rootfs/etc/HOSTNAME |
|||
$hostname.example.net |
|||
EOF |
|||
cp $rootfs/etc/HOSTNAME $rootfs/etc/hostname |
|||
|
|||
# make needed devices, from Chris Willing's MAKEDEV.sh |
|||
# http://www.vislab.uq.edu.au/howto/lxc/MAKEDEV.sh |
|||
DEV=$rootfs/dev |
|||
mkdir -p ${DEV} |
|||
mknod -m 666 ${DEV}/null c 1 3 |
|||
mknod -m 666 ${DEV}/zero c 1 5 |
|||
mknod -m 666 ${DEV}/random c 1 8 |
|||
mknod -m 666 ${DEV}/urandom c 1 9 |
|||
mkdir -m 755 ${DEV}/pts |
|||
mkdir -m 1777 ${DEV}/shm |
|||
mknod -m 666 ${DEV}/tty c 5 0 |
|||
mknod -m 600 ${DEV}/console c 5 1 |
|||
mknod -m 666 ${DEV}/tty0 c 4 0 |
|||
mknod -m 666 ${DEV}/tty1 c 4 1 |
|||
mknod -m 666 ${DEV}/tty2 c 4 2 |
|||
mknod -m 666 ${DEV}/tty3 c 4 3 |
|||
mknod -m 666 ${DEV}/tty4 c 4 4 |
|||
mknod -m 666 ${DEV}/tty5 c 4 5 |
|||
mknod -m 666 ${DEV}/full c 1 7 |
|||
mknod -m 600 ${DEV}/initctl p |
|||
mknod -m 660 ${DEV}/loop0 b 7 0 |
|||
mknod -m 660 ${DEV}/loop1 b 7 1 |
|||
ln -s pts/ptmx ${DEV}/ptmx |
|||
ln -s /proc/self/fd ${DEV}/fd |
|||
|
|||
echo "Adding an etc/fstab that must be modified later with the" |
|||
echo "full path of the container's rootfs if you decide to move it." |
|||
cat >$rootfs/etc/fstab <<EOF |
|||
lxcpts $rootfs/dev/pts devpts defaults,newinstance 0 0 |
|||
none $rootfs/proc proc defaults 0 0 |
|||
none $rootfs/sys sysfs defaults 0 0 |
|||
none /dev/shm tmpfs defaults 0 0 |
|||
none /run tmpfs defaults,mode=0755 0 0 |
|||
EOF |
|||
|
|||
# Back up the existing init scripts and install the lxc versions: |
|||
( cd $rootfs/etc/rc.d |
|||
cp -a /usr/share/lxc/scripts/slackware/* . |
|||
chmod 755 *.lxc |
|||
for file in *.lxc ; do |
|||
cp -a $(basename $file .lxc) $(basename $file .lxc).orig |
|||
cp -a $file $(basename $file .lxc) |
|||
done |
|||
) |
|||
|
|||
# restart rc.inet1 to have routing for the loop device |
|||
echo "/etc/rc.d/rc.inet1 restart" >> $rootfs/etc/rc.d/rc.local |
|||
|
|||
# reduce the number of local consoles: two should be enough |
|||
sed -i '/^c3\|^c4\|^c5\|^c6/s/^/# /' $rootfs/etc/inittab |
|||
|
|||
# In a container, use shutdown for powerfail conditions. LXC sends the SIGPWR |
|||
# signal to init to shut down the container with lxc-stop and without this the |
|||
# container will be force stopped after a one minute timeout. |
|||
sed -i "s,pf::powerfail:/sbin/genpowerfail start,pf::powerfail:/sbin/shutdown -h now,g" $rootfs/etc/inittab |
|||
sed -i "s,pg::powerokwait:/sbin/genpowerfail stop,pg::powerokwait:/sbin/shutdown -c,g" $rootfs/etc/inittab |
|||
|
|||
# set a default combination for the luggage |
|||
echo "root:root" | chroot $rootfs chpasswd |
|||
echo "Root default password is 'root', please change it!" |
|||
|
|||
# borrow the time configuration from the local machine |
|||
cp -a /etc/localtime $rootfs/etc/localtime |
|||
|
|||
return 0 |
|||
} |
|||
|
|||
copy_slackware() |
|||
{ |
|||
rootfs=$1 |
|||
|
|||
# make a local copy of the installed filesystem |
|||
echo -n "Copying rootfs to $rootfs..." |
|||
mkdir -p $rootfs |
|||
cp -a $cache/rootfs-$release-$arch/* $rootfs/ || exit 1 |
|||
|
|||
# fix fstab with the actual path |
|||
sed -i "s|$cache/rootfs-$release-$arch|$rootfs|" $rootfs/etc/fstab |
|||
|
|||
return 0 |
|||
} |
|||
|
|||
install_slackware() |
|||
{ |
|||
rootfs=$1 |
|||
mkdir -p /var/lock/subsys/ |
|||
( |
|||
flock -n -x 200 |
|||
if [ $? -ne 0 ]; then |
|||
echo "Cache repository is busy." |
|||
return 1 |
|||
fi |
|||
|
|||
if [ "$arch" == "x86_64" ]; then |
|||
PKGMAIN=slackware64 |
|||
elif [ "$arch" == "arm" ]; then |
|||
PKGMAIN=slackwarearm |
|||
else |
|||
PKGMAIN=slackware |
|||
fi |
|||
|
|||
export CONF=$cache/slackpkg-conf |
|||
export ROOT=$cache/rootfs-$release-$arch |
|||
|
|||
mkdir -p $cache/cache-$release-$arch $cache/rootfs-$release-$arch \ |
|||
$cache/slackpkg-$release-$arch $CONF/templates |
|||
|
|||
echo "$MIRROR/$PKGMAIN-$release/" > $CONF/mirrors |
|||
touch $CONF/blacklist |
|||
|
|||
cat <<EOF > $CONF/slackpkg.conf |
|||
# v2.8 |
|||
ARCH=$arch |
|||
TEMP=$cache/cache-$release-$arch |
|||
WORKDIR=$cache/slackpkg-$release-$arch |
|||
DELALL=off |
|||
CHECKMD5=on |
|||
CHECKGPG=on |
|||
CHECKSIZE=off |
|||
PRIORITY=( patches %PKGMAIN extra pasture testing ) |
|||
POSTINST=on |
|||
ONLY_NEW_DOTNEW=off |
|||
ONOFF=on |
|||
DOWNLOAD_ALL=on |
|||
DIALOG=off |
|||
BATCH=on |
|||
DEFAULT_ANSWER=y |
|||
USE_INCLUDES=on |
|||
SPINNING=off |
|||
EOF |
|||
|
|||
# thanks to Vincent Batts for this list of packages |
|||
# (that I modified a little :P) |
|||
# http://connie.slackware.com/~vbatts/minimal/ |
|||
cat <<EOF > $CONF/templates/minimal-lxc.template |
|||
aaa_base |
|||
aaa_elflibs |
|||
aaa_terminfo |
|||
bash |
|||
bin |
|||
bzip2 |
|||
coreutils |
|||
dcron |
|||
dhcpcd |
|||
dialog |
|||
diffutils |
|||
e2fsprogs |
|||
elvis |
|||
etc |
|||
eudev |
|||
findutils |
|||
gawk |
|||
glibc-solibs |
|||
gnupg |
|||
grep |
|||
gzip |
|||
iputils |
|||
logrotate |
|||
mpfr |
|||
net-tools |
|||
network-scripts |
|||
ncurses |
|||
openssh |
|||
openssl-solibs |
|||
pkgtools |
|||
procps-ng |
|||
sed |
|||
shadow |
|||
sharutils |
|||
slackpkg |
|||
sysklogd |
|||
sysvinit |
|||
sysvinit-functions |
|||
sysvinit-scripts |
|||
tar |
|||
util-linux |
|||
wget |
|||
which |
|||
xz |
|||
EOF |
|||
|
|||
TEMPLATE=${TEMPLATE:-minimal-lxc} |
|||
if [ ! "$TEMPLATE" = "minimal-lxc" ]; then |
|||
if [ -f /etc/slackpkg/templates/$TEMPLATE.template ]; then |
|||
cat /etc/slackpkg/templates/$TEMPLATE.template \ |
|||
> $CONF/templates/$TEMPLATE.template |
|||
else |
|||
TEMPLATE="minimal-lxc" |
|||
fi |
|||
fi |
|||
|
|||
# clean previous installs |
|||
rm -fR $ROOT/* |
|||
|
|||
slackpkg -default_answer=n update |
|||
slackpkg install-template $TEMPLATE |
|||
|
|||
# add a slackpkg default mirror |
|||
echo "$MIRROR/$PKGMAIN-$release/" >> $ROOT/etc/slackpkg/mirrors |
|||
|
|||
# blacklist the devs package (we have to use our premade devices). |
|||
# do the same with the kernel packages (we use the host's one), |
|||
# but leave available headers and sources |
|||
echo "devs" >> $ROOT/etc/slackpkg/blacklist |
|||
sed -i \ |
|||
-e "s|^#kernel-|kernel-|" \ |
|||
-e "s|^kernel-headers|#kernel-headers|" \ |
|||
-e "s|^kernel-source|#kernel-source|" \ |
|||
$ROOT/etc/slackpkg/blacklist |
|||
|
|||
return 0 |
|||
|
|||
) 200>/var/lock/subsys/lxc |
|||
|
|||
return $? |
|||
} |
|||
|
|||
copy_configuration() |
|||
{ |
|||
path=$1 |
|||
rootfs=$2 |
|||
name=$3 |
|||
|
|||
cat <<EOF >> $path/config |
|||
|
|||
lxc.utsname = $name |
|||
|
|||
lxc.mount = $rootfs/etc/fstab |
|||
|
|||
lxc.tty = 4 |
|||
lxc.pts = 1024 |
|||
lxc.rootfs = $rootfs |
|||
|
|||
lxc.cgroup.devices.deny = a |
|||
# /dev/null and zero |
|||
lxc.cgroup.devices.allow = c 1:3 rwm |
|||
lxc.cgroup.devices.allow = c 1:5 rwm |
|||
# consoles |
|||
lxc.cgroup.devices.allow = c 5:1 rwm |
|||
lxc.cgroup.devices.allow = c 5:0 rwm |
|||
lxc.cgroup.devices.allow = c 4:0 rwm |
|||
lxc.cgroup.devices.allow = c 4:1 rwm |
|||
# /dev/{,u}random |
|||
lxc.cgroup.devices.allow = c 1:9 rwm |
|||
lxc.cgroup.devices.allow = c 1:8 rwm |
|||
lxc.cgroup.devices.allow = c 136:* rwm |
|||
lxc.cgroup.devices.allow = c 5:2 rwm |
|||
# rtc |
|||
lxc.cgroup.devices.allow = c 254:0 rwm |
|||
|
|||
# we don't trust even the root user in the container, better safe than sorry. |
|||
# comment out only if you know what you're doing. |
|||
lxc.cap.drop = sys_module mknod mac_override mac_admin sys_time setfcap setpcap |
|||
|
|||
# you can try also this alternative to the line above, whatever suits you better. |
|||
# lxc.cap.drop=sys_admin |
|||
EOF |
|||
|
|||
if [ $? -ne 0 ]; then |
|||
echo "Failed to add configuration." |
|||
return 1 |
|||
fi |
|||
|
|||
return 0 |
|||
} |
|||
|
|||
clean() |
|||
{ |
|||
if [ ! -e $cache ]; then |
|||
exit 0 |
|||
fi |
|||
|
|||
# lock, so we won't purge while someone is creating a repository |
|||
( |
|||
flock -n -x 200 |
|||
if [ $? != 0 ]; then |
|||
echo "Cache repository is busy." |
|||
exit 1 |
|||
fi |
|||
|
|||
echo -n "Purging the download cache..." |
|||
rm --preserve-root --one-file-system -rf $cache && echo "Done." || exit 1 |
|||
exit 0 |
|||
|
|||
) 200>/var/lock/subsys/lxc |
|||
} |
|||
|
|||
usage() |
|||
{ |
|||
cat <<EOF |
|||
$1 -h|--help -p|--path=<path> --clean |
|||
EOF |
|||
return 0 |
|||
} |
|||
|
|||
options=$(getopt -o hp:n:a:r:c -l help,rootfs:,path:,name:,arch:,release:,clean -- "$@") |
|||
if [ $? -ne 0 ]; then |
|||
usage $(basename $0) |
|||
exit 1 |
|||
fi |
|||
eval set -- "$options" |
|||
|
|||
while true |
|||
do |
|||
case "$1" in |
|||
-h|--help) usage $0 && exit 0;; |
|||
-p|--path) path=$2; shift 2;; |
|||
--rootfs) rootfs=$2; shift 2;; |
|||
-a|--arch) arch=$2; shift 2;; |
|||
-r|--release) release=$2; shift 2;; |
|||
-n|--name) name=$2; shift 2;; |
|||
-c|--clean) clean=$2; shift 2;; |
|||
--) shift 1; break ;; |
|||
*) break ;; |
|||
esac |
|||
done |
|||
|
|||
if [ ! -z "$clean" -a -z "$path" ]; then |
|||
clean || exit 1 |
|||
exit 0 |
|||
fi |
|||
|
|||
type installpkg |
|||
if [ $? -ne 0 ]; then |
|||
echo "'installpkg' command is missing." |
|||
exit 1 |
|||
fi |
|||
|
|||
type slackpkg |
|||
if [ $? -ne 0 ]; then |
|||
echo "'slackpkg' command is missing." |
|||
exit 1 |
|||
fi |
|||
|
|||
if [ -z "$path" ]; then |
|||
echo "'path' parameter is required." |
|||
exit 1 |
|||
fi |
|||
|
|||
if [ "$(id -u)" != "0" ]; then |
|||
echo "This script should be run as 'root'." |
|||
exit 1 |
|||
fi |
|||
|
|||
# If no release version was specified, use current |
|||
release=${release:-current} |
|||
|
|||
if [ -z "$name" ]; then |
|||
# no name given? set a default one |
|||
name=slackwarecontainer |
|||
fi |
|||
|
|||
# detect rootfs |
|||
config="$path/config" |
|||
if [ -z "$rootfs" ]; then |
|||
if grep -q '^lxc.rootfs' $config 2>/dev/null ; then |
|||
rootfs=$(awk -F= '/^lxc.rootfs =/{ print $2 }' $config) |
|||
else |
|||
rootfs=$path/rootfs |
|||
fi |
|||
fi |
|||
|
|||
echo |
|||
|
|||
set -e |
|||
|
|||
install_slackware $rootfs |
|||
if [ $? -ne 0 ]; then |
|||
echo "Failed to install slackware." |
|||
exit 1 |
|||
fi |
|||
|
|||
echo |
|||
|
|||
configure_slackware $cache/rootfs-$release-$arch $name |
|||
if [ $? -ne 0 ]; then |
|||
echo "Failed to configure slackware for a container." |
|||
exit 1 |
|||
fi |
|||
|
|||
echo |
|||
|
|||
rootfs=$path/rootfs |
|||
copy_slackware $rootfs |
|||
if [ $? -ne 0 ]; then |
|||
echo "Failed to copy rootfs." |
|||
exit 1 |
|||
fi |
|||
|
|||
echo |
|||
|
|||
copy_configuration $path $rootfs $name |
|||
if [ $? -ne 0 ]; then |
|||
echo "Failed to write configuration file." |
|||
exit 1 |
|||
fi |
|||
|
|||
if [ ! -z $clean ]; then |
|||
clean || exit 1 |
|||
exit 0 |
|||
fi |
@ -0,0 +1,182 @@ |
|||
#!/bin/sh |
|||
|
|||
# Copyright 2011, 2012, 2013, 2014, 2015, 2016 Patrick J. Volkerding, Sebeka, Minnesota, USA |
|||
# All rights reserved. |
|||
# |
|||
# Redistribution and use of this script, with or without modification, is |
|||
# permitted provided that the following conditions are met: |
|||
# |
|||
# 1. Redistributions of this script must retain the above copyright |
|||
# notice, this list of conditions and the following disclaimer. |
|||
# |
|||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |
|||
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
|||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO |
|||
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
|||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
|||
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
|||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
|||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
|||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|||
|
|||
# Modified by Matteo Bernardini <ponce@slackbuilds.org> (2014) |
|||
|
|||
PKGNAM=lxc |
|||
VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | rev | cut -f 2- -d -)} |
|||
BUILD=${BUILD:-4} |
|||
|
|||
# Automatically determine the architecture we're building on: |
|||
if [ -z "$ARCH" ]; then |
|||
case "$( uname -m )" in |
|||
i?86) export ARCH=i586 ;; |
|||
arm*) export ARCH=arm ;; |
|||
# Unless $ARCH is already set, use uname -m for all other archs: |
|||
*) export ARCH=$( uname -m ) ;; |
|||
esac |
|||
fi |
|||
|
|||
NUMJOBS=${NUMJOBS:-" -j7 "} |
|||
|
|||
if [ "$ARCH" = "i586" ]; then |
|||
SLKCFLAGS="-O2 -march=i586 -mtune=i686" |
|||
LIBDIRSUFFIX="" |
|||
elif [ "$ARCH" = "s390" ]; then |
|||
SLKCFLAGS="-O2" |
|||
LIBDIRSUFFIX="" |
|||
elif [ "$ARCH" = "x86_64" ]; then |
|||
SLKCFLAGS="-O2 -fPIC" |
|||
LIBDIRSUFFIX="64" |
|||
else |
|||
SLKCFLAGS="-O2" |
|||
LIBDIRSUFFIX="" |
|||
fi |
|||
|
|||
CWD=$(pwd) |
|||
TMP=${TMP:-/tmp} |
|||
PKG=$TMP/package-$PKGNAM |
|||
|
|||
rm -rf $PKG |
|||
mkdir -p $TMP $PKG |
|||
|
|||
cd $TMP |
|||
rm -rf $PKGNAM-$VERSION |
|||
tar xvf $CWD/$PKGNAM-$VERSION.tar.?z* || exit 1 |
|||
cd $PKGNAM-$VERSION |
|||
|
|||
chown -R root:root . |
|||
find . \ |
|||
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ |
|||
-exec chmod 755 {} \; -o \ |
|||
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ |
|||
-exec chmod 644 {} \; |
|||
|
|||
# Add the template file: |
|||
cat $CWD/lxc-slackware.in > templates/lxc-slackware.in |
|||
|
|||
# Our python package is not split: |
|||
sed -i "s|PKG_CHECK_MODULES(\[PYTHONDEV.*||" configure.ac || exit 1 |
|||
|
|||
autoreconf -fi |
|||
|
|||
# Enable python stuff only if python3 is installed |
|||
python="" |
|||
[ -x /usr/bin/python3 ] && export PYTHON=/usr/bin/python3 && python="--enable-python" |
|||
|
|||
# Configure: |
|||
# lua is autodetected |
|||
CFLAGS="$SLKCFLAGS" \ |
|||
./configure \ |
|||
--prefix=/usr \ |
|||
--sysconfdir=/etc \ |
|||
--libdir=/usr/lib${LIBDIRSUFFIX} \ |
|||
--localstatedir=/var \ |
|||
--mandir=/usr/man \ |
|||
--docdir=/usr/doc/$PKGNAM-$VERSION \ |
|||
--infodir=/usr/info \ |
|||
--with-global-conf=/etc/lxc/lxc.conf \ |
|||
--with-rootfs-path=/var/lib/rootfs-lxc \ |
|||
$python \ |
|||
--build=$ARCH-slackware-linux |
|||
|
|||
# Build and install: |
|||
make $NUMJOBS || make || exit 1 |
|||
make install DESTDIR=$PKG || exit 1 |
|||
|
|||
# Add the modified Slackware startup scripts: |
|||
mkdir -p $PKG/usr/share/lxc/scripts/slackware |
|||
cp -a $CWD/scripts/*.lxc $PKG/usr/share/lxc/scripts/slackware |
|||
chown root:root $PKG/usr/share/lxc/scripts/slackware/* |
|||
chmod 644 $PKG/usr/share/lxc/scripts/slackware/* |
|||
|
|||
# Make the default configuration directories and an empty rootfs folder: |
|||
mkdir -p $PKG/var/lib/lxc $PKG/etc/lxc $PKG/var/lib/rootfs-lxc |
|||
|
|||
# Create a sample default configuration file: |
|||
echo "lxcpath = /var/lib/lxc" > $PKG/etc/lxc/lxc.conf.sample |
|||
|
|||
# Move the other config files to .new: |
|||
mv $PKG/etc/lxc/default.conf $PKG/etc/lxc/default.conf.new |
|||
mv $PKG/etc/default/lxc $PKG/etc/default/lxc.new |
|||
|
|||
# Install an init script (non executable by default): |
|||
install -D -m 0644 $CWD/rc.lxc $PKG/etc/rc.d/rc.lxc.new |
|||
|
|||
# Put bash completion file in system directory: |
|||
mkdir -p $PKG/usr/share/bash-completion/completions/ |
|||
mv $PKG/etc/bash_completion.d/lxc \ |
|||
$PKG/usr/share/bash-completion/completions/lxc |
|||
rmdir --parents $PKG/etc/bash_completion.d 2>/dev/null |
|||
# Replace illegal characters in the bash completion file: |
|||
sed -i "s/lxc-generic-/lxc_generic_/g" $PKG/usr/share/bash-completion/completions/lxc |
|||
|
|||
# Strip binaries: |
|||
( cd $PKG |
|||
find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null |
|||
find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null |
|||
) |
|||
|
|||
# Add a documentation directory: |
|||
mkdir -p $PKG/usr/doc/${PKGNAM}-$VERSION |
|||
cp -a \ |
|||
AUTHORS CONTRIBUTING COPYING* INSTALL MAINTAINERS NEWS README* TODO \ |
|||
doc/FAQ.txt \ |
|||
$PKG/usr/doc/${PKGNAM}-$VERSION |
|||
|
|||
mkdir -p $PKG/usr/doc/${PKGNAM}-$VERSION/examples |
|||
cp -a doc/examples/*.conf $PKG/usr/doc/${PKGNAM}-$VERSION/examples |
|||
|
|||
# Fix up man pages to stop 'man' from barfing a warning: |
|||
( cd $PKG/usr/man |
|||
fgrep -lr -- '-*- coding: us-ascii -*-' . | xargs sed -i '/-*- coding: us-ascii -*-/d' ) |
|||
|
|||
# Compress and if needed symlink the man pages: |
|||
if [ -d $PKG/usr/man ]; then |
|||
( cd $PKG/usr/man |
|||
for manpagedir in $(find . -type d -name "man*") ; do |
|||
( cd $manpagedir |
|||
for eachpage in $( find . -type l -maxdepth 1) ; do |
|||
ln -s $( readlink $eachpage ).gz $eachpage.gz |
|||
rm $eachpage |
|||
done |
|||
gzip -9 *.? |
|||
) |
|||
done |
|||
) |
|||
fi |
|||
|
|||
# If there's a ChangeLog, installing at least part of the recent history |
|||
# is useful, but don't let it get totally out of control: |
|||
if [ -r ChangeLog ]; then |
|||
DOCSDIR=$(echo $PKG/usr/doc/${PKGNAM}-$VERSION) |
|||
cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog |
|||
touch -r ChangeLog $DOCSDIR/ChangeLog |
|||
fi |
|||
|
|||
mkdir -p $PKG/install |
|||
cat $CWD/slack-desc > $PKG/install/slack-desc |
|||
cat $CWD/doinst.sh > $PKG/install/doinst.sh |
|||
|
|||
cd $PKG |
|||
/sbin/makepkg -l y -c n $TMP/$PKGNAM-$(echo $VERSION | tr - _)-$ARCH-$BUILD.txz |
|||
|
@ -0,0 +1,63 @@ |
|||
#!/bin/sh |
|||
# rc.lxc init script |
|||
# Written by Matteo Bernardini <ponce@slackbuilds.org> |
|||
# |
|||
# This script checks for the presence of the parameter lxc.start.auto |
|||
# in the available container configurations: if it's set to 1 the |
|||
# container is started (in an auto-detached screen session if |
|||
# screen is available) when rc.lxc is called with the "start" param. |
|||
# |
|||
# To stop the container it uses lxc-attach to execute /sbin/halt |
|||
# inside of it. |
|||
|
|||
. /usr/share/lxc/lxc.functions |
|||
|
|||
start_lxc() { |
|||
for CONTAIN in $(/usr/bin/lxc-ls); do |
|||
if [ "$(lxc-info -n $CONTAIN -c lxc.start.auto)" = "lxc.start.auto = 1" ]; then |
|||
if [ "$(/usr/bin/lxc-info -s -n $CONTAIN | grep STOPPED$)" ]; then |
|||
echo "Starting LXC container ${CONTAIN}." |
|||
if [ -x /usr/bin/screen ]; then |
|||
/usr/bin/screen -dmS init-${CONTAIN} /usr/bin/lxc-start -n $CONTAIN |
|||
else |
|||
/usr/bin/lxc-start -n $CONTAIN -d |
|||
fi |
|||
/usr/bin/lxc-wait -n $CONTAIN -s RUNNING |
|||
if [ $? -gt 0 ]; then |
|||
return 2 |
|||
fi |
|||
fi |
|||
fi |
|||
done |
|||
} |
|||
|
|||
stop_lxc() { |
|||
for CONTAIN in $(/usr/bin/lxc-ls --active); do |
|||
echo "Stopping LXC container ${CONTAIN}." |
|||
/usr/bin/lxc-stop -n $CONTAIN |
|||
/usr/bin/lxc-wait -n $CONTAIN -s STOPPED |
|||
if [ $? -gt 0 ]; then |
|||
return 2 |
|||
fi |
|||
done |
|||
} |
|||
|
|||
restart_lxc() { |
|||
stop_lxc |
|||
sleep 2 |
|||
start_lxc |
|||
} |
|||
|
|||
case "$1" in |
|||
'start') |
|||
start_lxc |
|||
;; |
|||
'stop') |
|||
stop_lxc |
|||
;; |
|||
restart) |
|||
restart_lxc |
|||
;; |
|||
*) |
|||
echo "usage $0 start|stop|restart" |
|||
esac |
@ -1,15 +0,0 @@ |
|||
This repo contains all my slackware modifications of the base install. |
|||
Additional packages are contained in RocketLinux and built in a non-standard manner. |
|||
|
|||
This branch contains a few scripts I use, related to slackware. |
|||
|
|||
- kernel.SlackBuild is capable of building a near-identical slackware kernel |
|||
- convert32pkg.sh converts a 32bit package to be installable on 64bit (by |
|||
removing everything present in the 64bit package). |
|||
It is only designed to support some packages in the official slackware iso, |
|||
because there's all kinds of packages that need special treatment, |
|||
especially for their doinst.sh scripts. |
|||
- massconvert32.sh calls convert32pkg.sh over an entire package directory |
|||
- update-repo.sh is my shitty implementation of a slackware repo generator, |
|||
that tries to generate everything as close to the official slackware repo as |
|||
possible. |
@ -0,0 +1,11 @@ |
|||
These are modified versions of some sysvinit-scripts and network-scripts for |
|||
Slackware for use in a container (although they should also work for a regular |
|||
non-container system as well). |
|||
|
|||
Versions ending in .lxc are the scripts to be used in a container. |
|||
Versions ending in .orig are the scripts from the sysvinit-scripts and |
|||
network-scripts packages that the .lxc scripts are based on. |
|||
|
|||
Any changes made to the original scripts in sysvinit-scripts or network-scripts |
|||
*may* need to be ported to these versions. |
|||
|
@ -0,0 +1,316 @@ |
|||
#! /bin/sh |
|||
# |
|||
# rc.6 This file is executed by init when it goes into runlevel |
|||
# 0 (halt) or runlevel 6 (reboot). It kills all processes, |
|||
# unmounts file systems and then either halts or reboots. |
|||
# |
|||
# Version: @(#)/etc/rc.d/rc.6 2.47 Sat Jan 13 13:37:26 PST 2001 |
|||
# |
|||
# Author: Miquel van Smoorenburg <miquels@drinkel.nl.mugnet.org> |
|||
# Modified by: Patrick J. Volkerding, <volkerdi@slackware.com> |
|||
# |
|||
|
|||
# Set the path. |
|||
PATH=/sbin:/etc:/bin:/usr/bin |
|||
|
|||
# Set $container variable since this is a modified version of rc.6 with |
|||
# changes for running in an lxc container. A check to see if this variable |
|||
# is set will be used to skip parts of the script that we don't want to run |
|||
# in a container. Thanks to Matteo Bernardini <ponce@slackbuilds.org> and |
|||
# Chris Willing for the initial work making this script lxc compatible. |
|||
container="lxc" |
|||
|
|||
# If there are SystemV init scripts for this runlevel, run them. |
|||
if [ -x /etc/rc.d/rc.sysvinit ]; then |
|||
. /etc/rc.d/rc.sysvinit |
|||
fi |
|||
|
|||
# Set linefeed mode to avoid staircase effect. |
|||
/bin/stty onlcr |
|||
|
|||
echo "Running shutdown script $0:" |
|||
|
|||
# Find out how we were called. |
|||
case "$0" in |
|||
*0) |
|||
shutdown_command="halt" |
|||
;; |
|||
*6) |
|||
shutdown_command=reboot |
|||
;; |
|||
*) |
|||
echo "$0: call me as \"rc.0\" or \"rc.6\" please!" |
|||
exit 1 |
|||
;; |
|||
esac |
|||
|
|||
# Save the system time to the hardware clock using hwclock --systohc. |
|||
# This will also create or update the timestamps in /etc/adjtime. |
|||
if [ -x /sbin/hwclock -a -z "$container" ]; then |
|||
# Check for a broken motherboard RTC clock (where ioports for rtc are |
|||
# unknown) to prevent hwclock causing a hang: |
|||
if ! grep -q " : rtc" /proc/ioports ; then |
|||
CLOCK_OPT="--directisa" |
|||
fi |
|||
if [ /etc/adjtime -nt /etc/hardwareclock ]; then |
|||
if grep -q "^LOCAL" /etc/adjtime ; then |
|||
echo "Saving system time to the hardware clock (localtime)." |
|||
else |
|||
echo "Saving system time to the hardware clock (UTC)." |
|||
fi |
|||
/sbin/hwclock $CLOCK_OPT --systohc |
|||
elif grep -q "^UTC" /etc/hardwareclock 2> /dev/null ; then |
|||
echo "Saving system time to the hardware clock (UTC)." |
|||
if [ ! -r /etc/adjtime ]; then |
|||
echo "Creating system time correction file /etc/adjtime." |
|||
fi |
|||
/sbin/hwclock $CLOCK_OPT --utc --systohc |
|||
else |
|||
echo "Saving system time to the hardware clock (localtime)." |
|||
if [ ! -r /etc/adjtime ]; then |
|||
echo "Creating system time correction file /etc/adjtime." |
|||
fi |
|||
/sbin/hwclock $CLOCK_OPT --localtime --systohc |
|||
fi |
|||
fi |
|||
|
|||
# Run any local shutdown scripts: |
|||
if [ -x /etc/rc.d/rc.local_shutdown ]; then |
|||
/etc/rc.d/rc.local_shutdown stop |
|||
fi |
|||
|
|||
# Stop the Apache web server: |
|||
if [ -x /etc/rc.d/rc.httpd ]; then |
|||
/etc/rc.d/rc.httpd stop |
|||
fi |
|||
|
|||
# Stop the MySQL database: |
|||
if [ -r /var/run/mysql/mysql.pid ]; then |
|||
. /etc/rc.d/rc.mysqld stop |
|||
fi |
|||
|
|||
# Stop the Samba server: |
|||
if [ -x /etc/rc.d/rc.samba ]; then |
|||
. /etc/rc.d/rc.samba stop |
|||
fi |
|||
|
|||
# Shut down the NFS server: |
|||
if [ -x /etc/rc.d/rc.nfsd ]; then |
|||
/etc/rc.d/rc.nfsd stop |
|||
fi |
|||
|
|||
# Shut down the SSH server: |
|||
if [ -x /etc/rc.d/rc.sshd ]; then |
|||
/etc/rc.d/rc.sshd stop |
|||
fi |
|||
|
|||
# Shut down the SASL authentication daemon: |
|||
if [ -x /etc/rc.d/rc.saslauthd ]; then |
|||
/etc/rc.d/rc.saslauthd stop |
|||
fi |
|||
|
|||
# Shut down OpenLDAP: |
|||
if [ -x /etc/rc.d/rc.openldap ]; then |
|||
/etc/rc.d/rc.openldap stop |
|||
fi |
|||
|
|||
# Stop D-Bus: |
|||
if [ -x /etc/rc.d/rc.messagebus ]; then |
|||
sh /etc/rc.d/rc.messagebus stop |
|||
fi |
|||
|
|||
# Kill any processes (typically gam) that would otherwise prevent |
|||
# unmounting NFS volumes: |
|||
unset FUSER_DELAY |
|||
for dir in $(/bin/mount | grep 'type nfs ' | cut -d ' ' -f 3 ) ; do |
|||
echo "Killing processes holding NFS mount $dir open..." |
|||
# Background this to prevent fuser from also blocking shutdown: |
|||
/usr/bin/fuser -k -m $dir & |
|||
FUSER_DELAY=5 |
|||
done |
|||
# If fuser was run, let it have some delay: |
|||
if [ ! -z "$FUSER_DELAY" ]; then |
|||
sleep $FUSER_DELAY |
|||
fi |
|||
|
|||
# Unmount any NFS, SMB, or CIFS filesystems: |
|||
echo "Unmounting remote filesystems:" |
|||
/bin/umount -v -a -l -f -r -t nfs,smbfs,cifs | tr -d ' ' | grep successfully | sed "s/:successfullyunmounted/ has been successfully unmounted./g" |
|||
|
|||
# Try to shut down pppd: |
|||
PS="$(ps ax)" |
|||
if echo "$PS" | /bin/grep -q -w pppd ; then |
|||
if [ -x /usr/sbin/ppp-off ]; then |
|||
/usr/sbin/ppp-off |
|||
fi |
|||
fi |
|||
|
|||
# Shut down YP services: |
|||
if [ -x /etc/rc.d/rc.yp ]; then |
|||
if grep -wq stop /etc/rc.d/rc.yp ; then |
|||
/etc/rc.d/rc.yp stop |
|||
fi |
|||
fi |
|||
|
|||
# Bring down the networking system, but first make sure that this |
|||
# isn't a diskless client with the / partition mounted via NFS: |
|||
if ! /bin/mount | /bin/grep -q 'on / type nfs' ; then |
|||
if [ -x /etc/rc.d/rc.inet1 ]; then |
|||
. /etc/rc.d/rc.inet1 stop |
|||
fi |
|||
fi |
|||
|
|||
# In case dhcpcd might have been manually started on the command line, |
|||
# look for the .pid file, and shut dhcpcd down if it's found: |
|||
if /bin/ls /etc/dhcpc/*.pid 1> /dev/null 2> /dev/null ; then |
|||
/sbin/dhcpcd -k 1> /dev/null 2> /dev/null |
|||
# A little time for /etc/resolv.conf and/or other files to |
|||
# restore themselves. |
|||
sleep 2 |
|||
fi |
|||
|
|||
# Shut down PCMCIA devices: |
|||
if [ -x /etc/rc.d/rc.pcmcia -a -z "$container" ]; then |
|||
. /etc/rc.d/rc.pcmcia stop |
|||
# The cards might need a little extra time here to deactivate: |
|||
/bin/sleep 5 |
|||
fi |
|||
|
|||
# Turn off process accounting: |
|||
if [ -x /sbin/accton -a -r /var/log/pacct ]; then |
|||
/sbin/accton off |
|||
fi |
|||
|
|||
# Terminate acpid before syslog: |
|||
if [ -x /etc/rc.d/rc.acpid -a -r /var/run/acpid.pid -a -z "$container" ]; then # quit |
|||
. /etc/rc.d/rc.acpid stop |
|||
fi |
|||
|
|||
# Stop udev: |
|||
if [ -x /etc/rc.d/rc.udev -a -z "$container" ]; then |
|||
sh /etc/rc.d/rc.udev force-stop |
|||
fi |
|||
|
|||
# Kill all remaining processes. |
|||
OMITPIDS="$(for p in $(pgrep mdmon); do echo -o $p; done)" # Don't kill mdmon |
|||
if [ ! "$1" = "fast" ]; then |
|||
echo "Sending all processes the SIGTERM signal." |
|||
/sbin/killall5 -15 $OMITPIDS |
|||
/bin/sleep 5 |
|||
echo "Sending all processes the SIGKILL signal." |
|||
/sbin/killall5 -9 $OMITPIDS |
|||
fi |
|||
|
|||
# Try to turn off quota. |
|||
if /bin/grep -q quota /etc/fstab ; then |
|||
if [ -x /sbin/quotaoff -a -z "$container" ]; then |
|||
echo "Turning off filesystem quotas." |
|||
/sbin/quotaoff -a |
|||
fi |
|||
fi |
|||
|
|||
# Carry a random seed between reboots. |
|||
echo "Saving random seed from /dev/urandom in /etc/random-seed." |
|||
# Use the pool size from /proc, or 4096 bits: |
|||
if [ -r /proc/sys/kernel/random/poolsize ]; then |
|||
/bin/dd if=/dev/urandom of=/etc/random-seed count=1 bs=$(expr $(cat /proc/sys/kernel/random/poolsize) / 8) 2> /dev/null |
|||
else |
|||
/bin/dd if=/dev/urandom of=/etc/random-seed count=1 bs=512 2> /dev/null |
|||
fi |
|||
/bin/chmod 600 /etc/random-seed |
|||
|
|||
# Before unmounting file systems write a reboot or halt record to wtmp. |
|||
$shutdown_command -w |
|||
|
|||
# Turn off swap: |
|||
if [ -z "$container" ]; then |
|||
echo "Turning off swap." |
|||
/sbin/swapoff -a |
|||
/bin/sync |
|||
fi |
|||
|
|||
# Stop cgmanager and cgproxy: |
|||
if [ -x /etc/rc.d/rc.cgmanager -a -z "$container" ]; then |
|||
sh /etc/rc.d/rc.cgmanager stop |
|||
fi |
|||
|
|||
if [ -z "$container" ]; then |
|||
echo "Unmounting local file systems:" |
|||
/bin/umount -v -a -t no,proc,sysfs | tr -d ' ' | grep successfully | sed "s/:successfullyunmounted/ has been successfully unmounted./g" 2> /dev/null |
|||
echo "Remounting root filesystem read-only:" |
|||
/bin/mount -v -n -o remount,ro / |
|||
fi |
|||
|
|||
# This never hurts: |
|||
/bin/sync |
|||
|
|||
# Close any volumes opened by cryptsetup: |
|||
if [ -f /etc/crypttab -a -x /sbin/cryptsetup ]; then |
|||
cat /etc/crypttab | grep -v "^#" | grep -v "^$" | while read line; do |
|||
# NOTE: we only support LUKS formatted volumes (except for swap)! |
|||
LUKS=$(echo $line | tr '\t' ' ' | tr -s ' ' | cut -f1 -d' ') |
|||
DEV=$(echo $line | tr '\t' ' ' | tr -s ' ' | cut -f2 -d' ') |
|||
OPTS=$(echo $line | tr '\t' ' ' | tr -s ' ' | cut -f4 -d' ') |
|||
if /sbin/cryptsetup isLuks $DEV 2>/dev/null ; then |
|||
echo "Locking LUKS crypt volume '${LUKS}':" |
|||
/sbin/cryptsetup luksClose ${LUKS} |
|||
elif echo $OPTS | grep -wq swap ; then |
|||
# If any of the volumes was used as encrypted swap, |
|||
# then run mkswap on the underlying device - |
|||
# in case other Linux installations on this computer should use it: |
|||
echo "Erasing encrypted swap '${LUKS}' and restoring normal swap on ${DEV}:" |
|||
/sbin/cryptsetup remove ${LUKS} |
|||
mkswap $DEV |
|||
fi |
|||
done |
|||
fi |
|||
|
|||
# Deactivate LVM volume groups: |
|||
if [ -z "$container" ]; then |
|||
if [ -r /etc/lvmtab -o -d /etc/lvm/backup ]; then |
|||
echo "Deactivating LVM volume groups:" |
|||
/sbin/vgchange -an --ignorelockingfailure |
|||
fi |
|||
fi |
|||
|
|||
# This never hurts again (especially since root-on-LVM always fails |
|||
# to deactivate the / logical volume... but at least it was |
|||
# remounted as read-only first) |
|||
/bin/sync |
|||
|
|||
# sleep 3 fixes problems with some hard drives that don't |
|||
# otherwise finish syncing before reboot or poweroff |
|||
/bin/sleep 3 |
|||
|
|||
# This is to ensure all processes have completed on SMP machines: |
|||
wait |
|||
|
|||
if [ -x /sbin/genpowerd -a -z "$container" ]; then |
|||
# See if this is a powerfail situation: |
|||
if /bin/egrep -q "FAIL|SCRAM" /etc/upsstatus 2> /dev/null ; then |
|||
# Signal UPS to shut off the inverter: |
|||
/sbin/genpowerd -k |
|||
if [ ! $? = 0 ]; then |
|||
echo |
|||
echo "There was an error signaling the UPS." |
|||
echo "Perhaps you need to edit /etc/genpowerd.conf to configure" |
|||
echo "the serial line and UPS type." |
|||
# Wasting 15 seconds of precious power: |
|||
/bin/sleep 15 |
|||
fi |
|||
fi |
|||
fi |
|||
|
|||
if [ "$container" = "lxc" ]; then |
|||
# confirm successful shutdown of the container |
|||
echo "LXC container stopped." |
|||
fi |
|||
|
|||
# Now halt (poweroff with APM or ACPI enabled kernels) or reboot. |
|||
if [ "$shutdown_command" = "reboot" ]; then |
|||
echo "Rebooting." |
|||
/sbin/reboot |
|||
else |
|||
/sbin/poweroff |
|||
fi |
|||
|
@ -0,0 +1,299 @@ |
|||
#! /bin/sh |
|||
# |
|||
# rc.6 This file is executed by init when it goes into runlevel |
|||
# 0 (halt) or runlevel 6 (reboot). It kills all processes, |
|||
# unmounts file systems and then either halts or reboots. |
|||
# |
|||
# Version: @(#)/etc/rc.d/rc.6 2.47 Sat Jan 13 13:37:26 PST 2001 |
|||
# |
|||
# Author: Miquel van Smoorenburg <miquels@drinkel.nl.mugnet.org> |
|||
# Modified by: Patrick J. Volkerding, <volkerdi@slackware.com> |
|||
# |
|||
|
|||
# Set the path. |
|||
PATH=/sbin:/etc:/bin:/usr/bin |
|||
|
|||
# If there are SystemV init scripts for this runlevel, run them. |
|||
if [ -x /etc/rc.d/rc.sysvinit ]; then |
|||
. /etc/rc.d/rc.sysvinit |
|||
fi |
|||
|
|||
# Set linefeed mode to avoid staircase effect. |
|||
/bin/stty onlcr |
|||
|
|||
echo "Running shutdown script $0:" |
|||
|
|||
# Find out how we were called. |
|||
case "$0" in |
|||
*0) |
|||
shutdown_command="halt" |
|||
;; |
|||
*6) |
|||
shutdown_command=reboot |
|||
;; |
|||
*) |
|||
echo "$0: call me as \"rc.0\" or \"rc.6\" please!" |
|||
exit 1 |
|||
;; |
|||
esac |
|||
|
|||
# Save the system time to the hardware clock using hwclock --systohc. |
|||
# This will also create or update the timestamps in /etc/adjtime. |
|||
if [ -x /sbin/hwclock ]; then |
|||
# Check for a broken motherboard RTC clock (where ioports for rtc are |
|||
# unknown) to prevent hwclock causing a hang: |
|||
if ! grep -q " : rtc" /proc/ioports ; then |
|||
CLOCK_OPT="--directisa" |
|||
fi |
|||
if [ /etc/adjtime -nt /etc/hardwareclock ]; then |
|||
if grep -q "^LOCAL" /etc/adjtime ; then |
|||
echo "Saving system time to the hardware clock (localtime)." |
|||
else |
|||
echo "Saving system time to the hardware clock (UTC)." |
|||
fi |
|||
/sbin/hwclock $CLOCK_OPT --systohc |
|||
elif grep -q "^UTC" /etc/hardwareclock 2> /dev/null ; then |
|||
echo "Saving system time to the hardware clock (UTC)." |
|||
if [ ! -r /etc/adjtime ]; then |
|||
echo "Creating system time correction file /etc/adjtime." |
|||
fi |
|||
/sbin/hwclock $CLOCK_OPT --utc --systohc |
|||
else |
|||
echo "Saving system time to the hardware clock (localtime)." |
|||
if [ ! -r /etc/adjtime ]; then |
|||
echo "Creating system time correction file /etc/adjtime." |
|||
fi |
|||
/sbin/hwclock $CLOCK_OPT --localtime --systohc |
|||
fi |
|||
fi |
|||
|
|||
# Run any local shutdown scripts: |
|||
if [ -x /etc/rc.d/rc.local_shutdown ]; then |
|||
/etc/rc.d/rc.local_shutdown stop |
|||
fi |
|||
|
|||
# Stop the Apache web server: |
|||
if [ -x /etc/rc.d/rc.httpd ]; then |
|||
/etc/rc.d/rc.httpd stop |
|||
fi |
|||
|
|||
# Stop the MySQL database: |
|||
if [ -r /var/run/mysql/mysql.pid ]; then |
|||
. /etc/rc.d/rc.mysqld stop |
|||
fi |
|||
|
|||
# Stop the Samba server: |
|||
if [ -x /etc/rc.d/rc.samba ]; then |
|||
. /etc/rc.d/rc.samba stop |
|||
fi |
|||
|
|||
# Shut down the NFS server: |
|||
if [ -x /etc/rc.d/rc.nfsd ]; then |
|||
/etc/rc.d/rc.nfsd stop |
|||
fi |
|||
|
|||
# Shut down the SSH server: |
|||
if [ -x /etc/rc.d/rc.sshd ]; then |
|||
/etc/rc.d/rc.sshd stop |
|||
fi |
|||
|
|||
# Shut down the SASL authentication daemon: |
|||
if [ -x /etc/rc.d/rc.saslauthd ]; then |
|||
/etc/rc.d/rc.saslauthd stop |
|||
fi |
|||
|
|||
# Shut down OpenLDAP: |
|||
if [ -x /etc/rc.d/rc.openldap ]; then |
|||
/etc/rc.d/rc.openldap stop |
|||
fi |
|||
|
|||
# Stop D-Bus: |
|||
if [ -x /etc/rc.d/rc.messagebus ]; then |
|||
sh /etc/rc.d/rc.messagebus stop |
|||
fi |
|||
|
|||
# Kill any processes (typically gam) that would otherwise prevent |
|||
# unmounting NFS volumes: |
|||
unset FUSER_DELAY |
|||
for dir in $(/bin/mount | grep 'type nfs ' | cut -d ' ' -f 3 ) ; do |
|||
echo "Killing processes holding NFS mount $dir open..." |
|||
# Background this to prevent fuser from also blocking shutdown: |
|||
/usr/bin/fuser -k -m $dir & |
|||
FUSER_DELAY=5 |
|||
done |
|||
# If fuser was run, let it have some delay: |
|||
if [ ! -z "$FUSER_DELAY" ]; then |
|||
sleep $FUSER_DELAY |
|||
fi |
|||
|
|||
# Unmount any NFS, SMB, or CIFS filesystems: |
|||
echo "Unmounting remote filesystems:" |
|||
/bin/umount -v -a -l -f -r -t nfs,smbfs,cifs | tr -d ' ' | grep successfully | sed "s/:successfullyunmounted/ has been successfully unmounted./g" |
|||
|
|||
# Try to shut down pppd: |
|||
PS="$(ps ax)" |
|||
if echo "$PS" | /bin/grep -q -w pppd ; then |
|||
if [ -x /usr/sbin/ppp-off ]; then |
|||
/usr/sbin/ppp-off |
|||
fi |
|||
fi |
|||
|
|||
# Shut down YP services: |
|||
if [ -x /etc/rc.d/rc.yp ]; then |
|||
if grep -wq stop /etc/rc.d/rc.yp ; then |
|||
/etc/rc.d/rc.yp stop |
|||
fi |
|||
fi |
|||
|
|||
# Bring down the networking system, but first make sure that this |
|||
# isn't a diskless client with the / partition mounted via NFS: |
|||
if ! /bin/mount | /bin/grep -q 'on / type nfs' ; then |
|||
if [ -x /etc/rc.d/rc.inet1 ]; then |
|||
. /etc/rc.d/rc.inet1 stop |
|||
fi |
|||
fi |
|||
|
|||
# In case dhcpcd might have been manually started on the command line, |
|||
# look for the .pid file, and shut dhcpcd down if it's found: |
|||
if /bin/ls /etc/dhcpc/*.pid 1> /dev/null 2> /dev/null ; then |
|||
/sbin/dhcpcd -k 1> /dev/null 2> /dev/null |
|||
# A little time for /etc/resolv.conf and/or other files to |
|||
# restore themselves. |
|||
sleep 2 |
|||
fi |
|||
|
|||
# Shut down PCMCIA devices: |
|||
if [ -x /etc/rc.d/rc.pcmcia ]; then |
|||
. /etc/rc.d/rc.pcmcia stop |
|||
# The cards might need a little extra time here to deactivate: |
|||
/bin/sleep 5 |
|||
fi |
|||
|
|||
# Turn off process accounting: |
|||
if [ -x /sbin/accton -a -r /var/log/pacct ]; then |
|||
/sbin/accton off |
|||
fi |
|||
|
|||
# Terminate acpid before syslog: |
|||
if [ -x /etc/rc.d/rc.acpid -a -r /var/run/acpid.pid ]; then # quit |
|||
. /etc/rc.d/rc.acpid stop |
|||
fi |
|||
|
|||
# Stop udev: |
|||
if [ -x /etc/rc.d/rc.udev ]; then |
|||
sh /etc/rc.d/rc.udev force-stop |
|||
fi |
|||
|
|||
# Kill all remaining processes. |
|||
OMITPIDS="$(for p in $(pgrep mdmon); do echo -o $p; done)" # Don't kill mdmon |
|||
if [ ! "$1" = "fast" ]; then |
|||
echo "Sending all processes the SIGTERM signal." |
|||
/sbin/killall5 -15 $OMITPIDS |
|||
/bin/sleep 5 |
|||
echo "Sending all processes the SIGKILL signal." |
|||
/sbin/killall5 -9 $OMITPIDS |
|||
fi |
|||
|
|||
# Try to turn off quota. |
|||
if /bin/grep -q quota /etc/fstab ; then |
|||
if [ -x /sbin/quotaoff ]; then |
|||
echo "Turning off filesystem quotas." |
|||
/sbin/quotaoff -a |
|||
fi |
|||
fi |
|||
|
|||
# Carry a random seed between reboots. |
|||
echo "Saving random seed from /dev/urandom in /etc/random-seed." |
|||
# Use the pool size from /proc, or 4096 bits: |
|||
if [ -r /proc/sys/kernel/random/poolsize ]; then |
|||
/bin/dd if=/dev/urandom of=/etc/random-seed count=1 bs=$(expr $(cat /proc/sys/kernel/random/poolsize) / 8) 2> /dev/null |
|||
else |
|||
/bin/dd if=/dev/urandom of=/etc/random-seed count=1 bs=512 2> /dev/null |
|||
fi |
|||
/bin/chmod 600 /etc/random-seed |
|||
|
|||
# Before unmounting file systems write a reboot or halt record to wtmp. |
|||
$shutdown_command -w |
|||
|
|||
# Turn off swap: |
|||
echo "Turning off swap." |
|||
/sbin/swapoff -a |
|||
/bin/sync |
|||
|
|||
# Stop cgmanager and cgproxy: |
|||
if [ -x /etc/rc.d/rc.cgmanager ]; then |
|||
sh /etc/rc.d/rc.cgmanager stop |
|||
fi |
|||
|
|||
echo "Unmounting local file systems:" |
|||
/bin/umount -v -a -t no,proc,sysfs | tr -d ' ' | grep successfully | sed "s/:successfullyunmounted/ has been successfully unmounted./g" 2> /dev/null |
|||
|
|||
echo "Remounting root filesystem read-only:" |
|||
/bin/mount -v -n -o remount,ro / |
|||
|
|||
# This never hurts: |
|||
/bin/sync |
|||
|
|||
# Close any volumes opened by cryptsetup: |
|||
if [ -f /etc/crypttab -a -x /sbin/cryptsetup ]; then |
|||
cat /etc/crypttab | grep -v "^#" | grep -v "^$" | while read line; do |
|||
# NOTE: we only support LUKS formatted volumes (except for swap)! |
|||
LUKS=$(echo $line | tr '\t' ' ' | tr -s ' ' | cut -f1 -d' ') |
|||
DEV=$(echo $line | tr '\t' ' ' | tr -s ' ' | cut -f2 -d' ') |
|||
OPTS=$(echo $line | tr '\t' ' ' | tr -s ' ' | cut -f4 -d' ') |
|||
if /sbin/cryptsetup isLuks $DEV 2>/dev/null ; then |
|||
echo "Locking LUKS crypt volume '${LUKS}':" |
|||
/sbin/cryptsetup luksClose ${LUKS} |
|||
elif echo $OPTS | grep -wq swap ; then |
|||
# If any of the volumes was used as encrypted swap, |
|||
# then run mkswap on the underlying device - |
|||
# in case other Linux installations on this computer should use it: |
|||
echo "Erasing encrypted swap '${LUKS}' and restoring normal swap on ${DEV}:" |
|||
/sbin/cryptsetup remove ${LUKS} |
|||
mkswap $DEV |
|||
fi |
|||
done |
|||
fi |
|||
|
|||
# Deactivate LVM volume groups: |
|||
if [ -r /etc/lvmtab -o -d /etc/lvm/backup ]; then |
|||
echo "Deactivating LVM volume groups:" |
|||
/sbin/vgchange -an --ignorelockingfailure |
|||
fi |
|||
|
|||
# This never hurts again (especially since root-on-LVM always fails |
|||
# to deactivate the / logical volume... but at least it was |
|||
# remounted as read-only first) |
|||
/bin/sync |
|||
|
|||
# sleep 3 fixes problems with some hard drives that don't |
|||
# otherwise finish syncing before reboot or poweroff |
|||
/bin/sleep 3 |
|||
|
|||
# This is to ensure all processes have completed on SMP machines: |
|||
wait |
|||
|
|||
if [ -x /sbin/genpowerd ]; then |
|||
# See if this is a powerfail situation: |
|||
if /bin/egrep -q "FAIL|SCRAM" /etc/upsstatus 2> /dev/null ; then |
|||
# Signal UPS to shut off the inverter: |
|||
/sbin/genpowerd -k |
|||
if [ ! $? = 0 ]; then |
|||
echo |
|||
echo "There was an error signaling the UPS." |
|||
echo "Perhaps you need to edit /etc/genpowerd.conf to configure" |
|||
echo "the serial line and UPS type." |
|||
# Wasting 15 seconds of precious power: |
|||
/bin/sleep 15 |
|||
fi |
|||
fi |
|||
fi |
|||
|
|||
# Now halt (poweroff with APM or ACPI enabled kernels) or reboot. |
|||
if [ "$shutdown_command" = "reboot" ]; then |
|||
echo "Rebooting." |
|||
/sbin/reboot |
|||
else |
|||
/sbin/poweroff |
|||
fi |
|||
|
@ -0,0 +1,397 @@ |
|||
#!/bin/sh |
|||
# |
|||
# rc.M This file is executed by init(8) when the system is being |
|||
# initialized for one of the "multi user" run levels (i.e. |
|||
# levels 1 through 6). It usually does mounting of file |
|||
# systems et al. |
|||
# |
|||
# Version: @(#)/etc/rc.d/rc.M 2.23 Wed Feb 26 19:20:58 PST 2003 |
|||
# |
|||
# Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org> |
|||
# Heavily modified by Patrick Volkerding <volkerdi@slackware.com> |
|||
# |
|||
|
|||
# Tell the viewers what's going to happen. |
|||
echo "Going multiuser..." |
|||
|
|||
# Set $container variable since this is a modified version of rc.M with |
|||
# changes for running in an lxc container. A check to see if this variable |
|||
# is set will be used to skip parts of the script that we don't want to run |
|||
# in a container. Thanks to Matteo Bernardini <ponce@slackbuilds.org> and |
|||
# Chris Willing for the initial work making this script lxc compatible. |
|||
container="lxc" |
|||
|
|||
# Update all the shared library links: |
|||
if [ -x /sbin/ldconfig ]; then |
|||
echo "Updating shared library links: /sbin/ldconfig &" |
|||
/sbin/ldconfig & |
|||
fi |
|||
|
|||
# Screen blanks after 15 minutes idle time, and powers down in one hour |
|||
# if the kernel supports APM or ACPI power management: |
|||
if [ -z "$container" ]; then |
|||
/bin/setterm -blank 15 -powersave powerdown -powerdown 60 |
|||
fi |
|||
|
|||
# Set the hostname. |
|||
if [ -z "$container" ]; then |
|||
if [ -r /etc/HOSTNAME ]; then |
|||
/bin/hostname $(cat /etc/HOSTNAME | cut -f1 -d .) |
|||
else |
|||
# fall back on this old default: |
|||
echo "darkstar.example.net" > /etc/HOSTNAME |
|||
/bin/hostname darkstar |
|||
fi |
|||
fi |
|||
|
|||
# Set the permissions on /var/log/dmesg according to whether the kernel |
|||
# permits non-root users to access kernel dmesg information: |
|||
if [ -r /proc/sys/kernel/dmesg_restrict ]; then |
|||
if [ $(cat /proc/sys/kernel/dmesg_restrict) = 1 ]; then |
|||
touch /var/log/dmesg |
|||
chmod 640 /var/log/dmesg |
|||
fi |
|||
else |
|||
touch /var/log/dmesg |
|||
chmod 644 /var/log/dmesg |
|||
fi |
|||
# Save the contents of 'dmesg': |
|||
/bin/dmesg -s 65536 > /var/log/dmesg |
|||
|
|||
# Initialize PCMCIA devices: |
|||
# |
|||
# NOTE: This used to be started near the top of rc.S so that PCMCIA devices |
|||
# could be fsck'ed along with the other drives. This had some unfortunate |
|||
# side effects, however, since root isn't yet read-write, and /var might not |
|||
# even be mounted the .pid files can't be correctly written in /var/run and |
|||
# the pcmcia system can't be correctly shut down. If you want some PCMCIA |
|||
# partition to be mounted at boot (or when the card is inserted) then add |
|||
# the appropriate lines to /etc/pcmcia/scsi.opts. |
|||
# |
|||
# Note that the stuff in /etc/pcmcia/ is only for 2.4.x kernels using |
|||
# 16-bit PCMCIA cards (not 32-bit Cardbus cards!). For example, with a |
|||
# wireless card you might need to set options in /etc/pcmcia OR in |
|||
# /etc/rc.d/rc.wireless.conf, or even in /etc/rc.d/rc.inet1.conf (with |
|||
# extra options if needed for the encryption key, ESSID, etc.) |
|||
# |
|||
# Hopefully this situation will be unified in the future, but for now |
|||
# that's how it is... |
|||
# |
|||
if [ -x /etc/rc.d/rc.pcmcia -a -z "$container" ]; then |
|||
. /etc/rc.d/rc.pcmcia start |
|||
# The cards might need a little extra time here to initialize. |
|||
sleep 5 |
|||
fi |
|||
|
|||
# Start the system logger. |
|||
if [ -x /etc/rc.d/rc.syslog -a -x /usr/sbin/syslogd -a -d /var/log ]; then |
|||
. /etc/rc.d/rc.syslog start |
|||
fi |
|||
|
|||
# Update the X font indexes: |
|||
if [ -x /usr/bin/fc-cache ]; then |
|||
echo "Updating X font indexes: /usr/bin/fc-cache -f &" |
|||
/usr/bin/fc-cache -f & |
|||
fi |
|||
|
|||
# Run rc.udev again. This will start udev if it is not already running |
|||
# (for example, upon return from runlevel 1), otherwise it will trigger it |
|||
# to look for device changes and to generate persistent rules if needed. |
|||
if grep -wq sysfs /proc/mounts && grep -q devtmpfs /proc/filesystems ; then |
|||
if ! grep -wq nohotplug /proc/cmdline ; then |
|||
if [ -x /etc/rc.d/rc.udev -a -z "$container" ]; then |
|||
/bin/sh /etc/rc.d/rc.udev start |
|||
fi |
|||
fi |
|||
fi |
|||
|
|||
# Initialize the networking hardware. |
|||
if [ -x /etc/rc.d/rc.inet1 ]; then |
|||
. /etc/rc.d/rc.inet1 |
|||
fi |
|||
|
|||
# Start D-Bus: |
|||
if [ -x /etc/rc.d/rc.messagebus ]; then |
|||
sh /etc/rc.d/rc.messagebus start |
|||
fi |
|||
|
|||
# Start Bluetooth: |
|||
if [ -x /etc/rc.d/rc.bluetooth ]; then |
|||
sh /etc/rc.d/rc.bluetooth start |
|||
fi |
|||
|
|||
# Start wicd or networkmanager: |
|||
if [ -x /etc/rc.d/rc.wicd -a -x /usr/sbin/wicd ]; then |
|||
sh /etc/rc.d/rc.wicd start |
|||
elif [ -x /etc/rc.d/rc.networkmanager ]; then |
|||
sh /etc/rc.d/rc.networkmanager start |
|||
fi |
|||
|
|||
# Start networking daemons: |
|||
if [ -x /etc/rc.d/rc.inet2 ]; then |
|||
. /etc/rc.d/rc.inet2 |
|||
fi |
|||
|
|||
# Look for additional USB/SCSI/IEEE1394/etc devices on multiple LUNs: |
|||
if [ -x /etc/rc.d/rc.scanluns ]; then |
|||
. /etc/rc.d/rc.scanluns |
|||
fi |
|||
|
|||
# Mount any additional filesystem types that haven't already been mounted: |
|||
mount -a -v 2> /dev/null | grep -v -e "already mounted" -e "ignored" | cut -f 1 -d : | tr -d ' ' | while read dev ; do mount | grep "${dev} " ; done |
|||
|
|||
# Start the Control Script for automounter: |
|||
if [ -x /etc/rc.d/rc.autofs ]; then |
|||
sh /etc/rc.d/rc.autofs start |
|||
fi |
|||
|
|||
# Start the Network Time Protocol daemon: |
|||
if [ -x /etc/rc.d/rc.ntpd ]; then |
|||
sh /etc/rc.d/rc.ntpd start |
|||
fi |
|||
|
|||
# Remove stale locks and junk files (must be done after mount -a!) |
|||
/bin/rm -f /var/lock/* /var/spool/uucp/LCK..* /tmp/.X*lock /tmp/core /core 2> /dev/null |
|||
/bin/rm -rf /var/spool/cron/cron.?????? 2> /dev/null |
|||
|
|||
# Remove stale hunt sockets so the game can start. |
|||
if [ -r /tmp/hunt -o -r /tmp/hunt.stats ]; then |
|||
echo "Removing your stale hunt sockets from /tmp." |
|||
/bin/rm -f /tmp/hunt* |
|||
fi |
|||
|
|||
# Ensure basic filesystem permissions sanity. |
|||
chmod 755 / 2> /dev/null |
|||
chmod 1777 /tmp /var/tmp |
|||
|
|||
# Start ACPI daemon. |
|||
if [ -x /etc/rc.d/rc.acpid -a -z "$container" ]; then |
|||
. /etc/rc.d/rc.acpid start |
|||
fi |
|||
|
|||
# Enable CPU frequency scaling: |
|||
if [ -x /etc/rc.d/rc.cpufreq -a -z "$container" ]; then |
|||
. /etc/rc.d/rc.cpufreq start |
|||
fi |
|||
|
|||
# Update any existing icon cache files: |
|||
if find /usr/share/icons -maxdepth 2 2> /dev/null | grep -q icon-theme.cache ; then |
|||
for theme_dir in /usr/share/icons/* ; do |
|||
if [ -r ${theme_dir}/icon-theme.cache ]; then |
|||
echo "Updating icon-theme.cache in ${theme_dir}..." |
|||
/usr/bin/gtk-update-icon-cache -t -f ${theme_dir} 1> /dev/null 2> /dev/null & |
|||
fi |
|||
done |
|||
# This would be a large file and probably shouldn't be there. |
|||
if [ -r /usr/share/icons/icon-theme.cache ]; then |
|||
echo "Deleting icon-theme.cache in /usr/share/icons..." |
|||
#/usr/bin/gtk-update-icon-cache -t -f /usr/share/icons 1> /dev/null 2> /dev/null & |
|||
rm -f /usr/share/icons/icon-theme.cache |
|||
fi |
|||
fi |
|||
|
|||
# Update mime database: |
|||
if [ -x /usr/bin/update-mime-database -a -d /usr/share/mime ]; then |
|||
echo "Updating MIME database: /usr/bin/update-mime-database /usr/share/mime &" |
|||
/usr/bin/update-mime-database /usr/share/mime 1> /dev/null 2> /dev/null & |
|||
fi |
|||
|
|||
# Start console-kit-daemon: |
|||
if [ -x /etc/rc.d/rc.consolekit ]; then |
|||
sh /etc/rc.d/rc.consolekit start |
|||
fi |
|||
|
|||
# Start HAL: |
|||
if [ -x /etc/rc.d/rc.hald ]; then |
|||
sh /etc/rc.d/rc.hald start |
|||
fi |
|||
|
|||
# Start system-wide PulseAudio daemon (not recommended, nor required in |
|||
# order to use PulseAudio -- see the script for details): |
|||
if [ -x /etc/rc.d/rc.pulseaudio ]; then |
|||
. /etc/rc.d/rc.pulseaudio start |
|||
fi |
|||
|
|||
# These GTK+/pango files need to be kept up to date for |
|||
# proper input method, pixbuf loaders, and font support. |
|||
if [ -x /usr/bin/update-gtk-immodules ]; then |
|||
echo "Updating gtk.immodules:" |
|||
echo " /usr/bin/update-gtk-immodules &" |
|||
/usr/bin/update-gtk-immodules > /dev/null 2>&1 & |
|||
fi |
|||
if [ -x /usr/bin/update-gdk-pixbuf-loaders ]; then |
|||
echo "Updating gdk-pixbuf.loaders:" |
|||
echo " /usr/bin/update-gdk-pixbuf-loaders &" |
|||
/usr/bin/update-gdk-pixbuf-loaders > /dev/null 2>&1 & |
|||
fi |
|||
if [ -x /usr/bin/update-pango-querymodules ]; then |
|||
echo "Updating pango.modules:" |
|||
echo " /usr/bin/update-pango-querymodules &" |
|||
/usr/bin/update-pango-querymodules > /dev/null 2>&1 & |
|||
fi |
|||
if [ -x /usr/bin/glib-compile-schemas ]; then |
|||
echo "Compiling GSettings XML schema files:" |
|||
echo " /usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas &" |
|||
/usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas >/dev/null 2>&1 & |
|||
fi |
|||
|
|||
# Start dnsmasq, a simple DHCP/DNS server: |
|||
if [ -x /etc/rc.d/rc.dnsmasq ]; then |
|||
/etc/rc.d/rc.dnsmasq start |
|||
fi |
|||
|
|||
# Start snmpd: |
|||
if [ -x /etc/rc.d/rc.snmpd ]; then |
|||
/etc/rc.d/rc.snmpd start |
|||
fi |
|||
|
|||
# Start the print spooling system. This will usually be LPRng (lpd) or CUPS. |
|||
if [ -x /etc/rc.d/rc.cups ]; then |
|||
# Start CUPS: |
|||
/etc/rc.d/rc.cups start |
|||
elif [ -x /etc/rc.d/rc.lprng ]; then |
|||
# Start LPRng (lpd): |
|||
. /etc/rc.d/rc.lprng start |
|||
fi |
|||
|
|||
# Start netatalk. (a file/print server for Macs using Appletalk) |
|||
if [ -x /etc/rc.d/rc.atalk ]; then |
|||
/etc/rc.d/rc.atalk start |
|||
fi |
|||
|
|||
# Start smartd, which monitors the status of S.M.A.R.T. compatible |
|||
# hard drives and reports any problems. Note some devices (which aren't |
|||
# smart, I guess ;) will hang if probed by smartd, so it's commented out |
|||
# by default. |
|||
#if [ -x /usr/sbin/smartd ]; then |
|||
# /usr/sbin/smartd |
|||
#fi |
|||
|
|||
# Monitor the UPS with genpowerd. |
|||
# To use this, uncomment this section and edit your settings in |
|||
# /etc/genpowerd.conf (serial device, UPS type, etc). For more information, |
|||
# see "man genpowerd" or the extensive documentation in the |
|||
# /usr/doc/genpower-*/ directory. |
|||
# You'll also need to configure a similar block in /etc/rc.d/rc.6 if you want |
|||
# support for stopping the UPS's inverter after the machine halts. |
|||
#if [ -x /sbin/genpowerd ]; then |
|||
# echo "Starting genpowerd daemon..." |
|||
# /sbin/genpowerd |
|||
#fi |
|||
|
|||
# Turn on process accounting. To enable process accounting, make sure the |
|||
# option for BSD process accounting is enabled in your kernel, and then |
|||
# create the file /var/log/pacct (touch /var/log/pacct). By default, process |
|||
# accounting is not enabled (since /var/log/pacct does not exist). This is |
|||
# because the log file can get VERY large. |
|||
if [ -x /sbin/accton -a -r /var/log/pacct ]; then |
|||
chmod 640 /var/log/pacct |
|||
/sbin/accton /var/log/pacct |
|||
fi |
|||
|
|||
# Start crond (Dillon's crond): |
|||
# If you want cron to actually log activity to /var/log/cron, then change |
|||
# -l notice to -l info to increase the logging level. |
|||
if [ -x /usr/sbin/crond ]; then |
|||
/usr/sbin/crond -l notice |
|||
fi |
|||
|
|||
# Start atd (manages jobs scheduled with 'at'): |
|||
if [ -x /usr/sbin/atd ]; then |
|||
/usr/sbin/atd -b 15 -l 1 |
|||
fi |
|||
|
|||
# Slackware-Mini-Quota-HOWTO: |
|||
# To really activate quotas, you'll need to add 'usrquota' and/or 'grpquota' to |
|||
# the appropriate partitions as listed in /etc/fstab. Here's an example: |
|||
# |
|||
# /dev/hda2 /home ext3 defaults,usrquota 1 1 |
|||
# |
|||
# You'll then need to setup initial quota files at the top of the partitions |
|||
# to support quota, like this: |
|||
# touch /home/aquota.user /home/aquota.group |
|||
# chmod 600 /home/aquota.user /home/aquota.group |
|||
# |
|||
# Then, reboot to activate the system. |
|||
# To edit user quotas, use 'edquota'. See 'man edquota'. Also, the |
|||
# official Quota Mini-HOWTO has lots of useful information. That can be found |
|||
# here: /usr/doc/Linux-HOWTOs/Quota |
|||
|
|||
# Check quotas and then turn quota system on: |
|||
if grep -q quota /etc/fstab ; then |
|||
for quotafs in $(awk '/quota/ {print $2}' /etc/fstab) ; do |
|||
/bin/rm -f $quotafs/{a,}quota.{group,user}.new |
|||
done |
|||
if [ -x /sbin/quotacheck ]; then |
|||
echo "Checking filesystem quotas: /sbin/quotacheck -avugm" |
|||
/sbin/quotacheck -avugm |
|||
fi |
|||
if [ -x /sbin/quotaon ]; then |
|||
echo "Activating filesystem quotas: /sbin/quotaon -avug" |
|||
/sbin/quotaon -avug |
|||
fi |
|||
fi |
|||
|
|||
# Start the SASL authentication server. This provides SASL |
|||
# authentication services for sendmail: |
|||
if [ -x /etc/rc.d/rc.saslauthd ]; then |
|||
. /etc/rc.d/rc.saslauthd start |
|||
fi |
|||
|
|||
# Start the sendmail daemon: |
|||
if [ -x /etc/rc.d/rc.sendmail ]; then |
|||
. /etc/rc.d/rc.sendmail start |
|||
fi |
|||
|
|||
# Load ALSA (sound) defaults: |
|||
if [ -x /etc/rc.d/rc.alsa -a -z "$container" ]; then |
|||
. /etc/rc.d/rc.alsa |
|||
fi |
|||
|
|||
# Load a custom screen font if the user has an rc.font script. |
|||
if [ -x /etc/rc.d/rc.font ]; then |
|||
. /etc/rc.d/rc.font |
|||
fi |
|||
|
|||
# Load a custom keymap if the user has an rc.keymap script. |
|||
if [ -x /etc/rc.d/rc.keymap ]; then |
|||
. /etc/rc.d/rc.keymap |
|||
fi |
|||
|
|||
# Start the MySQL database: |
|||
if [ -x /etc/rc.d/rc.mysqld ]; then |
|||
. /etc/rc.d/rc.mysqld start |
|||
fi |
|||
|
|||
# Start Apache web server: |
|||
if [ -x /etc/rc.d/rc.httpd ]; then |
|||
. /etc/rc.d/rc.httpd start |
|||
fi |
|||
|
|||
# Start OpenLDAP: |
|||
if [ -x /etc/rc.d/rc.openldap ]; then |
|||
. /etc/rc.d/rc.openldap start |
|||
fi |
|||
|
|||
# Start Samba (a file/print server for Win95/NT machines). |
|||
# Samba can be started in /etc/inetd.conf instead. |
|||
if [ -x /etc/rc.d/rc.samba ]; then |
|||
. /etc/rc.d/rc.samba start |
|||
fi |
|||
|
|||
# Start the GPM mouse server: |
|||
if [ -x /etc/rc.d/rc.gpm ]; then |
|||
. /etc/rc.d/rc.gpm start |
|||
fi |
|||
|
|||
# If there are SystemV init scripts for this runlevel, run them. |
|||
if [ -x /etc/rc.d/rc.sysvinit ]; then |
|||
. /etc/rc.d/rc.sysvinit |
|||
fi |
|||
|
|||
# Start the local setup procedure. |
|||
if [ -x /etc/rc.d/rc.local ]; then |
|||
. /etc/rc.d/rc.local |
|||
fi |
|||
|
|||
# All done. |
@ -0,0 +1,386 @@ |
|||
#!/bin/sh |
|||
# |
|||
# rc.M This file is executed by init(8) when the system is being |
|||
# initialized for one of the "multi user" run levels (i.e. |
|||
# levels 1 through 6). It usually does mounting of file |
|||
# systems et al. |
|||
# |
|||
# Version: @(#)/etc/rc.d/rc.M 2.23 Wed Feb 26 19:20:58 PST 2003 |
|||
# |
|||
# Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org> |
|||
# Heavily modified by Patrick Volkerding <volkerdi@slackware.com> |
|||
# |
|||
|
|||
# Tell the viewers what's going to happen. |
|||
echo "Going multiuser..." |
|||
|
|||
# Update all the shared library links: |
|||
if [ -x /sbin/ldconfig ]; then |
|||
echo "Updating shared library links: /sbin/ldconfig &" |
|||
/sbin/ldconfig & |
|||
fi |
|||
|
|||
# Screen blanks after 15 minutes idle time, and powers down in one hour |
|||
# if the kernel supports APM or ACPI power management: |
|||
/bin/setterm -blank 15 -powersave powerdown -powerdown 60 |
|||
|
|||
# Set the hostname. |
|||
if [ -r /etc/HOSTNAME ]; then |
|||
/bin/hostname $(cat /etc/HOSTNAME | cut -f1 -d .) |
|||
else |
|||
# fall back on this old default: |
|||
echo "darkstar.example.net" > /etc/HOSTNAME |
|||
/bin/hostname darkstar |
|||
fi |
|||
|
|||
# Set the permissions on /var/log/dmesg according to whether the kernel |
|||
# permits non-root users to access kernel dmesg information: |
|||
if [ -r /proc/sys/kernel/dmesg_restrict ]; then |
|||
if [ $(cat /proc/sys/kernel/dmesg_restrict) = 1 ]; then |
|||
touch /var/log/dmesg |
|||
chmod 640 /var/log/dmesg |
|||
fi |
|||
else |
|||
touch /var/log/dmesg |
|||
chmod 644 /var/log/dmesg |
|||
fi |
|||
# Save the contents of 'dmesg': |
|||
/bin/dmesg -s 65536 > /var/log/dmesg |
|||
|
|||
# Initialize PCMCIA devices: |
|||
# |
|||
# NOTE: This used to be started near the top of rc.S so that PCMCIA devices |
|||
# could be fsck'ed along with the other drives. This had some unfortunate |
|||
# side effects, however, since root isn't yet read-write, and /var might not |
|||
# even be mounted the .pid files can't be correctly written in /var/run and |
|||
# the pcmcia system can't be correctly shut down. If you want some PCMCIA |
|||
# partition to be mounted at boot (or when the card is inserted) then add |
|||
# the appropriate lines to /etc/pcmcia/scsi.opts. |
|||
# |
|||
# Note that the stuff in /etc/pcmcia/ is only for 2.4.x kernels using |
|||
# 16-bit PCMCIA cards (not 32-bit Cardbus cards!). For example, with a |
|||
# wireless card you might need to set options in /etc/pcmcia OR in |
|||
# /etc/rc.d/rc.wireless.conf, or even in /etc/rc.d/rc.inet1.conf (with |
|||
# extra options if needed for the encryption key, ESSID, etc.) |
|||
# |
|||
# Hopefully this situation will be unified in the future, but for now |
|||
# that's how it is... |
|||
# |
|||
if [ -x /etc/rc.d/rc.pcmcia ]; then |
|||
. /etc/rc.d/rc.pcmcia start |
|||
# The cards might need a little extra time here to initialize. |
|||
sleep 5 |
|||
fi |
|||
|
|||
# Start the system logger. |
|||
if [ -x /etc/rc.d/rc.syslog -a -x /usr/sbin/syslogd -a -d /var/log ]; then |
|||
. /etc/rc.d/rc.syslog start |
|||
fi |
|||
|
|||
# Update the X font indexes: |
|||
if [ -x /usr/bin/fc-cache ]; then |
|||
echo "Updating X font indexes: /usr/bin/fc-cache -f &" |
|||
/usr/bin/fc-cache -f & |
|||
fi |
|||
|
|||
# Run rc.udev again. This will start udev if it is not already running |
|||
# (for example, upon return from runlevel 1), otherwise it will trigger it |
|||
# to look for device changes and to generate persistent rules if needed. |
|||
if grep -wq sysfs /proc/mounts && grep -q devtmpfs /proc/filesystems ; then |
|||
if ! grep -wq nohotplug /proc/cmdline ; then |
|||
if [ -x /etc/rc.d/rc.udev ]; then |
|||
/bin/sh /etc/rc.d/rc.udev start |
|||
fi |
|||
fi |
|||
fi |
|||
|
|||
# Initialize the networking hardware. |
|||
if [ -x /etc/rc.d/rc.inet1 ]; then |
|||
. /etc/rc.d/rc.inet1 |
|||
fi |
|||
|
|||
# Start D-Bus: |
|||
if [ -x /etc/rc.d/rc.messagebus ]; then |
|||
sh /etc/rc.d/rc.messagebus start |
|||
fi |
|||
|
|||
# Start Bluetooth: |
|||
if [ -x /etc/rc.d/rc.bluetooth ]; then |
|||
sh /etc/rc.d/rc.bluetooth start |
|||
fi |
|||
|
|||
# Start wicd or networkmanager: |
|||
if [ -x /etc/rc.d/rc.wicd -a -x /usr/sbin/wicd ]; then |
|||
sh /etc/rc.d/rc.wicd start |
|||
elif [ -x /etc/rc.d/rc.networkmanager ]; then |
|||
sh /etc/rc.d/rc.networkmanager start |
|||
fi |
|||
|
|||
# Start networking daemons: |
|||
if [ -x /etc/rc.d/rc.inet2 ]; then |
|||
. /etc/rc.d/rc.inet2 |
|||
fi |
|||
|
|||
# Look for additional USB/SCSI/IEEE1394/etc devices on multiple LUNs: |
|||
if [ -x /etc/rc.d/rc.scanluns ]; then |
|||
. /etc/rc.d/rc.scanluns |
|||
fi |
|||
|
|||
# Mount any additional filesystem types that haven't already been mounted: |
|||
mount -a -v 2> /dev/null | grep -v -e "already mounted" -e "ignored" | cut -f 1 -d : | tr -d ' ' | while read dev ; do mount | grep "${dev} " ; done |
|||
|
|||
# Start the Control Script for automounter: |
|||
if [ -x /etc/rc.d/rc.autofs ]; then |
|||
sh /etc/rc.d/rc.autofs start |
|||
fi |
|||
|
|||
# Start the Network Time Protocol daemon: |
|||
if [ -x /etc/rc.d/rc.ntpd ]; then |
|||
sh /etc/rc.d/rc.ntpd start |
|||
fi |
|||
|
|||
# Remove stale locks and junk files (must be done after mount -a!) |
|||
/bin/rm -f /var/lock/* /var/spool/uucp/LCK..* /tmp/.X*lock /tmp/core /core 2> /dev/null |
|||
/bin/rm -rf /var/spool/cron/cron.?????? 2> /dev/null |
|||
|
|||
# Remove stale hunt sockets so the game can start. |
|||
if [ -r /tmp/hunt -o -r /tmp/hunt.stats ]; then |
|||
echo "Removing your stale hunt sockets from /tmp." |
|||
/bin/rm -f /tmp/hunt* |
|||
fi |
|||
|
|||
# Ensure basic filesystem permissions sanity. |
|||
chmod 755 / 2> /dev/null |
|||
chmod 1777 /tmp /var/tmp |
|||
|
|||
# Start ACPI daemon. |
|||
if [ -x /etc/rc.d/rc.acpid ]; then |
|||
. /etc/rc.d/rc.acpid start |
|||
fi |
|||
|
|||
# Enable CPU frequency scaling: |
|||
if [ -x /etc/rc.d/rc.cpufreq ]; then |
|||
. /etc/rc.d/rc.cpufreq start |
|||
fi |
|||
|
|||
# Update any existing icon cache files: |
|||
if find /usr/share/icons -maxdepth 2 2> /dev/null | grep -q icon-theme.cache ; then |
|||
for theme_dir in /usr/share/icons/* ; do |
|||
if [ -r ${theme_dir}/icon-theme.cache ]; then |
|||
echo "Updating icon-theme.cache in ${theme_dir}..." |
|||
/usr/bin/gtk-update-icon-cache -t -f ${theme_dir} 1> /dev/null 2> /dev/null & |
|||
fi |
|||
done |
|||
# This would be a large file and probably shouldn't be there. |
|||
if [ -r /usr/share/icons/icon-theme.cache ]; then |
|||
echo "Deleting icon-theme.cache in /usr/share/icons..." |
|||
#/usr/bin/gtk-update-icon-cache -t -f /usr/share/icons 1> /dev/null 2> /dev/null & |
|||
rm -f /usr/share/icons/icon-theme.cache |
|||
fi |
|||
fi |
|||
|
|||
# Update mime database: |
|||
if [ -x /usr/bin/update-mime-database -a -d /usr/share/mime ]; then |
|||
echo "Updating MIME database: /usr/bin/update-mime-database /usr/share/mime &" |
|||
/usr/bin/update-mime-database /usr/share/mime 1> /dev/null 2> /dev/null & |
|||
fi |
|||
|
|||
# Start console-kit-daemon: |
|||
if [ -x /etc/rc.d/rc.consolekit ]; then |
|||
sh /etc/rc.d/rc.consolekit start |
|||
fi |
|||
|
|||
# Start HAL: |
|||
if [ -x /etc/rc.d/rc.hald ]; then |
|||
sh /etc/rc.d/rc.hald start |
|||
fi |
|||
|
|||
# Start system-wide PulseAudio daemon (not recommended, nor required in |
|||
# order to use PulseAudio -- see the script for details): |
|||
if [ -x /etc/rc.d/rc.pulseaudio ]; then |
|||
. /etc/rc.d/rc.pulseaudio start |
|||
fi |
|||
|
|||
# These GTK+/pango files need to be kept up to date for |
|||
# proper input method, pixbuf loaders, and font support. |
|||
if [ -x /usr/bin/update-gtk-immodules ]; then |
|||
echo "Updating gtk.immodules:" |
|||
echo " /usr/bin/update-gtk-immodules &" |
|||
/usr/bin/update-gtk-immodules > /dev/null 2>&1 & |
|||
fi |
|||
if [ -x /usr/bin/update-gdk-pixbuf-loaders ]; then |
|||
echo "Updating gdk-pixbuf.loaders:" |
|||
echo " /usr/bin/update-gdk-pixbuf-loaders &" |
|||
/usr/bin/update-gdk-pixbuf-loaders > /dev/null 2>&1 & |
|||
fi |
|||
if [ -x /usr/bin/update-pango-querymodules ]; then |
|||
echo "Updating pango.modules:" |
|||
echo " /usr/bin/update-pango-querymodules &" |
|||
/usr/bin/update-pango-querymodules > /dev/null 2>&1 & |
|||
fi |
|||
if [ -x /usr/bin/glib-compile-schemas ]; then |
|||
echo "Compiling GSettings XML schema files:" |
|||
echo " /usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas &" |
|||
/usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas >/dev/null 2>&1 & |
|||
fi |
|||
|
|||
# Start dnsmasq, a simple DHCP/DNS server: |
|||
if [ -x /etc/rc.d/rc.dnsmasq ]; then |
|||
/etc/rc.d/rc.dnsmasq start |
|||
fi |
|||
|
|||
# Start snmpd: |
|||
if [ -x /etc/rc.d/rc.snmpd ]; then |
|||
/etc/rc.d/rc.snmpd start |
|||
fi |
|||
|
|||
# Start the print spooling system. This will usually be LPRng (lpd) or CUPS. |
|||
if [ -x /etc/rc.d/rc.cups ]; then |
|||
# Start CUPS: |
|||
/etc/rc.d/rc.cups start |
|||
elif [ -x /etc/rc.d/rc.lprng ]; then |
|||
# Start LPRng (lpd): |
|||
. /etc/rc.d/rc.lprng start |
|||
fi |
|||
|
|||
# Start netatalk. (a file/print server for Macs using Appletalk) |
|||
if [ -x /etc/rc.d/rc.atalk ]; then |
|||
/etc/rc.d/rc.atalk start |
|||
fi |
|||
|
|||
# Start smartd, which monitors the status of S.M.A.R.T. compatible |
|||
# hard drives and reports any problems. Note some devices (which aren't |
|||
# smart, I guess ;) will hang if probed by smartd, so it's commented out |
|||
# by default. |
|||
#if [ -x /usr/sbin/smartd ]; then |
|||
# /usr/sbin/smartd |
|||
#fi |
|||
|
|||
# Monitor the UPS with genpowerd. |
|||
# To use this, uncomment this section and edit your settings in |
|||
# /etc/genpowerd.conf (serial device, UPS type, etc). For more information, |
|||
# see "man genpowerd" or the extensive documentation in the |
|||
# /usr/doc/genpower-*/ directory. |
|||
# You'll also need to configure a similar block in /etc/rc.d/rc.6 if you want |
|||
# support for stopping the UPS's inverter after the machine halts. |
|||
#if [ -x /sbin/genpowerd ]; then |
|||
# echo "Starting genpowerd daemon..." |
|||
# /sbin/genpowerd |
|||
#fi |
|||
|
|||
# Turn on process accounting. To enable process accounting, make sure the |
|||
# option for BSD process accounting is enabled in your kernel, and then |
|||
# create the file /var/log/pacct (touch /var/log/pacct). By default, process |
|||
# accounting is not enabled (since /var/log/pacct does not exist). This is |
|||
# because the log file can get VERY large. |
|||
if [ -x /sbin/accton -a -r /var/log/pacct ]; then |
|||
chmod 640 /var/log/pacct |
|||
/sbin/accton /var/log/pacct |
|||
fi |
|||
|
|||
# Start crond (Dillon's crond): |
|||
# If you want cron to actually log activity to /var/log/cron, then change |
|||
# -l notice to -l info to increase the logging level. |
|||
if [ -x /usr/sbin/crond ]; then |
|||
/usr/sbin/crond -l notice |
|||
fi |
|||
|
|||
# Start atd (manages jobs scheduled with 'at'): |
|||
if [ -x /usr/sbin/atd ]; then |
|||
/usr/sbin/atd -b 15 -l 1 |
|||
fi |
|||
|
|||
# Slackware-Mini-Quota-HOWTO: |
|||
# To really activate quotas, you'll need to add 'usrquota' and/or 'grpquota' to |
|||
# the appropriate partitions as listed in /etc/fstab. Here's an example: |
|||
# |
|||
# /dev/hda2 /home ext3 defaults,usrquota 1 1 |
|||
# |
|||
# You'll then need to setup initial quota files at the top of the partitions |
|||
# to support quota, like this: |
|||
# touch /home/aquota.user /home/aquota.group |
|||
# chmod 600 /home/aquota.user /home/aquota.group |
|||
# |
|||
# Then, reboot to activate the system. |
|||
# To edit user quotas, use 'edquota'. See 'man edquota'. Also, the |
|||
# official Quota Mini-HOWTO has lots of useful information. That can be found |
|||
# here: /usr/doc/Linux-HOWTOs/Quota |
|||
|
|||
# Check quotas and then turn quota system on: |
|||
if grep -q quota /etc/fstab ; then |
|||
for quotafs in $(awk '/quota/ {print $2}' /etc/fstab) ; do |
|||
/bin/rm -f $quotafs/{a,}quota.{group,user}.new |
|||
done |
|||
if [ -x /sbin/quotacheck ]; then |
|||
echo "Checking filesystem quotas: /sbin/quotacheck -avugm" |
|||
/sbin/quotacheck -avugm |
|||
fi |
|||
if [ -x /sbin/quotaon ]; then |
|||
echo "Activating filesystem quotas: /sbin/quotaon -avug" |
|||
/sbin/quotaon -avug |
|||
fi |
|||
fi |
|||
|
|||
# Start the SASL authentication server. This provides SASL |
|||
# authentication services for sendmail: |
|||
if [ -x /etc/rc.d/rc.saslauthd ]; then |
|||
. /etc/rc.d/rc.saslauthd start |
|||
fi |
|||
|
|||
# Start the sendmail daemon: |
|||
if [ -x /etc/rc.d/rc.sendmail ]; then |
|||
. /etc/rc.d/rc.sendmail start |
|||
fi |
|||
|
|||
# Load ALSA (sound) defaults: |
|||
if [ -x /etc/rc.d/rc.alsa ]; then |
|||
. /etc/rc.d/rc.alsa |
|||
fi |
|||
|
|||
# Load a custom screen font if the user has an rc.font script. |
|||
if [ -x /etc/rc.d/rc.font ]; then |
|||
. /etc/rc.d/rc.font |
|||
fi |
|||
|
|||
# Load a custom keymap if the user has an rc.keymap script. |
|||
if [ -x /etc/rc.d/rc.keymap ]; then |
|||
. /etc/rc.d/rc.keymap |
|||
fi |
|||
|
|||
# Start the MySQL database: |
|||
if [ -x /etc/rc.d/rc.mysqld ]; then |
|||
. /etc/rc.d/rc.mysqld start |
|||
fi |
|||
|
|||
# Start Apache web server: |
|||
if [ -x /etc/rc.d/rc.httpd ]; then |
|||
. /etc/rc.d/rc.httpd start |
|||
fi |
|||
|
|||
# Start OpenLDAP: |
|||
if [ -x /etc/rc.d/rc.openldap ]; then |
|||
. /etc/rc.d/rc.openldap start |
|||
fi |
|||
|
|||
# Start Samba (a file/print server for Win95/NT machines). |
|||
# Samba can be started in /etc/inetd.conf instead. |
|||
if [ -x /etc/rc.d/rc.samba ]; then |
|||
. /etc/rc.d/rc.samba start |
|||
fi |
|||
|
|||
# Start the GPM mouse server: |
|||
if [ -x /etc/rc.d/rc.gpm ]; then |
|||
. /etc/rc.d/rc.gpm start |
|||
fi |
|||
|
|||
# If there are SystemV init scripts for this runlevel, run them. |
|||
if [ -x /etc/rc.d/rc.sysvinit ]; then |
|||
. /etc/rc.d/rc.sysvinit |
|||
fi |
|||
|
|||
# Start the local setup procedure. |
|||
if [ -x /etc/rc.d/rc.local ]; then |
|||
. /etc/rc.d/rc.local |
|||
fi |
|||
|
|||
# All done. |
@ -0,0 +1,474 @@ |
|||
#!/bin/sh |
|||
# |
|||
# /etc/rc.d/rc.S: System initialization script. |
|||
# |
|||
# Mostly written by: Patrick J. Volkerding, <volkerdi@slackware.com> |
|||
# |
|||
|
|||
# Set $container variable since this is a modified version of rc.S with |
|||
# changes for running in an lxc container. A check to see if this variable |
|||
# is set will be used to skip parts of the script that we don't want to run |
|||
# in a container. Thanks to Matteo Bernardini <ponce@slackbuilds.org> and |
|||
# Chris Willing for the initial work making this script lxc compatible. |
|||
container="lxc" |
|||
|
|||
PATH=/sbin:/usr/sbin:/bin:/usr/bin |
|||
|
|||
# Try to mount /proc: |
|||
if [ -z "$container" ]; then |
|||
/sbin/mount -v proc /proc -n -t proc 2> /dev/null |
|||
fi |
|||
|
|||
# Mount sysfs next, if the kernel supports it: |
|||
if [ -d /sys -a -z "$container" ]; then |
|||
if grep -wq sysfs /proc/filesystems ; then |
|||
if ! grep -wq sysfs /proc/mounts ; then |
|||
/sbin/mount -v sysfs /sys -n -t sysfs |
|||
fi |
|||
fi |
|||
fi |
|||
|
|||
# If /run exists, mount a tmpfs on it (unless the |
|||
# initrd has already done so): |
|||
if [ -d /run -a -z "$container" ]; then |
|||
if ! grep -wq "tmpfs /run tmpfs" /proc/mounts ; then |
|||
/sbin/mount -v -n -t tmpfs tmpfs /run -o mode=0755 |
|||
fi |
|||
fi |
|||
|
|||
# Load the loop device kernel module: |
|||
if [ -x /etc/rc.d/rc.loop -a -z "$container" ]; then |
|||
. /etc/rc.d/rc.loop start |
|||
fi |
|||
|
|||
# Initialize udev to manage /dev entries and hotplugging. |
|||
# You may turn off udev by making the /etc/rc.d/rc.udev file non-executable |
|||
# or giving the "nohotplug" option at boot, but realize that if you turn off |
|||
# udev that you will have to load all the kernel modules that you need |
|||
# yourself (possibly in /etc/rc.d/rc.modules.local), and make any additional |
|||
# device nodes that you need in the /dev directory. Even USB and IEEE1394 |
|||
# devices will need to have the modules loaded by hand if udev is not used. |
|||
# So use it. :-) |
|||
if grep -wq sysfs /proc/mounts && grep -q devtmpfs /proc/filesystems ; then |
|||
if ! grep -wq nohotplug /proc/cmdline ; then |
|||
if [ -x /etc/rc.d/rc.udev -a -z "$container" ]; then |
|||
/bin/sh /etc/rc.d/rc.udev start |
|||
fi |
|||
fi |
|||
fi |
|||
|
|||
# Mount Control Groups filesystem interface: |
|||
if [ -z "$container" ]; then |
|||
if grep -wq cgroup /proc/filesystems ; then |
|||
if [ -d /sys/fs/cgroup ]; then |
|||
# See linux-*/Documentation/cgroups/cgroups.txt (section 1.6) |
|||
# Check if we have some tools to autodetect the available cgroup controllers |
|||
if [ -x /bin/cut -a -x /bin/tail ]; then |
|||
# Mount a tmpfs as the cgroup filesystem root |
|||
mount -t tmpfs -o mode=0755 cgroup_root /sys/fs/cgroup |
|||
# Autodetect available controllers and mount them in subfolders |
|||
controllers="$(/bin/cut -f 1 /proc/cgroups | /bin/tail -n +2)" |
|||
for i in $controllers; do |
|||
mkdir /sys/fs/cgroup/$i |
|||
mount -t cgroup -o $i $i /sys/fs/cgroup/$i |
|||
done |
|||
unset i controllers |
|||
else |
|||
# We can't use autodetection so fall back mounting them all together |
|||
mount -t cgroup cgroup /sys/fs/cgroup |
|||
fi |
|||
else |
|||
mkdir -p /dev/cgroup |
|||
mount -t cgroup cgroup /dev/cgroup |
|||
fi |
|||
fi |
|||
fi |
|||
|
|||
# Initialize the Logical Volume Manager. |
|||
# This won't start unless we find /etc/lvmtab (LVM1) or |
|||
# /etc/lvm/backup/ (LVM2). This is created by /sbin/vgscan, so to |
|||
# use LVM you must run /sbin/vgscan yourself the first time (and |
|||
# create some VGs and LVs). |
|||
if [ -z "$container" ]; then |
|||
# Create LVM lock/run directories: |
|||
mkdir -p -m 0700 /run/lvm /run/lock /run/lock/lvm |
|||
if [ -r /etc/lvmtab -o -d /etc/lvm/backup ]; then |
|||
echo "Initializing LVM (Logical Volume Manager):" |
|||
# Check for device-mapper support. |
|||
if ! grep -wq device-mapper /proc/devices ; then |
|||
# Try to load a device-mapper kernel module: |
|||
/sbin/modprobe -q dm-mod |
|||
fi |
|||
# Scan for new volume groups: |
|||
/sbin/vgscan --mknodes --ignorelockingfailure 2> /dev/null |
|||
if [ $? = 0 ]; then |
|||
# Make volume groups available to the kernel. |
|||
# This should also make logical volumes available. |
|||
/sbin/vgchange -ay --ignorelockingfailure |
|||
fi |
|||
fi |
|||
fi |
|||
|
|||
# Open any volumes created by cryptsetup. |
|||
# |
|||
# Some notes on /etc/crypttab in Slackware: |
|||
# Only LUKS formatted volumes are supported (except for swap) |
|||
# crypttab follows the following format: |
|||
# <luks_name> <device> <password> <options> |
|||
# |
|||
# <luks_name>: This is the name of your LUKS volume. |
|||
# For example: crypt-home |
|||
# |
|||
# <device>: This is the device containing your LUKS volume. |
|||
# For example: /dev/sda2 |
|||
# |
|||
# <password>: This is either the volume password in plain text, or the name of |
|||
# a key file. Use 'none' to interactively enter password on boot. |
|||
# |
|||
# <options>: Comma-separated list of options. Note that there must be a |
|||
# password field for any options to be picked up (use a password of 'none' to |
|||
# get a password prompt at boot). The following options are supported: |
|||
# |
|||
# discard -- this will cause --allow-discards to be passed to the cryptsetup |
|||
# program while opening the LUKS volume. |
|||
# |
|||
# ro -- this will cause --readonly to be passed to the cryptsetup program while |
|||
# opening the LUKS volume. |
|||
# |
|||
# swap -- this option cannot be used with other options. The device given will |
|||
# be formatted as a new encrypted volume with a random key on boot, and used as |
|||
# swap. |
|||
# |
|||
if [ -f /etc/crypttab -a -x /sbin/cryptsetup -a -z "$container" ]; then |
|||
# First, check for device-mapper support. |
|||
if ! grep -wq device-mapper /proc/devices ; then |
|||
# If device-mapper exists as a module, try to load it. |
|||
# Try to load a device-mapper kernel module: |
|||
/sbin/modprobe -q dm-mod |
|||
fi |
|||
# NOTE: we only support LUKS formatted volumes (except for swap)! |
|||
cat /etc/crypttab | grep -v "^#" | grep -v "^$" | while read line; do |
|||
eval LUKSARRAY=( $line ) |
|||
LUKS="${LUKSARRAY[0]}" |
|||
DEV="${LUKSARRAY[1]}" |
|||
PASS="${LUKSARRAY[2]}" |
|||
OPTS="${LUKSARRAY[3]}" |
|||
LUKSOPTS="" |
|||
if echo $OPTS | grep -wq ro ; then LUKSOPTS="${LUKSOPTS} --readonly" ; fi |
|||
if echo $OPTS | grep -wq discard ; then LUKSOPTS="${LUKSOPTS} --allow-discards" ; fi |
|||
# Skip LUKS volumes that were already unlocked (in the initrd): |
|||
/sbin/cryptsetup status $LUKS 2>/dev/null | head -n 1 | grep -q "is active" && continue |
|||
if /sbin/cryptsetup isLuks $DEV 2>/dev/null ; then |
|||
if [ -z "${LUKSOPTS}" ]; then |
|||
echo "Unlocking LUKS encrypted volume '${LUKS}' on device '$DEV':" |
|||
else |
|||
echo "Unlocking LUKS encrypted volume '${LUKS}' on device '$DEV' with options '${LUKSOPTS}':" |
|||
fi |
|||
if [ -n "${PASS}" -a "${PASS}" != "none" ]; then |
|||
if [ -f "${PASS}" ]; then |
|||
# A password was given a key-file filename |
|||
/sbin/cryptsetup ${LUKSOPTS} --key-file=${PASS} luksOpen $DEV $LUKS |
|||
else |
|||
# A password was provided in plain text |
|||
echo "${PASS}" | /sbin/cryptsetup ${LUKSOPTS} luksOpen $DEV $LUKS |
|||
fi |
|||
else |
|||
# No password was given, or a password of 'none' was given |
|||
/sbin/cryptsetup ${LUKSOPTS} luksOpen $DEV $LUKS </dev/tty0 >/dev/tty0 2>&1 |
|||
fi |
|||
elif echo $OPTS | grep -wq swap ; then |
|||
# If any of the volumes is to be used as encrypted swap, |
|||
# then encrypt it using a random key and run mkswap: |
|||
echo "Creating encrypted swap volume '${LUKS}' on device '$DEV':" |
|||
/sbin/cryptsetup --cipher=aes --key-file=/dev/urandom --key-size=256 create $LUKS $DEV |
|||
mkswap /dev/mapper/$LUKS |
|||
fi |
|||
done |
|||
fi |
|||
|
|||
# Enable swapping: |
|||
if [ -z "$container" ]; then |
|||
/sbin/swapon -a 2> /dev/null |
|||
fi |
|||
|
|||
# Start FUSE, if requested: |
|||
if [ -x /etc/rc.d/rc.fuse -a -z "$container" ]; then |
|||
sh /etc/rc.d/rc.fuse start |
|||
fi |
|||
|
|||
# Set the tick and frequency for the system clock. |
|||
# Default values are: TICK=10000 and FREQ=0 |
|||
if [ -z "$container" ]; then |
|||
TICK=10000 |
|||
FREQ=0 |
|||
# If there's a /etc/default/adjtimex config file, source it to override |
|||
# the default TICK and FREQ: |
|||
if [ -r /etc/default/adjtimex ]; then |
|||
. /etc/default/adjtimex |
|||
fi |
|||
if /sbin/adjtimex --tick $TICK --frequency $FREQ; then |
|||
echo "Setting the system clock rate: /sbin/adjtimex --tick $TICK --frequency $FREQ" |
|||
else |
|||
echo "Failed to set system clock with adjtimex, possibly invalid parameters? (TICK=$TICK FREQ=$FREQ)" |
|||
fi |
|||
fi |
|||
|
|||
# Set the system time from the hardware clock using hwclock --hctosys. |
|||
if [ -x /sbin/hwclock -a -z "$container" ]; then |
|||
# Check for a broken motherboard RTC clock (where ioports for rtc are |
|||
# unknown) to prevent hwclock causing a hang: |
|||
if ! grep -q " : rtc" /proc/ioports ; then |
|||
CLOCK_OPT="--directisa" |
|||
fi |
|||
if [ /etc/adjtime -nt /etc/hardwareclock ]; then |
|||
if grep -q "^LOCAL" /etc/adjtime ; then |
|||
echo -n "Setting system time from the hardware clock (localtime): " |
|||
else |
|||
echo -n "Setting system time from the hardware clock (UTC): " |
|||
fi |
|||
/sbin/hwclock $CLOCK_OPT --hctosys |
|||
elif grep -wq "^localtime" /etc/hardwareclock 2> /dev/null ; then |
|||
echo -n "Setting system time from the hardware clock (localtime): " |
|||
/sbin/hwclock $CLOCK_OPT --localtime --hctosys |
|||
else |
|||
echo -n "Setting system time from the hardware clock (UTC): " |
|||
/sbin/hwclock $CLOCK_OPT --utc --hctosys |
|||
fi |
|||
date |
|||
fi |
|||
|
|||
# Test to see if the root partition is read-only, like it ought to be. |
|||
if [ -z "$container" ]; then |
|||
READWRITE=no |
|||
if touch /fsrwtestfile 2>/dev/null; then |
|||
rm -f /fsrwtestfile |
|||
READWRITE=yes |
|||
else |
|||
echo "Testing root filesystem status: read-only filesystem" |
|||
fi |
|||
fi |
|||
|
|||
# See if a forced filesystem check was requested at shutdown: |
|||
if [ -r /etc/forcefsck -a -z "$container" ]; then |
|||
FORCEFSCK="-f" |
|||
fi |
|||
|
|||
# Check the root filesystem: |
|||
if [ -z "$container" ]; then |
|||
if [ ! $READWRITE = yes ]; then |
|||
RETVAL=0 |
|||
if [ ! -r /etc/fastboot ]; then |
|||
echo "Checking root filesystem:" |
|||
/sbin/fsck $FORCEFSCK -C -a / |
|||
RETVAL=$? |
|||
fi |
|||
# An error code of 2 or higher will require a reboot. |
|||
if [ $RETVAL -ge 2 ]; then |
|||
# An error code equal to or greater than 4 means that some errors |
|||
# could not be corrected. This requires manual attention, so we |
|||
# offer a chance to try to fix the problem in single-user mode: |
|||
if [ $RETVAL -ge 4 ]; then |
|||
echo |
|||
echo "***********************************************************" |
|||
echo "*** An error occurred during the root filesystem check. ***" |
|||
echo "*** You will now be given a chance to log into the ***" |
|||
echo "*** system in single-user mode to fix the problem. ***" |
|||
echo "*** ***" |
|||
echo "*** If you are using the ext2 filesystem, running ***" |
|||
echo "*** 'e2fsck -v -y <partition>' might help. ***" |
|||
echo "***********************************************************" |
|||
echo |
|||
echo "Once you exit the single-user shell, the system will reboot." |
|||
echo |
|||
PS1="(Repair filesystem) \#"; export PS1 |
|||
sulogin |
|||
else # With an error code of 2 or 3, reboot the machine automatically: |
|||
echo |
|||
echo "***********************************" |
|||
echo "*** The filesystem was changed. ***" |
|||
echo "*** The system will now reboot. ***" |
|||
echo "***********************************" |
|||
echo |
|||
fi |
|||
echo "Unmounting file systems." |
|||
/sbin/umount -a -r |
|||
/sbin/mount -n -o remount,ro / |
|||
echo "Rebooting system." |
|||
sleep 2 |
|||
reboot -f |
|||
fi |
|||
# Remount the root filesystem in read-write mode |
|||
echo "Remounting root device with read-write enabled." |
|||
/sbin/mount -w -v -n -o remount / |
|||
if [ $? -gt 0 ] ; then |
|||
echo "FATAL: Attempt to remount root device as read-write failed! This is going to" |
|||
echo "cause serious problems." |
|||
fi |
|||
else |
|||
echo "Testing root filesystem status: read-write filesystem" |
|||
echo |
|||
echo "ERROR: Root partition has already been mounted read-write. Cannot check!" |
|||
echo |
|||
echo "For filesystem checking to work properly, your system must initially mount" |
|||
echo "the root partition as read only. If you're booting with LILO, add a line:" |
|||
echo |
|||
echo " read-only" |
|||
echo |
|||
echo "to the Linux section in your /etc/lilo.conf and type 'lilo' to reinstall it." |
|||
fi |
|||
fi # Done checking root filesystem |
|||
|
|||
# Any /etc/mtab that exists here is old, so we start with a new one: |
|||
/bin/rm -f /etc/mtab{,~,.tmp} && /bin/touch /etc/mtab |
|||
|
|||
# Add entry for / to /etc/mtab: |
|||
if [ -z "$container" ]; then |
|||
/sbin/mount -f -w / |
|||
fi |
|||
|
|||
# Add /proc, /sys, and /dev/shm mounts to /etc/mtab: |
|||
if [ -z "$container" ]; then |
|||
if [ -d /proc/sys ]; then |
|||
/sbin/mount -f -t proc proc /proc |
|||
fi |
|||
if [ -d /sys/bus ]; then |
|||
/sbin/mount -f -t sysfs sysfs /sys |
|||
fi |
|||
if grep -q '^[^ ]\+ /dev/shm ' /proc/mounts 2> /dev/null ; then |
|||
/sbin/mount -f -t tmpfs tmpfs /dev/shm |
|||
fi |
|||
fi |
|||
|
|||
# Configure ISA Plug-and-Play devices: |
|||
if [ -r /etc/isapnp.conf -a -z "$container" ]; then |
|||
if [ -x /sbin/isapnp ]; then |
|||
/sbin/isapnp /etc/isapnp.conf |
|||
fi |
|||
fi |
|||
|
|||
# Run the kernel module script. This updates the module dependencies and |
|||
# also supports manually loading kernel modules through rc.modules.local. |
|||
if [ -x /etc/rc.d/rc.modules -a -z "$container" ]; then |
|||
. /etc/rc.d/rc.modules |
|||
fi |
|||
|
|||
# Configure kernel parameters: |
|||
if [ -x /sbin/sysctl -a -r /etc/sysctl.conf -a -z "$container" ]; then |
|||
echo "Configuring kernel parameters: /sbin/sysctl -e --system" |
|||
/sbin/sysctl -e --system |
|||
elif [ -x /sbin/sysctl -a -z "$container" ]; then |
|||
echo "Configuring kernel parameters: /sbin/sysctl -e --system" |
|||
# Don't say "Applying /etc/sysctl.conf" or complain if the file doesn't exist |
|||
/sbin/sysctl -e --system 2> /dev/null | grep -v "Applying /etc/sysctl.conf" |
|||
fi |
|||
|
|||
# Check all the non-root filesystems: |
|||
if [ ! -r /etc/fastboot -a -z "$container" ]; then |
|||
echo "Checking non-root filesystems:" |
|||
/sbin/fsck $FORCEFSCK -C -R -A -a |
|||
fi |
|||
|
|||
# Mount usbfs only if it is found in /etc/fstab: |
|||
if [ -z "$container" ]; then |
|||
if grep -wq usbfs /proc/filesystems; then |
|||
if ! grep -wq usbfs /proc/mounts ; then |
|||
if grep -wq usbfs /etc/fstab; then |
|||
/sbin/mount -v /proc/bus/usb |
|||
fi |
|||
fi |
|||
fi |
|||
fi |
|||
|
|||
# Mount non-root file systems in fstab, but not NFS or SMB |
|||
# because TCP/IP is not yet configured, and not proc or sysfs |
|||
# because those have already been mounted. Also check that |
|||
# devpts is not already mounted before attempting to mount |
|||
# it. With a 2.6.x or newer kernel udev mounts devpts. |
|||
# We also need to wait a little bit to let USB and other |
|||
# hotplugged devices settle (sorry to slow down the boot): |
|||
if [ -z "$container" ]; then |
|||
echo "Mounting non-root local filesystems:" |
|||
sleep 3 |
|||
if /bin/grep -wq devpts /proc/mounts ; then |
|||
# This pipe after the mount command is just to convert the new |
|||
# mount verbose output back to the old format that contained |
|||
# more useful information: |
|||
/sbin/mount -a -v -t nonfs,nosmbfs,nocifs,noproc,nosysfs,nodevpts | grep successfully | cut -f 1 -d : | tr -d ' ' | while read dev ; do mount | grep "${dev} " ; done |
|||
else |
|||
/sbin/mount -a -v -t nonfs,nosmbfs,nocifs,noproc,nosysfs | grep successfully | cut -f 1 -d : | tr -d ' ' | while read dev ; do mount | grep "${dev} " ; done |
|||
fi |
|||
fi |
|||
|
|||
# Enable swapping again. This is needed in case a swapfile is used, |
|||
# as it can't be enabled until the filesystem it resides on has been |
|||
# mounted read-write. |
|||
if [ -z "$container" ]; then |
|||
/sbin/swapon -a 2> /dev/null |
|||
fi |
|||
|
|||
# Start cgmanager (or cgproxy in a container): |
|||
if [ -x /etc/rc.d/rc.cgmanager -a -d /sys/fs/cgroup ]; then |
|||
sh /etc/rc.d/rc.cgmanager start |
|||
fi |
|||
|
|||
# Clean up some temporary files: |
|||
rm -f /var/run/* /var/run/*/* /var/run/*/*/* /etc/nologin \ |
|||
/etc/dhcpc/*.pid /etc/forcefsck /etc/fastboot \ |
|||
/var/state/saslauthd/saslauthd.pid \ |
|||
/tmp/.Xauth* 1> /dev/null 2> /dev/null |
|||
( cd /var/log/setup/tmp && rm -rf * ) |
|||
( cd /tmp && rm -rf kde-[a-zA-Z]* ksocket-[a-zA-Z]* hsperfdata_[a-zA-Z]* plugtmp* ) |
|||
|
|||
# Clear /var/lock/subsys: |
|||
if [ -d /var/lock/subsys ]; then |
|||
rm -f /var/lock/subsys/* |
|||
fi |
|||
|
|||
# Create /tmp/{.ICE-unix,.X11-unix} if they are not present: |
|||
if [ ! -e /tmp/.ICE-unix ]; then |
|||
mkdir -p /tmp/.ICE-unix |
|||
chmod 1777 /tmp/.ICE-unix |
|||
fi |
|||
if [ ! -e /tmp/.X11-unix ]; then |
|||
mkdir -p /tmp/.X11-unix |
|||
chmod 1777 /tmp/.X11-unix |
|||
fi |
|||
|
|||
# Create a fresh utmp file: |
|||
touch /var/run/utmp |
|||
chown root:utmp /var/run/utmp |
|||
chmod 664 /var/run/utmp |
|||
|
|||
# Update the current kernel level in the /etc/motd (Message Of The Day) file, |
|||
# if the first line of that file begins with the word 'Linux'. |
|||
# You are free to modify the rest of the file as you see fit. |
|||
if [ -x /bin/sed ]; then |
|||
/bin/sed -i "{1s/^Linux.*/$(/bin/uname -sr)\./}" /etc/motd |
|||
fi |
|||
|
|||
# If there are SystemV init scripts for this runlevel, run them. |
|||
if [ -x /etc/rc.d/rc.sysvinit ]; then |
|||
. /etc/rc.d/rc.sysvinit |
|||
fi |
|||
|
|||
# Run serial port setup script: |
|||
# CAREFUL! This can make some systems hang if the rc.serial script isn't |
|||
# set up correctly. If this happens, you may have to edit the file from a |
|||
# boot disk, and/or set it as non-executable: |
|||
if [ -x /etc/rc.d/rc.serial -a -z "$container" ]; then |
|||
sh /etc/rc.d/rc.serial start |
|||
fi |
|||
|
|||
# Carry an entropy pool between reboots to improve randomness. |
|||
if [ -f /etc/random-seed ]; then |
|||
echo "Using /etc/random-seed to initialize /dev/urandom." |
|||
cat /etc/random-seed > /dev/urandom |
|||
fi |
|||
# Use the pool size from /proc, or 4096 bits: |
|||
if [ -r /proc/sys/kernel/random/poolsize ]; then |
|||
dd if=/dev/urandom of=/etc/random-seed count=1 bs=$(expr $(cat /proc/sys/kernel/random/poolsize) / 8) 2> /dev/null |
|||
else |
|||
dd if=/dev/urandom of=/etc/random-seed count=1 bs=512 2> /dev/null |
|||
fi |
|||
chmod 600 /etc/random-seed |
|||
|
@ -0,0 +1,445 @@ |
|||
#!/bin/sh |
|||
# |
|||
# /etc/rc.d/rc.S: System initialization script. |
|||
# |
|||
# Mostly written by: Patrick J. Volkerding, <volkerdi@slackware.com> |
|||
# |
|||
|
|||
PATH=/sbin:/usr/sbin:/bin:/usr/bin |
|||
|
|||
# Try to mount /proc: |
|||
/sbin/mount -v proc /proc -n -t proc 2> /dev/null |
|||
|
|||
# Mount sysfs next, if the kernel supports it: |
|||
if [ -d /sys ]; then |
|||
if grep -wq sysfs /proc/filesystems ; then |
|||
if ! grep -wq sysfs /proc/mounts ; then |
|||
/sbin/mount -v sysfs /sys -n -t sysfs |
|||
fi |
|||
fi |
|||
fi |
|||
|
|||
# If /run exists, mount a tmpfs on it (unless the |
|||
# initrd has already done so): |
|||
if [ -d /run ]; then |
|||
if ! grep -wq "tmpfs /run tmpfs" /proc/mounts ; then |
|||
/sbin/mount -v -n -t tmpfs tmpfs /run -o mode=0755 |
|||
fi |
|||
fi |
|||
|
|||
# Load the loop device kernel module: |
|||
if [ -x /etc/rc.d/rc.loop ]; then |
|||
. /etc/rc.d/rc.loop start |
|||
fi |
|||
|
|||
# Initialize udev to manage /dev entries and hotplugging. |
|||
# You may turn off udev by making the /etc/rc.d/rc.udev file non-executable |
|||
# or giving the "nohotplug" option at boot, but realize that if you turn off |
|||
# udev that you will have to load all the kernel modules that you need |
|||
# yourself (possibly in /etc/rc.d/rc.modules.local), and make any additional |
|||
# device nodes that you need in the /dev directory. Even USB and IEEE1394 |
|||
# devices will need to have the modules loaded by hand if udev is not used. |
|||
# So use it. :-) |
|||
if grep -wq sysfs /proc/mounts && grep -q devtmpfs /proc/filesystems ; then |
|||
if ! grep -wq nohotplug /proc/cmdline ; then |
|||
if [ -x /etc/rc.d/rc.udev ]; then |
|||
/bin/sh /etc/rc.d/rc.udev start |
|||
fi |
|||
fi |
|||
fi |
|||
|
|||
# Mount Control Groups filesystem interface: |
|||
if grep -wq cgroup /proc/filesystems ; then |
|||
if [ -d /sys/fs/cgroup ]; then |
|||
# See linux-*/Documentation/cgroups/cgroups.txt (section 1.6) |
|||
# Check if we have some tools to autodetect the available cgroup controllers |
|||
if [ -x /bin/cut -a -x /bin/tail ]; then |
|||
# Mount a tmpfs as the cgroup filesystem root |
|||
mount -t tmpfs -o mode=0755 cgroup_root /sys/fs/cgroup |
|||
# Autodetect available controllers and mount them in subfolders |
|||
controllers="$(/bin/cut -f 1 /proc/cgroups | /bin/tail -n +2)" |
|||
for i in $controllers; do |
|||
mkdir /sys/fs/cgroup/$i |
|||
mount -t cgroup -o $i $i /sys/fs/cgroup/$i |
|||
done |
|||
unset i controllers |
|||
else |
|||
# We can't use autodetection so fall back mounting them all together |
|||
mount -t cgroup cgroup /sys/fs/cgroup |
|||
fi |
|||
else |
|||
mkdir -p /dev/cgroup |
|||
mount -t cgroup cgroup /dev/cgroup |
|||
fi |
|||
fi |
|||
|
|||
|
|||
# Initialize the Logical Volume Manager. |
|||
# This won't start unless we find /etc/lvmtab (LVM1) or |
|||
# /etc/lvm/backup/ (LVM2). This is created by /sbin/vgscan, so to |
|||
# use LVM you must run /sbin/vgscan yourself the first time (and |
|||
# create some VGs and LVs). |
|||
# Create LVM lock/run directories: |
|||
mkdir -p -m 0700 /run/lvm /run/lock /run/lock/lvm |
|||
if [ -r /etc/lvmtab -o -d /etc/lvm/backup ]; then |
|||
echo "Initializing LVM (Logical Volume Manager):" |
|||
# Check for device-mapper support. |
|||
if ! grep -wq device-mapper /proc/devices ; then |
|||
# Try to load a device-mapper kernel module: |
|||
/sbin/modprobe -q dm-mod |
|||
fi |
|||
# Scan for new volume groups: |
|||
/sbin/vgscan --mknodes --ignorelockingfailure 2> /dev/null |
|||
if [ $? = 0 ]; then |
|||
# Make volume groups available to the kernel. |
|||
# This should also make logical volumes available. |
|||
/sbin/vgchange -ay --ignorelockingfailure |
|||
fi |
|||
fi |
|||
|
|||
# Open any volumes created by cryptsetup. |
|||
# |
|||
# Some notes on /etc/crypttab in Slackware: |
|||
# Only LUKS formatted volumes are supported (except for swap) |
|||
# crypttab follows the following format: |
|||
# <luks_name> <device> <password> <options> |
|||
# |
|||
# <luks_name>: This is the name of your LUKS volume. |
|||
# For example: crypt-home |
|||
# |
|||
# <device>: This is the device containing your LUKS volume. |
|||
# For example: /dev/sda2 |
|||
# |
|||
# <password>: This is either the volume password in plain text, or the name of |
|||
# a key file. Use 'none' to interactively enter password on boot. |
|||
# |
|||
# <options>: Comma-separated list of options. Note that there must be a |
|||
# password field for any options to be picked up (use a password of 'none' to |
|||
# get a password prompt at boot). The following options are supported: |
|||
# |
|||
# discard -- this will cause --allow-discards to be passed to the cryptsetup |
|||
# program while opening the LUKS volume. |
|||
# |
|||
# ro -- this will cause --readonly to be passed to the cryptsetup program while |
|||
# opening the LUKS volume. |
|||
# |
|||
# swap -- this option cannot be used with other options. The device given will |
|||
# be formatted as a new encrypted volume with a random key on boot, and used as |
|||
# swap. |
|||
# |
|||
if [ -f /etc/crypttab -a -x /sbin/cryptsetup ]; then |
|||
# First, check for device-mapper support. |
|||
if ! grep -wq device-mapper /proc/devices ; then |
|||
# If device-mapper exists as a module, try to load it. |
|||
# Try to load a device-mapper kernel module: |
|||
/sbin/modprobe -q dm-mod |
|||
fi |
|||
# NOTE: we only support LUKS formatted volumes (except for swap)! |
|||
cat /etc/crypttab | grep -v "^#" | grep -v "^$" | while read line; do |
|||
eval LUKSARRAY=( $line ) |
|||
LUKS="${LUKSARRAY[0]}" |
|||
DEV="${LUKSARRAY[1]}" |
|||
PASS="${LUKSARRAY[2]}" |
|||
OPTS="${LUKSARRAY[3]}" |
|||
LUKSOPTS="" |
|||
if echo $OPTS | grep -wq ro ; then LUKSOPTS="${LUKSOPTS} --readonly" ; fi |
|||
if echo $OPTS | grep -wq discard ; then LUKSOPTS="${LUKSOPTS} --allow-discards" ; fi |
|||
# Skip LUKS volumes that were already unlocked (in the initrd): |
|||
/sbin/cryptsetup status $LUKS 2>/dev/null | head -n 1 | grep -q "is active" && continue |
|||
if /sbin/cryptsetup isLuks $DEV 2>/dev/null ; then |
|||
if [ -z "${LUKSOPTS}" ]; then |
|||
echo "Unlocking LUKS encrypted volume '${LUKS}' on device '$DEV':" |
|||
else |
|||
echo "Unlocking LUKS encrypted volume '${LUKS}' on device '$DEV' with options '${LUKSOPTS}':" |
|||
fi |
|||
if [ -n "${PASS}" -a "${PASS}" != "none" ]; then |
|||
if [ -f "${PASS}" ]; then |
|||
# A password was given a key-file filename |
|||
/sbin/cryptsetup ${LUKSOPTS} --key-file=${PASS} luksOpen $DEV $LUKS |
|||
else |
|||
# A password was provided in plain text |
|||
echo "${PASS}" | /sbin/cryptsetup ${LUKSOPTS} luksOpen $DEV $LUKS |
|||
fi |
|||
else |
|||
# No password was given, or a password of 'none' was given |
|||
/sbin/cryptsetup ${LUKSOPTS} luksOpen $DEV $LUKS </dev/tty0 >/dev/tty0 2>&1 |
|||
fi |
|||
elif echo $OPTS | grep -wq swap ; then |
|||
# If any of the volumes is to be used as encrypted swap, |
|||
# then encrypt it using a random key and run mkswap: |
|||
echo "Creating encrypted swap volume '${LUKS}' on device '$DEV':" |
|||
/sbin/cryptsetup --cipher=aes --key-file=/dev/urandom --key-size=256 create $LUKS $DEV |
|||
mkswap /dev/mapper/$LUKS |
|||
fi |
|||
done |
|||
fi |
|||
|
|||
# Enable swapping: |
|||
/sbin/swapon -a 2> /dev/null |
|||
|
|||
# Start FUSE, if requested: |
|||
if [ -x /etc/rc.d/rc.fuse ]; then |
|||
sh /etc/rc.d/rc.fuse start |
|||
fi |
|||
|
|||
# Set the tick and frequency for the system clock. |
|||
# Default values are: TICK=10000 and FREQ=0 |
|||
TICK=10000 |
|||
FREQ=0 |
|||
# If there's a /etc/default/adjtimex config file, source it to override |
|||
# the default TICK and FREQ: |
|||
if [ -r /etc/default/adjtimex ]; then |
|||
. /etc/default/adjtimex |
|||
fi |
|||
if /sbin/adjtimex --tick $TICK --frequency $FREQ; then |
|||
echo "Setting the system clock rate: /sbin/adjtimex --tick $TICK --frequency $FREQ" |
|||
else |
|||
echo "Failed to set system clock with adjtimex, possibly invalid parameters? (TICK=$TICK FREQ=$FREQ)" |
|||
fi |
|||
|
|||
# Set the system time from the hardware clock using hwclock --hctosys. |
|||
if [ -x /sbin/hwclock ]; then |
|||
# Check for a broken motherboard RTC clock (where ioports for rtc are |
|||
# unknown) to prevent hwclock causing a hang: |
|||
if ! grep -q " : rtc" /proc/ioports ; then |
|||
CLOCK_OPT="--directisa" |
|||
fi |
|||
if [ /etc/adjtime -nt /etc/hardwareclock ]; then |
|||
if grep -q "^LOCAL" /etc/adjtime ; then |
|||
echo -n "Setting system time from the hardware clock (localtime): " |
|||
else |
|||
echo -n "Setting system time from the hardware clock (UTC): " |
|||
fi |
|||
/sbin/hwclock $CLOCK_OPT --hctosys |
|||
elif grep -wq "^localtime" /etc/hardwareclock 2> /dev/null ; then |
|||
echo -n "Setting system time from the hardware clock (localtime): " |
|||
/sbin/hwclock $CLOCK_OPT --localtime --hctosys |
|||
else |
|||
echo -n "Setting system time from the hardware clock (UTC): " |
|||
/sbin/hwclock $CLOCK_OPT --utc --hctosys |
|||
fi |
|||
date |
|||
fi |
|||
|
|||
# Test to see if the root partition is read-only, like it ought to be. |
|||
READWRITE=no |
|||
if touch /fsrwtestfile 2>/dev/null; then |
|||
rm -f /fsrwtestfile |
|||
READWRITE=yes |
|||
else |
|||
echo "Testing root filesystem status: read-only filesystem" |
|||
fi |
|||
|
|||
# See if a forced filesystem check was requested at shutdown: |
|||
if [ -r /etc/forcefsck ]; then |
|||
FORCEFSCK="-f" |
|||
fi |
|||
|
|||
# Check the root filesystem: |
|||
if [ ! $READWRITE = yes ]; then |
|||
RETVAL=0 |
|||
if [ ! -r /etc/fastboot ]; then |
|||
echo "Checking root filesystem:" |
|||
/sbin/fsck $FORCEFSCK -C -a / |
|||
RETVAL=$? |
|||
fi |
|||
# An error code of 2 or higher will require a reboot. |
|||
if [ $RETVAL -ge 2 ]; then |
|||
# An error code equal to or greater than 4 means that some errors |
|||
# could not be corrected. This requires manual attention, so we |
|||
# offer a chance to try to fix the problem in single-user mode: |
|||
if [ $RETVAL -ge 4 ]; then |
|||
echo |
|||
echo "***********************************************************" |
|||
echo "*** An error occurred during the root filesystem check. ***" |
|||
echo "*** You will now be given a chance to log into the ***" |
|||
echo "*** system in single-user mode to fix the problem. ***" |
|||
echo "*** ***" |
|||
echo "*** If you are using the ext2 filesystem, running ***" |
|||
echo "*** 'e2fsck -v -y <partition>' might help. ***" |
|||
echo "***********************************************************" |
|||
echo |
|||
echo "Once you exit the single-user shell, the system will reboot." |
|||
echo |
|||
PS1="(Repair filesystem) \#"; export PS1 |
|||
sulogin |
|||
else # With an error code of 2 or 3, reboot the machine automatically: |
|||
echo |
|||
echo "***********************************" |
|||
echo "*** The filesystem was changed. ***" |
|||
echo "*** The system will now reboot. ***" |
|||
echo "***********************************" |
|||
echo |
|||
fi |
|||
echo "Unmounting file systems." |
|||
/sbin/umount -a -r |
|||
/sbin/mount -n -o remount,ro / |
|||
echo "Rebooting system." |
|||
sleep 2 |
|||
reboot -f |
|||
fi |
|||
# Remount the root filesystem in read-write mode |
|||
echo "Remounting root device with read-write enabled." |
|||
/sbin/mount -w -v -n -o remount / |
|||
if [ $? -gt 0 ] ; then |
|||
echo "FATAL: Attempt to remount root device as read-write failed! This is going to" |
|||
echo "cause serious problems." |
|||
fi |
|||
else |
|||
echo "Testing root filesystem status: read-write filesystem" |
|||
echo |
|||
echo "ERROR: Root partition has already been mounted read-write. Cannot check!" |
|||
echo |
|||
echo "For filesystem checking to work properly, your system must initially mount" |
|||
echo "the root partition as read only. If you're booting with LILO, add a line:" |
|||
echo |
|||
echo " read-only" |
|||
echo |
|||
echo "to the Linux section in your /etc/lilo.conf and type 'lilo' to reinstall it." |
|||
fi # Done checking root filesystem |
|||
|
|||
|
|||
# Any /etc/mtab that exists here is old, so we start with a new one: |
|||
/bin/rm -f /etc/mtab{,~,.tmp} && /bin/touch /etc/mtab |
|||
|
|||
# Add entry for / to /etc/mtab: |
|||
/sbin/mount -f -w / |
|||
|
|||
# Add /proc, /sys, and /dev/shm mounts to /etc/mtab: |
|||
if [ -d /proc/sys ]; then |
|||
/sbin/mount -f -t proc proc /proc |
|||
fi |
|||
if [ -d /sys/bus ]; then |
|||
/sbin/mount -f -t sysfs sysfs /sys |
|||
fi |
|||
if grep -q '^[^ ]\+ /dev/shm ' /proc/mounts 2> /dev/null ; then |
|||
/sbin/mount -f -t tmpfs tmpfs /dev/shm |
|||
fi |
|||
|
|||
# Configure ISA Plug-and-Play devices: |
|||
if [ -r /etc/isapnp.conf ]; then |
|||
if [ -x /sbin/isapnp ]; then |
|||
/sbin/isapnp /etc/isapnp.conf |
|||
fi |
|||
fi |
|||
|
|||
# Run the kernel module script. This updates the module dependencies and |
|||
# also supports manually loading kernel modules through rc.modules.local. |
|||
if [ -x /etc/rc.d/rc.modules ]; then |
|||
. /etc/rc.d/rc.modules |
|||
fi |
|||
|
|||
# Configure kernel parameters: |
|||
if [ -x /sbin/sysctl -a -r /etc/sysctl.conf ]; then |
|||
echo "Configuring kernel parameters: /sbin/sysctl -e --system" |
|||
/sbin/sysctl -e --system |
|||
elif [ -x /sbin/sysctl ]; then |
|||
echo "Configuring kernel parameters: /sbin/sysctl -e --system" |
|||
# Don't say "Applying /etc/sysctl.conf" or complain if the file doesn't exist |
|||
/sbin/sysctl -e --system 2> /dev/null | grep -v "Applying /etc/sysctl.conf" |
|||
fi |
|||
|
|||
# Check all the non-root filesystems: |
|||
if [ ! -r /etc/fastboot ]; then |
|||
echo "Checking non-root filesystems:" |
|||
/sbin/fsck $FORCEFSCK -C -R -A -a |
|||
fi |
|||
|
|||
# Mount usbfs only if it is found in /etc/fstab: |
|||
if grep -wq usbfs /proc/filesystems; then |
|||
if ! grep -wq usbfs /proc/mounts ; then |
|||
if grep -wq usbfs /etc/fstab; then |
|||
/sbin/mount -v /proc/bus/usb |
|||
fi |
|||
fi |
|||
fi |
|||
|
|||
# Mount non-root file systems in fstab, but not NFS or SMB |
|||
# because TCP/IP is not yet configured, and not proc or sysfs |
|||
# because those have already been mounted. Also check that |
|||
# devpts is not already mounted before attempting to mount |
|||
# it. With a 2.6.x or newer kernel udev mounts devpts. |
|||
# We also need to wait a little bit to let USB and other |
|||
# hotplugged devices settle (sorry to slow down the boot): |
|||
echo "Mounting non-root local filesystems:" |
|||
sleep 3 |
|||
if /bin/grep -wq devpts /proc/mounts ; then |
|||
# This pipe after the mount command is just to convert the new |
|||
# mount verbose output back to the old format that contained |
|||
# more useful information: |
|||
/sbin/mount -a -v -t nonfs,nosmbfs,nocifs,noproc,nosysfs,nodevpts | grep successfully | cut -f 1 -d : | tr -d ' ' | while read dev ; do mount | grep "${dev} " ; done |
|||
else |
|||
/sbin/mount -a -v -t nonfs,nosmbfs,nocifs,noproc,nosysfs | grep successfully | cut -f 1 -d : | tr -d ' ' | while read dev ; do mount | grep "${dev} " ; done |
|||
fi |
|||
|
|||
# Enable swapping again. This is needed in case a swapfile is used, |
|||
# as it can't be enabled until the filesystem it resides on has been |
|||
# mounted read-write. |
|||
/sbin/swapon -a 2> /dev/null |
|||
|
|||
# Start cgmanager (or cgproxy in a container): |
|||
if [ -x /etc/rc.d/rc.cgmanager -a -d /sys/fs/cgroup ]; then |
|||
sh /etc/rc.d/rc.cgmanager start |
|||
fi |
|||
|
|||
# Clean up some temporary files: |
|||
rm -f /var/run/* /var/run/*/* /var/run/*/*/* /etc/nologin \ |
|||
/etc/dhcpc/*.pid /etc/forcefsck /etc/fastboot \ |
|||
/var/state/saslauthd/saslauthd.pid \ |
|||
/tmp/.Xauth* 1> /dev/null 2> /dev/null |
|||
( cd /var/log/setup/tmp && rm -rf * ) |
|||
( cd /tmp && rm -rf kde-[a-zA-Z]* ksocket-[a-zA-Z]* hsperfdata_[a-zA-Z]* plugtmp* ) |
|||
|
|||
# Clear /var/lock/subsys: |
|||
if [ -d /var/lock/subsys ]; then |
|||
rm -f /var/lock/subsys/* |
|||
fi |
|||
|
|||
# Create /tmp/{.ICE-unix,.X11-unix} if they are not present: |
|||
if [ ! -e /tmp/.ICE-unix ]; then |
|||
mkdir -p /tmp/.ICE-unix |
|||
chmod 1777 /tmp/.ICE-unix |
|||
fi |
|||
if [ ! -e /tmp/.X11-unix ]; then |
|||
mkdir -p /tmp/.X11-unix |
|||
chmod 1777 /tmp/.X11-unix |
|||
fi |
|||
|
|||
# Create a fresh utmp file: |
|||
touch /var/run/utmp |
|||
chown root:utmp /var/run/utmp |
|||
chmod 664 /var/run/utmp |
|||
|
|||
# Update the current kernel level in the /etc/motd (Message Of The Day) file, |
|||
# if the first line of that file begins with the word 'Linux'. |
|||
# You are free to modify the rest of the file as you see fit. |
|||
if [ -x /bin/sed ]; then |
|||
/bin/sed -i "{1s/^Linux.*/$(/bin/uname -sr)\./}" /etc/motd |
|||
fi |
|||
|
|||
# If there are SystemV init scripts for this runlevel, run them. |
|||
if [ -x /etc/rc.d/rc.sysvinit ]; then |
|||
. /etc/rc.d/rc.sysvinit |
|||
fi |
|||
|
|||
# Run serial port setup script: |
|||
# CAREFUL! This can make some systems hang if the rc.serial script isn't |
|||
# set up correctly. If this happens, you may have to edit the file from a |
|||
# boot disk, and/or set it as non-executable: |
|||
if [ -x /etc/rc.d/rc.serial ]; then |
|||
sh /etc/rc.d/rc.serial start |
|||
fi |
|||
|
|||
# Carry an entropy pool between reboots to improve randomness. |
|||
if [ -f /etc/random-seed ]; then |
|||
echo "Using /etc/random-seed to initialize /dev/urandom." |
|||
cat /etc/random-seed > /dev/urandom |
|||
fi |
|||
# Use the pool size from /proc, or 4096 bits: |
|||
if [ -r /proc/sys/kernel/random/poolsize ]; then |
|||
dd if=/dev/urandom of=/etc/random-seed count=1 bs=$(expr $(cat /proc/sys/kernel/random/poolsize) / 8) 2> /dev/null |
|||
else |
|||
dd if=/dev/urandom of=/etc/random-seed count=1 bs=512 2> /dev/null |
|||
fi |
|||
chmod 600 /etc/random-seed |
|||
|
@ -0,0 +1,331 @@ |
|||
#! /bin/sh |
|||
# /etc/rc.d/rc.inet1 |
|||
# This script is used to bring up the various network interfaces. |
|||
# |
|||
# @(#)/etc/rc.d/rc.inet1 10.2 Sun Jul 24 12:45:56 PDT 2005 (pjv) |
|||
|
|||
# Set $container variable since this is a modified version of rc.inet1 with |
|||
# changes for running in an lxc container. A check to see if this variable |
|||
# is set will be used to skip parts of the script that we don't want to run |
|||
# in a container. Thanks to Matteo Bernardini <ponce@slackbuilds.org> and |
|||
# Chris Willing for the initial work making this script lxc compatible. |
|||
container="lxc" |
|||
|
|||
############################ |
|||
# READ NETWORK CONFIG FILE # |
|||
############################ |
|||
|
|||
# Get the configuration information from /etc/rc.d/rc.inet1.conf: |
|||
. /etc/rc.d/rc.inet1.conf |
|||
|
|||
########### |
|||
# LOGGING # |
|||
########### |
|||
|
|||
# If possible, log events in /var/log/messages: |
|||
if [ -f /var/run/syslogd.pid -a -x /usr/bin/logger ]; then |
|||
LOGGER=/usr/bin/logger |
|||
else # output to stdout/stderr: |
|||
LOGGER=/bin/cat |
|||
fi |
|||
|
|||
############################ |
|||
# DETERMINE INTERFACE LIST # |
|||
############################ |
|||
|
|||
# Compose a list of interfaces from /etc/rc.d/rc.inet1.conf (with a maximum |
|||
# of 6 interfaces, but you can easily enlarge the interface limit |
|||
# - send me a picture of such a box :-). |
|||
# If a value for IFNAME[n] is not set, we assume it is an eth'n' interface. |
|||
# This way, the new script is compatible with older rc.inet1.conf files. |
|||
# The IFNAME array will be used to determine which interfaces to bring up/down. |
|||
MAXNICS=${MAXNICS:-6} |
|||
i=0 |
|||
while [ $i -lt $MAXNICS ]; |
|||
do |
|||
IFNAME[$i]=${IFNAME[$i]:=eth${i}} |
|||
i=$(($i+1)) |
|||
done |
|||
if [ "$DEBUG_ETH_UP" = "yes" ]; then |
|||
echo "/etc/rc.d/rc.inet1: List of interfaces: '${IFNAME[@]}'" | $LOGGER |
|||
fi |
|||
|
|||
###################### |
|||
# LOOPBACK FUNCTIONS # |
|||
###################### |
|||
|
|||
# Function to bring up the loopback interface. If loopback is |
|||
# already up, do nothing. |
|||
lo_up() { |
|||
if grep lo: /proc/net/dev 1> /dev/null ; then |
|||
if ! /sbin/ifconfig | grep "^lo" 1> /dev/null ; then |
|||
echo "/etc/rc.d/rc.inet1: /sbin/ifconfig lo 127.0.0.1" | $LOGGER |
|||
/sbin/ifconfig lo 127.0.0.1 |
|||
echo "/etc/rc.d/rc.inet1: /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo" | $LOGGER |
|||
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
# Function to take down the loopback interface: |
|||
lo_down() { |
|||
if grep lo: /proc/net/dev 1> /dev/null ; then |
|||
echo "/etc/rc.d/rc.inet1: /sbin/ifconfig lo down" | $LOGGER |
|||
/sbin/ifconfig lo down |
|||
fi |
|||
} |
|||
|
|||
####################### |
|||
# INTERFACE FUNCTIONS # |
|||
####################### |
|||
|
|||
# Function to assemble a bridge interface. |
|||
br_open() { |
|||
# argument is 'i' - the position of this interface in the IFNAME array. |
|||
/sbin/brctl addbr ${IFNAME[$1]} |
|||
for BRIF in $(echo ${BRNICS[$1]}); do |
|||
/sbin/ifconfig $BRIF down |
|||
/sbin/ifconfig $BRIF 0.0.0.0 promisc up |
|||
/sbin/brctl addif ${IFNAME[$1]} $BRIF |
|||
done |
|||
} |
|||
|
|||
# Function to disassemble a bridge interface. |
|||
br_close() { |
|||
# argument is 'i' - the position of this interface in the IFNAME array. |
|||
#for BRIF in $(echo ${BRNICS[$1]}); do |
|||
for BRIF in $(ls --indicator-style=none /sys/class/net/${IFNAME[$1]}/brif/) |
|||
do |
|||
/sbin/brctl delif ${IFNAME[$1]} $BRIF |
|||
done |
|||
/sbin/ifconfig ${IFNAME[$1]} down |
|||
/sbin/brctl delbr ${IFNAME[$1]} |
|||
} |
|||
|
|||
# Function to bring up a network interface. If the interface is |
|||
# already up or does not yet exist (perhaps because the kernel driver |
|||
# is not loaded yet), do nothing. |
|||
if_up() { |
|||
# Determine position 'i' of this interface in the IFNAME array: |
|||
i=0 |
|||
while [ $i -lt $MAXNICS ]; do |
|||
[ "${IFNAME[$i]}" = "${1}" ] && break |
|||
i=$(($i+1)) |
|||
done |
|||
|
|||
if [ -z "$container" ]; then |
|||
# If the interface is a bridge, then create it first: |
|||
[ -n "${BRNICS[$i]}" ] && br_open $i |
|||
# If the interface isn't in the kernel yet (but there's an alias for it in |
|||
# modules.conf), then it should be loaded first: |
|||
if ! grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then # no interface yet |
|||
if /sbin/modprobe -c | grep -v "^#" | grep -w "alias ${1}" | grep -vw "alias ${1} off" > /dev/null ; then |
|||
echo "/etc/rc.d/rc.inet1: /sbin/modprobe ${1}" | $LOGGER |
|||
/sbin/modprobe ${1} |
|||
fi |
|||
fi |
|||
fi # end check container |
|||
|
|||
if grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then # interface exists |
|||
if ! /sbin/ifconfig | grep -w "${1}" 1>/dev/null || \ |
|||
! /sbin/ifconfig ${1} | grep -w inet 1> /dev/null ; then # interface not up or not configured |
|||
if [ ! "${HWADDR[$i]}" = "" ]; then # Set hardware address _before_ the interface goes up: |
|||
echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} hw ether ${HWADDR[$i]}" | $LOGGER |
|||
/sbin/ifconfig ${1} hw ether ${HWADDR[$i]} |
|||
fi |
|||
if [ ! "${MTU[$i]}" = "" ]; then # Set MTU to something else than 1500 |
|||
echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} mtu ${MTU[$i]}" | $LOGGER |
|||
/sbin/ifconfig ${1} mtu ${MTU[$i]} |
|||
fi |
|||
if [ -x /etc/rc.d/rc.wireless ]; then |
|||
. /etc/rc.d/rc.wireless ${1} start # Initialize any wireless parameters |
|||
fi |
|||
if [ "${USE_DHCP[$i]}" = "yes" ]; then # use DHCP to bring interface up |
|||
# Clear DHCP_OPTIONS before adding new options to it: |
|||
unset DHCP_OPTIONS |
|||
# Set DHCP_OPTIONS for this interface: |
|||
[ ${DHCP_HOSTNAME[$i]} ] && DHCP_OPTIONS="-h ${DHCP_HOSTNAME[$i]}" |
|||
[ "${DHCP_KEEPRESOLV[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -C resolv.conf" |
|||
[ "${DHCP_KEEPNTP[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -C ntp.conf" |
|||
[ "${DHCP_KEEPGW[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -G" |
|||
[ "${DHCP_DEBUG[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -d" |
|||
[ "${DHCP_NOIPV4LL[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -L" |
|||
[ ${DHCP_IPADDR[$i]} ] && DHCP_OPTIONS="$DHCP_OPTIONS -r ${DHCP_IPADDR[$i]}" |
|||
echo "Polling for DHCP server on interface ${1}:" |
|||
# If you set a timeout, you get one, even if the kernel doesn't think that |
|||
# your device is connected, in case /sys isn't right (which it usually isn't |
|||
# except right after the device is loaded, when it usually is): |
|||
#### (start commented out) |
|||
# This is deactivated for now since the kernel has been returning incorrect |
|||
# results concerning whether the interface carrier is detected. |
|||
#if [ "${DHCP_TIMEOUT[$i]}" = "" ]; then |
|||
# ifconfig ${1} up && sleep 1 |
|||
# CONNSTATUS="$(cat /sys/class/net/${1}/carrier 2> /dev/null)" |
|||
# ifconfig ${1} down |
|||
# if [ "$CONNSTATUS" = "0" ]; then |
|||
# # The kernel has just told us the cable isn't even plugged in, but we will |
|||
# # give any DHCP server a short chance to reply anyway: |
|||
# echo "No carrier detected on ${1}. Reducing DHCP timeout to 10 seconds." |
|||
# DHCP_TIMEOUT[$i]=10 |
|||
# fi |
|||
#fi |
|||
#### (end commented out) |
|||
# 10 seconds should be a reasonable default DHCP timeout. 30 was too much. |
|||
echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1}" | $LOGGER |
|||
/sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1} |
|||
else # bring up interface using a static IP address |
|||
if [ ! "${IPADDR[$i]}" = "" ]; then # skip unconfigured interfaces |
|||
# Determine broadcast address from the IP address and netmask: |
|||
BROADCAST[$i]=`/bin/ipmask ${NETMASK[$i]} ${IPADDR[$i]}|cut -f1 -d' '` |
|||
# Set up the network card: |
|||
echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} ${IPADDR[$i]} broadcast ${BROADCAST[$i]} netmask ${NETMASK[$i]}" | $LOGGER |
|||
/sbin/ifconfig ${1} ${IPADDR[$i]} broadcast ${BROADCAST[$i]} netmask ${NETMASK[$i]} |
|||
else |
|||
if [ "$DEBUG_ETH_UP" = "yes" ]; then |
|||
echo "/etc/rc.d/rc.inet1: ${1} interface is not configured in /etc/rc.d/rc.inet1.conf" | $LOGGER |
|||
fi |
|||
fi |
|||
fi |
|||
else |
|||
if [ "$DEBUG_ETH_UP" = "yes" ]; then |
|||
echo "/etc/rc.d/rc.inet1: ${1} is already up, skipping" | $LOGGER |
|||
fi |
|||
fi |
|||
else |
|||
if [ "$DEBUG_ETH_UP" = "yes" ]; then |
|||
echo "/etc/rc.d/rc.inet1: ${1} interface does not exist (yet)" | $LOGGER |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
# Function to take down a network interface: |
|||
if_down() { |
|||
# Determine position 'i' of this interface in the IFNAME array: |
|||
i=0 |
|||
while [ $i -lt $MAXNICS ]; do |
|||
[ "${IFNAME[$i]}" = "${1}" ] && break |
|||
i=$(($i+1)) |
|||
done |
|||
if grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then |
|||
if [ "${USE_DHCP[$i]}" = "yes" ]; then |
|||
echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd -k -d ${1}" | $LOGGER |
|||
/sbin/dhcpcd -k -d ${1} 2> /dev/null || /sbin/ifconfig ${1} down |
|||
sleep 1 |
|||
else |
|||
echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} down" | $LOGGER |
|||
/sbin/ifconfig ${1} down |
|||
fi |
|||
if [ -x /etc/rc.d/rc.wireless ]; then |
|||
. /etc/rc.d/rc.wireless ${1} stop # Kill wireless daemons if any. |
|||
fi |
|||
# If the interface is a bridge, then destroy it now: |
|||
if [ -n "${BRNICS[$i]}" ]; then |
|||
br_close $i |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
##################### |
|||
# GATEWAY FUNCTIONS # |
|||
##################### |
|||
|
|||
# Function to bring up the gateway if there is not yet a default route: |
|||
gateway_up() { |
|||
if ! /sbin/route -n | grep "^0.0.0.0" 1> /dev/null ; then |
|||
if [ ! "$GATEWAY" = "" ]; then |
|||
echo "/etc/rc.d/rc.inet1: /sbin/route add default gw ${GATEWAY} metric 1" | $LOGGER |
|||
/sbin/route add default gw ${GATEWAY} metric 1 2>&1 | $LOGGER |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
# Function to take down an existing default gateway: |
|||
gateway_down() { |
|||
if /sbin/route -n | grep "^0.0.0.0" 1> /dev/null ; then |
|||
echo "/etc/rc.d/rc.inet1: /sbin/route del default" | $LOGGER |
|||
/sbin/route del default |
|||
fi |
|||
} |
|||
|
|||
# Function to start the network: |
|||
start() { |
|||
lo_up |
|||
for i in ${IFNAME[@]} ; do |
|||
if_up $i |
|||
done |
|||
gateway_up |
|||
} |
|||
|
|||
# Function to stop the network: |
|||
stop() { |
|||
gateway_down |
|||
for i in ${IFNAME[@]} ; do |
|||
if_down $i |
|||
done |
|||
lo_down |
|||
} |
|||
|
|||
|
|||
############ |
|||
### MAIN ### |
|||
############ |
|||
|
|||
case "$1" in |
|||
'start') # "start" brings up all configured interfaces: |
|||
start |
|||
;; |
|||
'stop') # "stop" takes down all configured interfaces: |
|||
stop |
|||
;; |
|||
'restart') # "restart" restarts the network: |
|||
stop |
|||
start |
|||
;; |
|||
'lo_start') # Start the loopback interface: |
|||
lo_up |
|||
;; |
|||
*_start) # Example: "eth1_start" will start the specified interface 'eth1' |
|||
INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` |
|||
if_up $INTERFACE |
|||
gateway_up |
|||
;; |
|||
'lo_stop') # Stop the loopback interface: |
|||
lo_down |
|||
;; |
|||
*_stop) # Example: "eth0_stop" will stop the specified interface 'eth0' |
|||
INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` |
|||
if_down $INTERFACE |
|||
;; |
|||
*_restart) # Example: "wlan0_restart" will take 'wlan0' down and up again |
|||
INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` |
|||
if_down $INTERFACE |
|||
sleep 1 |
|||
if_up $INTERFACE |
|||
gateway_up |
|||
;; |
|||
'up') # "up" does the same thing as "start" |
|||
start |
|||
;; |
|||
'down') # "down" does the same thing as "stop" |
|||
stop |
|||
;; |
|||
'lo_up') # Start the loopback interface: |
|||
lo_up |
|||
;; |
|||
*_up) # "*_up" does the same thing as "*_start" |
|||
INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` |
|||
if_up $INTERFACE |
|||
gateway_up |
|||
;; |
|||
'lo_down') # Stop the loopback interface: |
|||
lo_down |
|||
;; |
|||
*_down) # "*_down" does the same thing as "*_stop" |
|||
INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` |
|||
if_down $INTERFACE |
|||
;; |
|||
*) # The default is to bring up all configured interfaces: |
|||
start |
|||
esac |
|||
|
|||
# End of /etc/rc.d/rc.inet1 |
@ -0,0 +1,320 @@ |
|||
#! /bin/sh |
|||
# /etc/rc.d/rc.inet1 |
|||
# This script is used to bring up the various network interfaces. |
|||
# |
|||
# @(#)/etc/rc.d/rc.inet1 10.2 Sun Jul 24 12:45:56 PDT 2005 (pjv) |
|||
|
|||
############################ |
|||
# READ NETWORK CONFIG FILE # |
|||
############################ |
|||
|
|||
# Get the configuration information from /etc/rc.d/rc.inet1.conf: |
|||
. /etc/rc.d/rc.inet1.conf |
|||
|
|||
########### |
|||
# LOGGING # |
|||
########### |
|||
|
|||
# If possible, log events in /var/log/messages: |
|||
if [ -f /var/run/syslogd.pid -a -x /usr/bin/logger ]; then |
|||
LOGGER=/usr/bin/logger |
|||
else # output to stdout/stderr: |
|||
LOGGER=/bin/cat |
|||
fi |
|||
|
|||
############################ |
|||
# DETERMINE INTERFACE LIST # |
|||
############################ |
|||
|
|||
# Compose a list of interfaces from /etc/rc.d/rc.inet1.conf (with a maximum |
|||
# of 6 interfaces, but you can easily enlarge the interface limit |
|||
# - send me a picture of such a box :-). |
|||
# If a value for IFNAME[n] is not set, we assume it is an eth'n' interface. |
|||
# This way, the new script is compatible with older rc.inet1.conf files. |
|||
# The IFNAME array will be used to determine which interfaces to bring up/down. |
|||
MAXNICS=${MAXNICS:-6} |
|||
i=0 |
|||
while [ $i -lt $MAXNICS ]; |
|||
do |
|||
IFNAME[$i]=${IFNAME[$i]:=eth${i}} |
|||
i=$(($i+1)) |
|||
done |
|||
if [ "$DEBUG_ETH_UP" = "yes" ]; then |
|||
echo "/etc/rc.d/rc.inet1: List of interfaces: '${IFNAME[@]}'" | $LOGGER |
|||
fi |
|||
|
|||
###################### |
|||
# LOOPBACK FUNCTIONS # |
|||
###################### |
|||
|
|||
# Function to bring up the loopback interface. If loopback is |
|||
# already up, do nothing. |
|||
lo_up() { |
|||
if grep lo: /proc/net/dev 1> /dev/null ; then |
|||
if ! /sbin/ifconfig | grep "^lo" 1> /dev/null ; then |
|||
echo "/etc/rc.d/rc.inet1: /sbin/ifconfig lo 127.0.0.1" | $LOGGER |
|||
/sbin/ifconfig lo 127.0.0.1 |
|||
echo "/etc/rc.d/rc.inet1: /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo" | $LOGGER |
|||
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
# Function to take down the loopback interface: |
|||
lo_down() { |
|||
if grep lo: /proc/net/dev 1> /dev/null ; then |
|||
echo "/etc/rc.d/rc.inet1: /sbin/ifconfig lo down" | $LOGGER |
|||
/sbin/ifconfig lo down |
|||
fi |
|||
} |
|||
|
|||
####################### |
|||
# INTERFACE FUNCTIONS # |
|||
####################### |
|||
|
|||
# Function to assemble a bridge interface. |
|||
br_open() { |
|||
# argument is 'i' - the position of this interface in the IFNAME array. |
|||
/sbin/brctl addbr ${IFNAME[$1]} |
|||
for BRIF in $(echo ${BRNICS[$1]}); do |
|||
/sbin/ifconfig $BRIF down |
|||
/sbin/ifconfig $BRIF 0.0.0.0 promisc up |
|||
/sbin/brctl addif ${IFNAME[$1]} $BRIF |
|||
done |
|||
} |
|||
|
|||
# Function to disassemble a bridge interface. |
|||
br_close() { |
|||
# argument is 'i' - the position of this interface in the IFNAME array. |
|||
#for BRIF in $(echo ${BRNICS[$1]}); do |
|||
for BRIF in $(ls --indicator-style=none /sys/class/net/${IFNAME[$1]}/brif/) |
|||
do |
|||
/sbin/brctl delif ${IFNAME[$1]} $BRIF |
|||
done |
|||
/sbin/ifconfig ${IFNAME[$1]} down |
|||
/sbin/brctl delbr ${IFNAME[$1]} |
|||
} |
|||
|
|||
# Function to bring up a network interface. If the interface is |
|||
# already up or does not yet exist (perhaps because the kernel driver |
|||
# is not loaded yet), do nothing. |
|||
if_up() { |
|||
# Determine position 'i' of this interface in the IFNAME array: |
|||
i=0 |
|||
while [ $i -lt $MAXNICS ]; do |
|||
[ "${IFNAME[$i]}" = "${1}" ] && break |
|||
i=$(($i+1)) |
|||
done |
|||
# If the interface is a bridge, then create it first: |
|||
[ -n "${BRNICS[$i]}" ] && br_open $i |
|||
# If the interface isn't in the kernel yet (but there's an alias for it in |
|||
# modules.conf), then it should be loaded first: |
|||
if ! grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then # no interface yet |
|||
if /sbin/modprobe -c | grep -v "^#" | grep -w "alias ${1}" | grep -vw "alias ${1} off" > /dev/null ; then |
|||
echo "/etc/rc.d/rc.inet1: /sbin/modprobe ${1}" | $LOGGER |
|||
/sbin/modprobe ${1} |
|||
fi |
|||
fi |
|||
if grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then # interface exists |
|||
if ! /sbin/ifconfig | grep -w "${1}" 1>/dev/null || \ |
|||
! /sbin/ifconfig ${1} | grep -w inet 1> /dev/null ; then # interface not up or not configured |
|||
if [ ! "${HWADDR[$i]}" = "" ]; then # Set hardware address _before_ the interface goes up: |
|||
echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} hw ether ${HWADDR[$i]}" | $LOGGER |
|||
/sbin/ifconfig ${1} hw ether ${HWADDR[$i]} |
|||
fi |
|||
if [ ! "${MTU[$i]}" = "" ]; then # Set MTU to something else than 1500 |
|||
echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} mtu ${MTU[$i]}" | $LOGGER |
|||
/sbin/ifconfig ${1} mtu ${MTU[$i]} |
|||
fi |
|||
if [ -x /etc/rc.d/rc.wireless ]; then |
|||
. /etc/rc.d/rc.wireless ${1} start # Initialize any wireless parameters |
|||
fi |
|||
if [ "${USE_DHCP[$i]}" = "yes" ]; then # use DHCP to bring interface up |
|||
# Clear DHCP_OPTIONS before adding new options to it: |
|||
unset DHCP_OPTIONS |
|||
# Set DHCP_OPTIONS for this interface: |
|||
[ ${DHCP_HOSTNAME[$i]} ] && DHCP_OPTIONS="-h ${DHCP_HOSTNAME[$i]}" |
|||
[ "${DHCP_KEEPRESOLV[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -C resolv.conf" |
|||
[ "${DHCP_KEEPNTP[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -C ntp.conf" |
|||
[ "${DHCP_KEEPGW[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -G" |
|||
[ "${DHCP_DEBUG[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -d" |
|||
[ "${DHCP_NOIPV4LL[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -L" |
|||
[ ${DHCP_IPADDR[$i]} ] && DHCP_OPTIONS="$DHCP_OPTIONS -r ${DHCP_IPADDR[$i]}" |
|||
echo "Polling for DHCP server on interface ${1}:" |
|||
# If you set a timeout, you get one, even if the kernel doesn't think that |
|||
# your device is connected, in case /sys isn't right (which it usually isn't |
|||
# except right after the device is loaded, when it usually is): |
|||
#### (start commented out) |
|||
# This is deactivated for now since the kernel has been returning incorrect |
|||
# results concerning whether the interface carrier is detected. |
|||
#if [ "${DHCP_TIMEOUT[$i]}" = "" ]; then |
|||
# ifconfig ${1} up && sleep 1 |
|||
# CONNSTATUS="$(cat /sys/class/net/${1}/carrier 2> /dev/null)" |
|||
# ifconfig ${1} down |
|||
# if [ "$CONNSTATUS" = "0" ]; then |
|||
# # The kernel has just told us the cable isn't even plugged in, but we will |
|||
# # give any DHCP server a short chance to reply anyway: |
|||
# echo "No carrier detected on ${1}. Reducing DHCP timeout to 10 seconds." |
|||
# DHCP_TIMEOUT[$i]=10 |
|||
# fi |
|||
#fi |
|||
#### (end commented out) |
|||
# 10 seconds should be a reasonable default DHCP timeout. 30 was too much. |
|||
echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1}" | $LOGGER |
|||
/sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1} |
|||
else # bring up interface using a static IP address |
|||
if [ ! "${IPADDR[$i]}" = "" ]; then # skip unconfigured interfaces |
|||
# Determine broadcast address from the IP address and netmask: |
|||
BROADCAST[$i]=`/bin/ipmask ${NETMASK[$i]} ${IPADDR[$i]}|cut -f1 -d' '` |
|||
# Set up the network card: |
|||
echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} ${IPADDR[$i]} broadcast ${BROADCAST[$i]} netmask ${NETMASK[$i]}" | $LOGGER |
|||
/sbin/ifconfig ${1} ${IPADDR[$i]} broadcast ${BROADCAST[$i]} netmask ${NETMASK[$i]} |
|||
else |
|||
if [ "$DEBUG_ETH_UP" = "yes" ]; then |
|||
echo "/etc/rc.d/rc.inet1: ${1} interface is not configured in /etc/rc.d/rc.inet1.conf" | $LOGGER |
|||
fi |
|||
fi |
|||
fi |
|||
else |
|||
if [ "$DEBUG_ETH_UP" = "yes" ]; then |
|||
echo "/etc/rc.d/rc.inet1: ${1} is already up, skipping" | $LOGGER |
|||
fi |
|||
fi |
|||
else |
|||
if [ "$DEBUG_ETH_UP" = "yes" ]; then |
|||
echo "/etc/rc.d/rc.inet1: ${1} interface does not exist (yet)" | $LOGGER |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
# Function to take down a network interface: |
|||
if_down() { |
|||
# Determine position 'i' of this interface in the IFNAME array: |
|||
i=0 |
|||
while [ $i -lt $MAXNICS ]; do |
|||
[ "${IFNAME[$i]}" = "${1}" ] && break |
|||
i=$(($i+1)) |
|||
done |
|||
if grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then |
|||
if [ "${USE_DHCP[$i]}" = "yes" ]; then |
|||
echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd -k -d ${1}" | $LOGGER |
|||
/sbin/dhcpcd -k -d ${1} 2> /dev/null || /sbin/ifconfig ${1} down |
|||
sleep 1 |
|||
else |
|||
echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} down" | $LOGGER |
|||
/sbin/ifconfig ${1} down |
|||
fi |
|||
if [ -x /etc/rc.d/rc.wireless ]; then |
|||
. /etc/rc.d/rc.wireless ${1} stop # Kill wireless daemons if any. |
|||
fi |
|||
# If the interface is a bridge, then destroy it now: |
|||
if [ -n "${BRNICS[$i]}" ]; then |
|||
br_close $i |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
##################### |
|||
# GATEWAY FUNCTIONS # |
|||
##################### |
|||
|
|||
# Function to bring up the gateway if there is not yet a default route: |
|||
gateway_up() { |
|||
if ! /sbin/route -n | grep "^0.0.0.0" 1> /dev/null ; then |
|||
if [ ! "$GATEWAY" = "" ]; then |
|||
echo "/etc/rc.d/rc.inet1: /sbin/route add default gw ${GATEWAY} metric 1" | $LOGGER |
|||
/sbin/route add default gw ${GATEWAY} metric 1 2>&1 | $LOGGER |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
# Function to take down an existing default gateway: |
|||
gateway_down() { |
|||
if /sbin/route -n | grep "^0.0.0.0" 1> /dev/null ; then |
|||
echo "/etc/rc.d/rc.inet1: /sbin/route del default" | $LOGGER |
|||
/sbin/route del default |
|||
fi |
|||
} |
|||
|
|||
# Function to start the network: |
|||
start() { |
|||
lo_up |
|||
for i in ${IFNAME[@]} ; do |
|||
if_up $i |
|||
done |
|||
gateway_up |
|||
} |
|||
|
|||
# Function to stop the network: |
|||
stop() { |
|||
gateway_down |
|||
for i in ${IFNAME[@]} ; do |
|||
if_down $i |
|||
done |
|||
lo_down |
|||
} |
|||
|
|||
|
|||
############ |
|||
### MAIN ### |
|||
############ |
|||
|
|||
case "$1" in |
|||
'start') # "start" brings up all configured interfaces: |
|||
start |
|||
;; |
|||
'stop') # "stop" takes down all configured interfaces: |
|||
stop |
|||
;; |
|||
'restart') # "restart" restarts the network: |
|||
stop |
|||
start |
|||
;; |
|||
'lo_start') # Start the loopback interface: |
|||
lo_up |
|||
;; |
|||
*_start) # Example: "eth1_start" will start the specified interface 'eth1' |
|||
INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` |
|||
if_up $INTERFACE |
|||
gateway_up |
|||
;; |
|||
'lo_stop') # Stop the loopback interface: |
|||
lo_down |
|||
;; |
|||
*_stop) # Example: "eth0_stop" will stop the specified interface 'eth0' |
|||
INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` |
|||
if_down $INTERFACE |
|||
;; |
|||
*_restart) # Example: "wlan0_restart" will take 'wlan0' down and up again |
|||
INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` |
|||
if_down $INTERFACE |
|||
sleep 1 |
|||
if_up $INTERFACE |
|||
gateway_up |
|||
;; |
|||
'up') # "up" does the same thing as "start" |
|||
start |
|||
;; |
|||
'down') # "down" does the same thing as "stop" |
|||
stop |
|||
;; |
|||
'lo_up') # Start the loopback interface: |
|||
lo_up |
|||
;; |
|||
*_up) # "*_up" does the same thing as "*_start" |
|||
INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` |
|||
if_up $INTERFACE |
|||
gateway_up |
|||
;; |
|||
'lo_down') # Stop the loopback interface: |
|||
lo_down |
|||
;; |
|||
*_down) # "*_down" does the same thing as "*_stop" |
|||
INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` |
|||
if_down $INTERFACE |
|||
;; |
|||
*) # The default is to bring up all configured interfaces: |
|||
start |
|||
esac |
|||
|
|||
# End of /etc/rc.d/rc.inet1 |
@ -0,0 +1,19 @@ |
|||
# HOW TO EDIT THIS FILE: |
|||
# The "handy ruler" below makes it easier to edit a package description. Line |
|||
# up the first '|' above the ':' following the base package name, and the '|' |
|||
# on the right side marks the last column you can put a character in. You must |
|||
# make exactly 11 lines for the formatting to be correct. It's also |
|||
# customary to leave one space after the ':'. |
|||
|
|||
|-----handy-ruler------------------------------------------------------| |
|||
lxc: lxc (Linux Containers) |
|||
lxc: |
|||
lxc: Linux Containers (LXC) are an operating system-level virtualization |
|||
lxc: method for running multiple isolated server installs (containers) on |
|||
lxc: a single control host. LXC does not provide a virtual machine, but |
|||
lxc: rather provides a virtual environment that has its own process and |
|||
lxc: network space. It is similar to a chroot, but offers more isolation. |
|||
lxc: |
|||
lxc: Daniel Lezcano is the primary developer of lxc. |
|||
lxc: Homepage: https://linuxcontainers.org |
|||
lxc: |
Loading…
Reference in new issue