123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- #!/bin/bash
- set -e
- DEB_DOWNLOAD_DIR=$(realpath "$(pwd)/../../")
- OUTPUT_DIR=${DEB_DOWNLOAD_DIR}/output
- SYSROOT_DIR=${OUTPUT_DIR}/sysroot
- PACKAGES=("libc-bin" "libstdc++6")
- export DOCKER_TAG=ubuntu2404
- TAR_NAME="glibc-ubuntu2404.tar.xz"
- TAR_PATH="$OUTPUT_DIR/$TAR_NAME"
- if ! mkdir -p "$OUTPUT_DIR"; then
- echo "Error: Failed to create output directory" >&2
- exit 1
- fi
- if ! mkdir -p "$SYSROOT_DIR"; then
- echo "Error: Failed to create sysroot directory" >&2
- exit 1
- fi
- pushd . || { echo "pushd failed" >&2; exit 1; }
- cd $DEB_DOWNLOAD_DIR || { echo "cd to $DEB_DOWNLOAD_DIR failed" >&2; exit 1; }
- if ! make clean; then
- echo "Warning: make clean failed, retrying with sudo..." >&2
- if ! sudo make clean; then
- echo "Error: sudo make clean also failed" >&2
- exit 1
- fi
- fi
- for PACKAGE in "${PACKAGES[@]}"; do
- export PACKAGE_NAME=$PACKAGE
- if ! make download; then
- echo "Error: make download failed for $PACKAGE" >&2
- exit 1
- fi
- done
- if ! make unpack; then
- echo "Error: make unpack failed" >&2
- exit 1
- fi
- pushd . || { echo "pushd failed" >&2; exit 1; }
- cd $SYSROOT_DIR || { echo "cd to $SYSROOT_DIR failed" >&2; exit 1; }
- # Create required symlinks in sysroot
- if ! ln -sf usr/lib $SYSROOT_DIR/lib; then
- echo "Warning: lib symlink creation failed with normal user, retrying with sudo..." >&2
- if ! sudo ln -sf usr/lib $SYSROOT_DIR/lib; then
- echo "Error: failed to create lib symlink" >&2
- exit 1
- else
- echo "/usr/lib symlink creation successful with sudo." >&2
- fi
- fi
- if ! ln -sf usr/lib64 $SYSROOT_DIR/lib64; then
- if ! sudo ln -sf usr/lib64 $SYSROOT_DIR/lib64; then
- echo "Error: failed to create lib64 symlink" >&2
- exit 1
- else
- echo "/usr/lib64 symlink creation successful with sudo." >&2
- fi
- fi
- popd || { echo "popd failed" >&2; exit 1; }
- if ! sudo chmod a+r $SYSROOT_DIR ; then
- echo "Error: Failed to set read permissions on $SYSROOT_DIR" >&2
- exit 1
- fi
- if ! sudo chmod a+rw $OUTPUT_DIR ; then
- echo "Error: Failed to set read/write permissions on $OUTPUT_DIR" >&2
- exit 1
- fi
- pushd . || { echo "pushd failed" >&2; exit 1; }
- cd $OUTPUT_DIR || { echo "cd to $OUTPUT_DIR failed" >&2; exit 1; }
- echo "Packaging..."
- # Package sysroot into tarball
- if ! sudo tar -cJf $OUTPUT_DIR/${TAR_NAME} sysroot ; then
- echo "Error: failed to create tarball" >&2
- exit 1
- fi
- echo "Calculating MD5 and renaming the tarball..."
- # Calculate MD5 and rename the tarball
- MD5_SUM=$(md5sum $OUTPUT_DIR/${TAR_NAME} | cut -d' ' -f1)
- DATE_SUFFIX=$(date +"%Y%m%d%H%M")
- NEW_TAR_NAME="${TAR_NAME%.tar.xz}-${DATE_SUFFIX}-${MD5_SUM}.tar.xz"
- if ! mv $OUTPUT_DIR/${TAR_NAME} $OUTPUT_DIR/${NEW_TAR_NAME}; then
- echo "Error: failed to rename tarball with MD5 sum" >&2
- exit 1
- fi
- echo "Package ${NEW_TAR_NAME} downloaded, unpacked, and sysroot prepared successfully."
- popd || { echo "popd failed" >&2; exit 1; }
- popd || { echo "popd failed" >&2; exit 1; }
|