192 lines
No EOL
5.1 KiB
Bash
Executable file
192 lines
No EOL
5.1 KiB
Bash
Executable file
#!/bin/bash
|
|
# Build minimal systemd natively on z/VM RHEL 9.6
|
|
# This script should be run on the z/VM system via SSH
|
|
|
|
set -e
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
# Configuration
|
|
SYSTEMD_VERSION="256.7"
|
|
BUILD_DIR="$HOME/systemd-build"
|
|
OUTPUT_DIR="$HOME/systemd-minimal"
|
|
PREFIX="/usr"
|
|
|
|
echo -e "${GREEN}=== Building minimal systemd on s390x z/VM ===${NC}"
|
|
echo "This will build systemd natively on RHEL 9.6 s390x"
|
|
|
|
# Create directories
|
|
mkdir -p "$BUILD_DIR" "$OUTPUT_DIR"
|
|
|
|
# Install build dependencies if not already present
|
|
echo -e "${YELLOW}Installing build dependencies...${NC}"
|
|
sudo dnf install -y \
|
|
gcc \
|
|
gcc-c++ \
|
|
meson \
|
|
ninja-build \
|
|
pkgconfig \
|
|
gperf \
|
|
glib2-devel \
|
|
libcap-devel \
|
|
libmount-devel \
|
|
libblkid-devel \
|
|
libuuid-devel \
|
|
libseccomp-devel \
|
|
libacl-devel \
|
|
libattr-devel \
|
|
kmod-devel \
|
|
elfutils-devel \
|
|
dbus-devel \
|
|
python3-jinja2 \
|
|
wget \
|
|
tar \
|
|
gzip
|
|
|
|
# Download systemd
|
|
cd "$BUILD_DIR"
|
|
if [ ! -d "systemd-$SYSTEMD_VERSION" ]; then
|
|
echo -e "${YELLOW}Downloading systemd $SYSTEMD_VERSION...${NC}"
|
|
wget -q "https://github.com/systemd/systemd/archive/v$SYSTEMD_VERSION.tar.gz"
|
|
tar xzf "v$SYSTEMD_VERSION.tar.gz"
|
|
fi
|
|
|
|
cd "systemd-$SYSTEMD_VERSION"
|
|
|
|
# Configure minimal build for s390x
|
|
echo -e "${YELLOW}Configuring minimal systemd build...${NC}"
|
|
meson setup build-minimal \
|
|
--prefix="$PREFIX" \
|
|
--sysconfdir=/etc \
|
|
--localstatedir=/var \
|
|
-Drootprefix=/usr \
|
|
-Drootlibdir=/lib \
|
|
-Dmode=release \
|
|
-Dlink-udev-shared=true \
|
|
-Dsplit-bin=false \
|
|
-Dsplit-usr=false \
|
|
-Dresolve=false \
|
|
-Dnetworkd=false \
|
|
-Dlogind=false \
|
|
-Dmachined=false \
|
|
-Dhomed=false \
|
|
-Dportabled=false \
|
|
-Duserdb=false \
|
|
-Dbootloader=false \
|
|
-Defi=false \
|
|
-Dlibcryptsetup=false \
|
|
-Dlibiptc=false \
|
|
-Dlibidn2=false \
|
|
-Dlibcurl=false \
|
|
-Dlibidn=false \
|
|
-Dlz4=false \
|
|
-Dxz=false \
|
|
-Dzlib=false \
|
|
-Dbzip2=false \
|
|
-Dzstd=false \
|
|
-Dgcrypt=false \
|
|
-Dopenssl=false \
|
|
-Dp11kit=false \
|
|
-Dbinfmt=false \
|
|
-Dcoredump=false \
|
|
-Dpolkit=false \
|
|
-Dman=false \
|
|
-Dhtml=false \
|
|
-Dtests=false \
|
|
-Dinstall-tests=false \
|
|
-Dnss-myhostname=false \
|
|
-Dnss-mymachines=false \
|
|
-Dnss-resolve=false \
|
|
-Dnss-systemd=false \
|
|
-Dpam=false \
|
|
-Dselinux=false \
|
|
-Dapparmor=false \
|
|
-Daudit=false \
|
|
-Dima=false \
|
|
-Dsmack=false \
|
|
-Dseccomp=true \
|
|
-Dxkbcommon=false \
|
|
-Dpcre2=false \
|
|
-Dglib=false \
|
|
-Ddbus=true \
|
|
-Dgnutls=false \
|
|
-Dmicrohttpd=false \
|
|
-Dlibfido2=false \
|
|
-Dtpm=false \
|
|
-Dtpm2=false \
|
|
-Dqrencode=false \
|
|
-Db_lto=false \
|
|
-Db_pie=true
|
|
|
|
# Build
|
|
echo -e "${YELLOW}Building systemd...${NC}"
|
|
ninja -C build-minimal
|
|
|
|
# Install to output directory
|
|
echo -e "${YELLOW}Installing to $OUTPUT_DIR...${NC}"
|
|
DESTDIR="$OUTPUT_DIR" ninja -C build-minimal install
|
|
|
|
# Strip binaries
|
|
echo -e "${YELLOW}Stripping binaries...${NC}"
|
|
find "$OUTPUT_DIR" -type f -executable -exec file {} \; | \
|
|
grep 'ELF.*executable' | cut -d: -f1 | \
|
|
xargs -r strip --strip-unneeded
|
|
|
|
# Remove non-essential files
|
|
echo -e "${YELLOW}Removing non-essential files...${NC}"
|
|
rm -rf "$OUTPUT_DIR/usr/share/doc"
|
|
rm -rf "$OUTPUT_DIR/usr/share/man"
|
|
rm -rf "$OUTPUT_DIR/usr/share/locale"
|
|
rm -rf "$OUTPUT_DIR/usr/share/factory"
|
|
rm -rf "$OUTPUT_DIR/usr/share/bash-completion"
|
|
rm -rf "$OUTPUT_DIR/usr/share/zsh"
|
|
|
|
# Keep only essential binaries
|
|
cd "$OUTPUT_DIR/usr/bin"
|
|
for binary in *; do
|
|
case "$binary" in
|
|
systemctl|journalctl|systemd-*) ;;
|
|
*) rm -f "$binary" ;;
|
|
esac
|
|
done
|
|
|
|
# Copy essential system libraries for runtime
|
|
echo -e "${YELLOW}Copying runtime libraries...${NC}"
|
|
mkdir -p "$OUTPUT_DIR/lib" "$OUTPUT_DIR/lib64"
|
|
|
|
# Copy dynamic linker and essential libraries
|
|
cp -L /lib64/ld-linux-s390x.so.2 "$OUTPUT_DIR/lib/" 2>/dev/null || true
|
|
cp -L /lib64/ld64.so.1 "$OUTPUT_DIR/lib/" 2>/dev/null || true
|
|
|
|
# Copy essential glibc and other system libraries
|
|
for lib in libc.so.6 libm.so.6 libpthread.so.0 libdl.so.2 librt.so.1 \
|
|
libcrypt.so.1 libcap.so.2 libblkid.so.1 libuuid.so.1 \
|
|
libmount.so.1 libseccomp.so.2 libacl.so.1 libattr.so.1 \
|
|
libkmod.so.2 libdw.so.1 libelf.so.1 libz.so.1 \
|
|
libbz2.so.1 liblzma.so.5 libdbus-1.so.3; do
|
|
find /lib64 /usr/lib64 -name "$lib*" -exec cp -L {} "$OUTPUT_DIR/lib64/" \; 2>/dev/null || true
|
|
done
|
|
|
|
# Create lib64 symlink
|
|
ln -sf lib "$OUTPUT_DIR/lib64" 2>/dev/null || true
|
|
|
|
# Create tarball for transfer
|
|
cd "$OUTPUT_DIR"
|
|
echo -e "${YELLOW}Creating tarball...${NC}"
|
|
tar czf "$HOME/systemd-minimal-s390x.tar.gz" .
|
|
|
|
# Calculate sizes
|
|
TOTAL_SIZE=$(du -sh "$OUTPUT_DIR" | cut -f1)
|
|
TARBALL_SIZE=$(du -sh "$HOME/systemd-minimal-s390x.tar.gz" | cut -f1)
|
|
|
|
echo -e "${GREEN}✓ Minimal systemd built successfully!${NC}"
|
|
echo -e "${GREEN}Total size: $TOTAL_SIZE${NC}"
|
|
echo -e "${GREEN}Tarball size: $TARBALL_SIZE${NC}"
|
|
echo -e "${GREEN}Tarball location: $HOME/systemd-minimal-s390x.tar.gz${NC}"
|
|
echo ""
|
|
echo "To transfer back to your local system:"
|
|
echo "scp -i zvm.pem linux1@148.100.77.9:~/systemd-minimal-s390x.tar.gz output/" |