pack.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #!/bin/bash
  2. set -e
  3. DEB_DOWNLOAD_DIR=$(realpath "$(pwd)/../../")
  4. OUTPUT_DIR=${DEB_DOWNLOAD_DIR}/output
  5. SYSROOT_DIR=${OUTPUT_DIR}/sysroot
  6. PACKAGES=("libc-bin" "libstdc++6")
  7. export DOCKER_TAG=ubuntu2404
  8. TAR_NAME="glibc-ubuntu2404.tar.xz"
  9. TAR_PATH="$OUTPUT_DIR/$TAR_NAME"
  10. if ! mkdir -p "$OUTPUT_DIR"; then
  11. echo "Error: Failed to create output directory" >&2
  12. exit 1
  13. fi
  14. if ! mkdir -p "$SYSROOT_DIR"; then
  15. echo "Error: Failed to create sysroot directory" >&2
  16. exit 1
  17. fi
  18. pushd . || { echo "pushd failed" >&2; exit 1; }
  19. cd $DEB_DOWNLOAD_DIR || { echo "cd to $DEB_DOWNLOAD_DIR failed" >&2; exit 1; }
  20. if ! make clean; then
  21. echo "Warning: make clean failed, retrying with sudo..." >&2
  22. if ! sudo make clean; then
  23. echo "Error: sudo make clean also failed" >&2
  24. exit 1
  25. fi
  26. fi
  27. for PACKAGE in "${PACKAGES[@]}"; do
  28. export PACKAGE_NAME=$PACKAGE
  29. if ! make download; then
  30. echo "Error: make download failed for $PACKAGE" >&2
  31. exit 1
  32. fi
  33. done
  34. if ! make unpack; then
  35. echo "Error: make unpack failed" >&2
  36. exit 1
  37. fi
  38. pushd . || { echo "pushd failed" >&2; exit 1; }
  39. cd $SYSROOT_DIR || { echo "cd to $SYSROOT_DIR failed" >&2; exit 1; }
  40. # Create required symlinks in sysroot
  41. if ! ln -sf usr/lib $SYSROOT_DIR/lib; then
  42. echo "Warning: lib symlink creation failed with normal user, retrying with sudo..." >&2
  43. if ! sudo ln -sf usr/lib $SYSROOT_DIR/lib; then
  44. echo "Error: failed to create lib symlink" >&2
  45. exit 1
  46. else
  47. echo "/usr/lib symlink creation successful with sudo." >&2
  48. fi
  49. fi
  50. if ! ln -sf usr/lib64 $SYSROOT_DIR/lib64; then
  51. if ! sudo ln -sf usr/lib64 $SYSROOT_DIR/lib64; then
  52. echo "Error: failed to create lib64 symlink" >&2
  53. exit 1
  54. else
  55. echo "/usr/lib64 symlink creation successful with sudo." >&2
  56. fi
  57. fi
  58. popd || { echo "popd failed" >&2; exit 1; }
  59. if ! sudo chmod a+r $SYSROOT_DIR ; then
  60. echo "Error: Failed to set read permissions on $SYSROOT_DIR" >&2
  61. exit 1
  62. fi
  63. if ! sudo chmod a+rw $OUTPUT_DIR ; then
  64. echo "Error: Failed to set read/write permissions on $OUTPUT_DIR" >&2
  65. exit 1
  66. fi
  67. pushd . || { echo "pushd failed" >&2; exit 1; }
  68. cd $OUTPUT_DIR || { echo "cd to $OUTPUT_DIR failed" >&2; exit 1; }
  69. echo "Packaging..."
  70. # Package sysroot into tarball
  71. if ! sudo tar -cJf $OUTPUT_DIR/${TAR_NAME} sysroot ; then
  72. echo "Error: failed to create tarball" >&2
  73. exit 1
  74. fi
  75. echo "Calculating MD5 and renaming the tarball..."
  76. # Calculate MD5 and rename the tarball
  77. MD5_SUM=$(md5sum $OUTPUT_DIR/${TAR_NAME} | cut -d' ' -f1)
  78. DATE_SUFFIX=$(date +"%Y%m%d%H%M")
  79. NEW_TAR_NAME="${TAR_NAME%.tar.xz}-${DATE_SUFFIX}-${MD5_SUM}.tar.xz"
  80. if ! mv $OUTPUT_DIR/${TAR_NAME} $OUTPUT_DIR/${NEW_TAR_NAME}; then
  81. echo "Error: failed to rename tarball with MD5 sum" >&2
  82. exit 1
  83. fi
  84. echo "Package ${NEW_TAR_NAME} downloaded, unpacked, and sysroot prepared successfully."
  85. popd || { echo "popd failed" >&2; exit 1; }
  86. popd || { echo "popd failed" >&2; exit 1; }