summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xfunctions/defaults.sh244
-rwxr-xr-xfunctions/releases.sh8
-rwxr-xr-xhelpers/lh_binary_disk62
-rwxr-xr-xhelpers/lh_chroot_sources60
-rwxr-xr-xhelpers/lh_config2
-rwxr-xr-xhelpers/lh_source_disk34
-rw-r--r--manpages/lh_config.de.12
-rw-r--r--manpages/lh_config.en.12
8 files changed, 88 insertions, 326 deletions
diff --git a/functions/defaults.sh b/functions/defaults.sh
index 8af88040a..fedd160b3 100755
--- a/functions/defaults.sh
+++ b/functions/defaults.sh
@@ -16,26 +16,7 @@ Set_defaults ()
# Setting mode
if [ -z "${LH_MODE}" ]
then
- if [ -x /usr/bin/lsb_release ]
- then
- case "$(lsb_release --short --id)" in
- Debian)
- LH_MODE="debian"
- ;;
-
- Ubuntu)
- LH_MODE="ubuntu"
- ;;
-
- *)
- Echo_verbose "Unexpected output from lsb_release"
- Echo_verbose "Setting mode to debian."
- LH_MODE="debian"
- ;;
- esac
- else
- LH_MODE="debian"
- fi
+ LH_MODE="debian"
fi
# Setting distribution name
@@ -49,10 +30,6 @@ Set_defaults ()
debian-edu)
LH_DISTRIBUTION="etch"
;;
-
- ubuntu)
- LH_DISTRIBUTION="feisty"
- ;;
esac
fi
@@ -104,33 +81,16 @@ Set_defaults ()
# Setting bootstrap program
if [ -z "${LH_BOOTSTRAP}" ] || [ ! -x "$(which ${LH_BOOTSTRAP})" ]
then
- case "${LH_MODE}" in
- debian|debian-edu)
- if [ -x "/usr/sbin/debootstrap" ]
- then
- LH_BOOTSTRAP="debootstrap"
- elif [ -x "/usr/bin/cdebootstrap" ]
- then
- LH_BOOTSTRAP="cdebootstrap"
- else
- echo "E: Can't process file /usr/sbin/debootstrap or /usr/bin/cdebootstrap (FIXME)"
- exit 1
- fi
- ;;
-
- ubuntu)
- if [ -x "/usr/sbin/debootstrap" ] && [ -f /usr/lib/debootstrap/scripts/feisty ]
- then
- LH_BOOTSTRAP="debootstrap"
- elif [ -x "/usr/bin/cdebootstrap" ] && [ -d /usr/share/cdebootstrap/generic-ubuntu ]
- then
- LH_BOOTSTRAP="cdebootstrap"
- else
- echo "E: Your version of debootstrap or cdebootstrap is outdated and does not support ubuntu."
- exit 1
- fi
- ;;
- esac
+ if [ -x "/usr/sbin/debootstrap" ]
+ then
+ LH_BOOTSTRAP="debootstrap"
+ elif [ -x "/usr/bin/cdebootstrap" ]
+ then
+ LH_BOOTSTRAP="cdebootstrap"
+ else
+ echo "E: Can't process file /usr/sbin/debootstrap or /usr/bin/cdebootstrap (FIXME)"
+ exit 1
+ fi
fi
# Setting cache option
@@ -157,15 +117,7 @@ Set_defaults ()
# Setting genisoimage
if [ -z "${LH_GENISOIMAGE}" ]
then
- case "${LH_MODE}" in
- debian|debian-edu)
- LH_GENISOIMAGE="genisoimage"
- ;;
-
- ubuntu)
- LH_GENISOIMAGE="mkisofs"
- ;;
- esac
+ LH_GENISOIMAGE="genisoimage"
fi
# Setting initramfs hook
@@ -188,10 +140,6 @@ Set_defaults ()
debian-edu)
LH_INITRAMFS="live-initramfs"
;;
-
- ubuntu)
- LH_INITRAMFS="live-initramfs"
- ;;
esac
fi
fi
@@ -238,10 +186,6 @@ Set_defaults ()
debian-edu)
LH_ROOT="edu-live"
;;
-
- ubuntu)
- LH_ROOT="ubuntu-live"
- ;;
esac
fi
@@ -312,50 +256,13 @@ Set_defaults ()
debian-edu)
LH_MIRROR_BOOTSTRAP="http://ftp.skolelinux.no/debian/"
;;
-
- ubuntu)
- case "${LH_ARCHITECTURE}" in
- amd64|i386|powerpc|sparc)
- LH_MIRROR_BOOTSTRAP="http://archive.ubuntu.com/ubuntu/"
- ;;
-
- hppa|ia64)
- LH_MIRROR_BOOTSTRAP="http://ports.ubuntu.com/"
- ;;
-
- *)
- Echo_error "There is no port of Ubuntu available for your architecture."
- exit 1
- ;;
- esac
- ;;
esac
fi
# Setting security mirror to fetch packages from
if [ -z "${LH_MIRROR_BOOTSTRAP_SECURITY}" ]
then
- case "${LH_MODE}" in
- debian|debian-edu)
- LH_MIRROR_BOOTSTRAP_SECURITY="http://security.debian.org/"
- ;;
-
- ubuntu)
- case "${LH_ARCHITECTURE}" in
- amd64|i386|powerpc|sparc)
- LH_MIRROR_BOOTSTRAP_SECURITY="http://archive.ubuntu.com/ubuntu/"
- ;;
-
- hppa|ia64)
- LH_MIRROR_BOOTSTRAP_SECURITY="http://ports.ubuntu.com/"
- ;;
-
- *)
- LH_MIRROR_BOOTSTRAP_SECURITY="none"
- ;;
- esac
- ;;
- esac
+ LH_MIRROR_BOOTSTRAP_SECURITY="http://security.debian.org/"
fi
# Setting mirror which ends up in the image
@@ -377,60 +284,19 @@ Set_defaults ()
debian-edu)
LH_MIRROR_BINARY="http://ftp.skolelinux.no/debian/"
;;
-
- ubuntu)
- case "${LH_ARCHITECTURE}" in
- amd64|i386|powerpc|sparc)
- LH_MIRROR_BINARY="http://archive.ubuntu.com/ubuntu/"
- ;;
-
- hppa|ia64)
- LH_MIRROR_BINARY="http://ports.ubuntu.com/"
- ;;
-
- *)
- Echo_error "There is no port of Ubuntu available for your architecture."
- exit 1
- ;;
- esac
- ;;
esac
fi
# Setting security mirror which ends up in the image
if [ -z "${LH_MIRROR_BINARY_SECURITY}" ]
then
- case "${LH_MODE}" in
- debian|debian-edu)
- LH_MIRROR_BINARY_SECURITY="http://security.debian.org/"
- ;;
-
- ubuntu)
- case "${LH_ARCHITECTURE}" in
- amd64|i386|powerpc|sparc)
- LH_MIRROR_BINARY_SECURITY="http://security.ubuntu.com/ubuntu/"
- ;;
-
- *)
- LH_MIRROR_BINARY_SECURITY="none"
- ;;
- esac
- ;;
- esac
+ LH_MIRROR_BINARY_SECURITY="http://security.debian.org/"
fi
# Setting sections value
if [ -z "${LH_SECTIONS}" ]
then
- case "${LH_MODE}" in
- debian|debian-edu)
- LH_SECTIONS="main"
- ;;
-
- ubuntu)
- LH_SECTIONS="main restricted"
- ;;
- esac
+ LH_SECTIONS="main"
fi
## config/chroot
@@ -465,15 +331,7 @@ Set_defaults ()
;;
amd64)
- case "${LH_MODE}" in
- debian|debian-edu)
- LH_LINUX_FLAVOURS="amd64"
- ;;
-
- ubuntu)
- LH_LINUX_FLAVOURS="amd64-generic"
- ;;
- esac
+ LH_LINUX_FLAVOURS="amd64"
;;
arm)
@@ -486,15 +344,7 @@ Set_defaults ()
;;
i386)
- case "${LH_MODE}" in
- debian|debian-edu)
- LH_LINUX_FLAVOURS="486"
- ;;
-
- ubuntu)
- LH_LINUX_FLAVOURS="386"
- ;;
- esac
+ LH_LINUX_FLAVOURS="486"
;;
ia64)
@@ -515,20 +365,12 @@ Set_defaults ()
;;
sparc)
- case "${LH_MODE}" in
- debian|debian-edu)
- if [ "${LH_DISTRIBUTION}" = "etch" ]
- then
- LH_LINUX_FLAVOURS="sparc32"
- else
- LH_LINUX_FLAVOURS="sparc64"
- fi
- ;;
-
- ubuntu)
- LH_LINUX_FLAVOURS="sparc64"
- ;;
- esac
+ if [ "${LH_DISTRIBUTION}" = "etch" ]
+ then
+ LH_LINUX_FLAVOURS="sparc32"
+ else
+ LH_LINUX_FLAVOURS="sparc64"
+ fi
;;
*)
@@ -540,20 +382,12 @@ Set_defaults ()
# Set linux packages
if [ -z "${LH_LINUX_PACKAGES}" ]
then
- case "${LH_MODE}" in
- debian|debian-edu)
- LH_LINUX_PACKAGES="linux-image-2.6 \${LH_UNION_FILESYSTEM}-modules-2.6"
-
- if [ "${LH_CHROOT_FILESYSTEM}" = "squashfs" ]
- then
- LH_LINUX_PACKAGES="${LH_LINUX_PACKAGES} squashfs-modules-2.6"
- fi
- ;;
+ LH_LINUX_PACKAGES="linux-image-2.6 \${LH_UNION_FILESYSTEM}-modules-2.6"
- ubuntu)
- LH_LINUX_PACKAGES="linux-image"
- ;;
- esac
+ if [ "${LH_CHROOT_FILESYSTEM}" = "squashfs" ]
+ then
+ LH_LINUX_PACKAGES="${LH_LINUX_PACKAGES} squashfs-modules-2.6"
+ fi
if [ -n "${LH_ENCRYPTION}" ]
then
@@ -656,15 +490,7 @@ Set_defaults ()
# Setting hostname
if [ -z "${LH_HOSTNAME}" ]
then
- case "${LH_MODE}" in
- debian|debian-edu)
- LH_HOSTNAME="debian"
- ;;
-
- ubuntu)
- LH_HOSTNAME="ubuntu"
- ;;
- esac
+ LH_HOSTNAME="debian"
fi
# Setting iso author
@@ -678,10 +504,6 @@ Set_defaults ()
debian-edu)
LH_ISO_APPLICATION="Debian Edu Live"
;;
-
- ubuntu)
- LH_ISO_APPLICATION="Ubuntu Live"
- ;;
esac
fi
@@ -702,10 +524,6 @@ Set_defaults ()
debian-edu)
LH_ISO_VOLUME="Debian Edu Live \$(date +%Y%m%d-%H:%M)"
;;
-
- ubuntu)
- LH_ISO_VOLUME="Ubuntu Live \$(date +%Y%m%d-%H:%M)"
- ;;
esac
fi
@@ -726,10 +544,6 @@ Set_defaults ()
debian-edu)
LH_NET_PATH="/srv/debian-edu-live"
;;
-
- ubuntu)
- LH_NET_PATH="/srv/ubuntu-live"
- ;;
esac
fi
diff --git a/functions/releases.sh b/functions/releases.sh
index 0efe67797..1c0928b1f 100755
--- a/functions/releases.sh
+++ b/functions/releases.sh
@@ -13,11 +13,3 @@ set -e
VERSION_etch="4.0 r1"
VERSION_lenny="testing"
VERSION_sid="unstable"
-
-# Ubuntu releases
-VERSION_hoary="5.04"
-VERSION_breezy="5.10"
-VERSION_dapper="6.06 LTS"
-VERSION_edgy="6.10"
-VERSION_feisty="7.04"
-VERSION_gutsy="7.10"
diff --git a/helpers/lh_binary_disk b/helpers/lh_binary_disk
index e03b0fb14..36f1984d2 100755
--- a/helpers/lh_binary_disk
+++ b/helpers/lh_binary_disk
@@ -64,58 +64,48 @@ then
ARCHITECTURE="Snapshot ${ARCHITECTURE}"
fi
-case "${LH_MODE}" in
- debian)
- case "${LH_DEBIAN_INSTALLER}" in
- cdrom)
- echo "main" > binary/.disk/base_components
+case "${LH_DEBIAN_INSTALLER}" in
+ cdrom)
+ echo "main" > binary/.disk/base_components
- touch binary/.disk/base_installable
+ touch binary/.disk/base_installable
- echo "full_cd" > binary/.disk/cd_type
+ echo "full_cd" > binary/.disk/cd_type
- echo "Debian GNU/Linux ${VERSION} \"${DISTRIBUTION}\" - Official ${ARCHITECTURE} CD Binary $(date +%Y%m%d-%H:%M)" > binary/.disk/info
+ echo "Debian GNU/Linux ${VERSION} \"${DISTRIBUTION}\" - Official ${ARCHITECTURE} CD Binary $(date +%Y%m%d-%H:%M)" > binary/.disk/info
- cp "${LH_BASE}"/data/debian-cd/${LH_DISTRIBUTION}/${LH_ARCHITECTURE}_udeb_include binary/.disk/udeb_include
- ;;
-
- enabled|netinst|live)
- echo "main" > binary/.disk/base_components
+ cp "${LH_BASE}"/data/debian-cd/${LH_DISTRIBUTION}/${LH_ARCHITECTURE}_udeb_include binary/.disk/udeb_include
+ ;;
- touch binary/.disk/base_installable
+ enabled|netinst|live)
+ echo "main" > binary/.disk/base_components
- echo "not_complete" > binary/.disk/cd_type
+ touch binary/.disk/base_installable
- echo "Debian GNU/Linux ${VERSION} \"${DISTRIBUTION}\" - Official ${ARCHITECTURE} NETINST Binary $(date +%Y%m%d-%H:%M)" > binary/.disk/info
+ echo "not_complete" > binary/.disk/cd_type
- cp "${LH_BASE}"/data/debian-cd/${LH_DISTRIBUTION}/${LH_ARCHITECTURE}_netinst_udeb_include binary/.disk/udeb_include
+ echo "Debian GNU/Linux ${VERSION} \"${DISTRIBUTION}\" - Official ${ARCHITECTURE} NETINST Binary $(date +%Y%m%d-%H:%M)" > binary/.disk/info
- if [ "${LH_DEBIAN_INSTALLER}" = "live" ]
- then
- echo "live-installer" >> binary/.disk/udeb_include
- fi
- ;;
+ cp "${LH_BASE}"/data/debian-cd/${LH_DISTRIBUTION}/${LH_ARCHITECTURE}_netinst_udeb_include binary/.disk/udeb_include
- businesscard)
- echo "main" > binary/.disk/base_components
+ if [ "${LH_DEBIAN_INSTALLER}" = "live" ]
+ then
+ echo "live-installer" >> binary/.disk/udeb_include
+ fi
+ ;;
- echo "not_complete" > binary/.disk/cd_type
+ businesscard)
+ echo "main" > binary/.disk/base_components
- echo "Debian GNU/Linux ${VERSION} \"${DISTRIBUTION}\" - Official ${ARCHITECTURE} BC Binary $(date +%Y%m%d-%H:%M)" > binary/.disk/info
+ echo "not_complete" > binary/.disk/cd_type
- cp "${LH_BASE}"/data/debian-cd/${LH_DISTRIBUTION}/${LH_ARCHITECTURE}_businesscard_udeb_include binary/.disk/udeb_include
- ;;
+ echo "Debian GNU/Linux ${VERSION} \"${DISTRIBUTION}\" - Official ${ARCHITECTURE} BC Binary $(date +%Y%m%d-%H:%M)" > binary/.disk/info
- disabled)
- echo "Debian GNU/Linux ${VERSION} \"${DISTRIBUTION}\" - Official ${ARCHITECTURE} LIVE Binary $(date +%Y%m%d-%H:%M)" > binary/.disk/info
- ;;
- esac
+ cp "${LH_BASE}"/data/debian-cd/${LH_DISTRIBUTION}/${LH_ARCHITECTURE}_businesscard_udeb_include binary/.disk/udeb_include
;;
- ubuntu)
- # FIXME
- echo "Ubuntu Linux ${VERSION} \"${DISTRIBUTION}\" - Unofficial ${ARCHITECTURE} LIVE/NETINST Binary $(date +%Y%m%d-%H:%M)" > binary/.disk/info
- # Ubuntu 7.04 "Feisty Fawn" - Release i386 (20070418)
+ disabled)
+ echo "Debian GNU/Linux ${VERSION} \"${DISTRIBUTION}\" - Official ${ARCHITECTURE} LIVE Binary $(date +%Y%m%d-%H:%M)" > binary/.disk/info
;;
esac
diff --git a/helpers/lh_chroot_sources b/helpers/lh_chroot_sources
index 61e0b66d7..632daf6e7 100755
--- a/helpers/lh_chroot_sources
+++ b/helpers/lh_chroot_sources
@@ -59,28 +59,15 @@ case "${1}" in
if [ "${LH_SECURITY}" = "enabled" ]
then
- case "${LH_MODE}" in
- debian)
- if [ "${LH_DISTRIBUTION}" != "sid" ] && [ "${LH_DISTRIBUTION}" != "unstable" ]
- then
- echo "deb ${LH_MIRROR_BOOTSTRAP_SECURITY} ${LH_DISTRIBUTION}/updates ${LH_SECTIONS}" >> chroot/etc/apt/sources.list
-
- if [ "${LH_SOURCE}" = "enabled" ]
- then
- echo "deb-src ${LH_MIRROR_BOOTSTRAP_SECURITY} ${LH_DISTRIBUTION}/updates ${LH_SECTIONS}" >> chroot/etc/apt/sources.list
- fi
- fi
- ;;
-
- ubuntu)
- echo "deb ${LH_MIRROR_BOOTSTRAP_SECURITY} ${LH_DISTRIBUTION}-security ${LH_SECTIONS}" >> chroot/etc/apt/sources.list
+ if [ "${LH_DISTRIBUTION}" != "sid" ] && [ "${LH_DISTRIBUTION}" != "unstable" ]
+ then
+ echo "deb ${LH_MIRROR_BOOTSTRAP_SECURITY} ${LH_DISTRIBUTION}/updates ${LH_SECTIONS}" >> chroot/etc/apt/sources.list
- if [ "${LH_SOURCE}" = "enabled" ]
- then
- echo "deb-src ${LH_MIRROR_BOOTSTRAP_SECURITY} ${LH_DISTRIBUTION}-security ${LH_SECTIONS}" >> chroot/etc/apt/sources.list
- fi
- ;;
- esac
+ if [ "${LH_SOURCE}" = "enabled" ]
+ then
+ echo "deb-src ${LH_MIRROR_BOOTSTRAP_SECURITY} ${LH_DISTRIBUTION}/updates ${LH_SECTIONS}" >> chroot/etc/apt/sources.list
+ fi
+ fi
fi
# Check local sources.list
@@ -237,28 +224,15 @@ case "${1}" in
if [ "${LH_SECURITY}" = "enabled" ]
then
- case "${LH_MODE}" in
- debian)
- if [ "${LH_DISTRIBUTION}" != "sid" ] && [ "${LH_DISTRIBUTION}" != "unstable" ]
- then
- echo "deb ${LH_MIRROR_BINARY_SECURITY} ${LH_DISTRIBUTION}/updates ${LH_SECTIONS}" >> chroot/etc/apt/sources.list
-
- if [ "${LH_SOURCE}" = "enabled" ]
- then
- echo "deb-src ${LH_MIRROR_BINARY_SECURITY} ${LH_DISTRIBUTION}/updates ${LH_SECTIONS}" >> chroot/etc/apt/sources.list
- fi
- fi
- ;;
-
- ubuntu)
- echo "deb ${LH_MIRROR_BINARY_SECURITY} ${LH_DISTRIBUTION}-security ${LH_SECTIONS}" >> chroot/etc/apt/sources.list
-
- if [ "${LH_SOURCE}" = "enabled" ]
- then
- echo "deb-src ${LH_MIRROR_BINARY_SECURITY} ${LH_DISTRIBUTION}-security ${LH_SECTIONS}" >> chroot/etc/apt/sources.list
- fi
- ;;
- esac
+ if [ "${LH_DISTRIBUTION}" != "sid" ] && [ "${LH_DISTRIBUTION}" != "unstable" ]
+ then
+ echo "deb ${LH_MIRROR_BINARY_SECURITY} ${LH_DISTRIBUTION}/updates ${LH_SECTIONS}" >> chroot/etc/apt/sources.list
+
+ if [ "${LH_SOURCE}" = "enabled" ]
+ then
+ echo "deb-src ${LH_MIRROR_BINARY_SECURITY} ${LH_DISTRIBUTION}/updates ${LH_SECTIONS}" >> chroot/etc/apt/sources.list
+ fi
+ fi
fi
# Check local sources.list
diff --git a/helpers/lh_config b/helpers/lh_config
index 7d8614a69..7e99e3008 100755
--- a/helpers/lh_config
+++ b/helpers/lh_config
@@ -75,7 +75,7 @@ USAGE="${PROGRAM} [--apt apt|aptitude]\n\
\t [--mirror-binary URL]\n\
\t [--mirror-bootstrap-security URL]\n\
\t [--mirror-bootstrap URL]\n\
-\t [--mode debian|debian-edu|ubuntu]\n\
+\t [--mode debian|debian-edu]\n\
\t [--net-filesystem nfs|cfs]\n\
\t [--net-mountoptions OPTIONS]\n\
\t [--net-path PATH]\n\
diff --git a/helpers/lh_source_disk b/helpers/lh_source_disk
index b744a8a54..433a71023 100755
--- a/helpers/lh_source_disk
+++ b/helpers/lh_source_disk
@@ -59,27 +59,19 @@ DISTRIBUTION="$(echo ${LH_DISTRIBUTION} | cut -b 1 | tr '[a-z]' '[A-Z]')"
DISTRIBUTION="${DISTRIBUTION}$(echo ${LH_DISTRIBUTION} | cut -b 2-)"
eval VERSION="$`echo VERSION_${LH_DISTRIBUTION}`"
-case "${LH_MODE}" in
- debian)
- if [ -d binary/pool/main/b/base-installer ]
- then
- if [ -d binary/pool/main/l/live-installer ]
- then
- TYPE="LIVE/INSTALL"
- fi
-
- TYPE="LIVE/NETINST"
- else
- TYPE="LIVE"
- fi
-
- echo "Debian GNU/Linux ${VERSION} \"${DISTRIBUTION}\" - Official ${ARCHITECTURE} ${TYPE} Source $(date +%Y%m%d-%H:%M)" > source/.disk/info
- ;;
-
- ubuntu)
- echo "Ubuntu Linux ${VERSION} \"${DISTRIBUTION}\" - Unofficial ${ARCHITECTURE} LIVE/NETINST Source $(date +%Y%m%d-%H:%M)" > source/.disk/info
- ;;
-esac
+if [ -d binary/pool/main/b/base-installer ]
+then
+ if [ -d binary/pool/main/l/live-installer ]
+ then
+ TYPE="LIVE/INSTALL"
+ fi
+
+ TYPE="LIVE/NETINST"
+else
+ TYPE="LIVE"
+fi
+
+echo "Debian GNU/Linux ${VERSION} \"${DISTRIBUTION}\" - Official ${ARCHITECTURE} ${TYPE} Source $(date +%Y%m%d-%H:%M)" > source/.disk/info
# Creating stage file
Create_stagefile .stage/source_disk
diff --git a/manpages/lh_config.de.1 b/manpages/lh_config.de.1
index 764e20468..2cdf7b709 100644
--- a/manpages/lh_config.de.1
+++ b/manpages/lh_config.de.1
@@ -111,7 +111,7 @@ Hier ist eine vollst\[:a]ndige Liste aller verf\[:u]gbaren Optionen f\[:u]r lh_c
.IP "\fB\-\-mirror\-bootstrap\fR \fIURL\fR" 4
-.IP "\fB\-\-mode\fR debian|debian\-edu|ubuntu" 4
+.IP "\fB\-\-mode\fR debian|debian\-edu" 4
.IP "\fB\-\-net\-filesystem\fR nfs|cfs" 4
diff --git a/manpages/lh_config.en.1 b/manpages/lh_config.en.1
index 84b7dc5f1..e952f0c86 100644
--- a/manpages/lh_config.en.1
+++ b/manpages/lh_config.en.1
@@ -111,7 +111,7 @@ Here is the complete list of available options for lh_config.
.IP "\fB\-\-mirror\-bootstrap\fR \fIURL\fR" 4
-.IP "\fB\-\-mode\fR debian|debian\-edu|ubuntu" 4
+.IP "\fB\-\-mode\fR debian|debian\-edu" 4
.IP "\fB\-\-net\-filesystem\fR nfs|cfs" 4