diff --git a/make-deb.sh b/make-deb.sh index e7fb7ce..9270194 100755 --- a/make-deb.sh +++ b/make-deb.sh @@ -17,57 +17,95 @@ check(){ echo "download packages:" mkdir ./downloads -echo "download libc6" +echo "download libc6..." wget "$LIBC6_DOWNLOAD_URL" -c -O ./downloads/libc6.deb check $? -echo "download libc_bin" +echo "download libc_bin..." wget "$LIBC_BIN_DOWNLOAD_URL" -c -O ./downloads/libc-bin.deb check $? -echo "download libstdc++6" +echo "download libstdc++6..." wget "$LIBSTDCxx6_DOWNLOAD_URL" -c -O ./downloads/libstdc++6.deb check $? +echo echo "extract packages:" +echo "extract libc6..." dpkg -x ./downloads/libc6.deb ./downloads/libc6 +check $? dpkg -e ./downloads/libc6.deb ./downloads/libc6/DEBIAN +check $? +echo "extract libc-bin..." dpkg -x ./downloads/libc-bin.deb ./downloads/libc-bin +check $? dpkg -e ./downloads/libc-bin.deb ./downloads/libc-bin/DEBIAN +check $? +echo "extract libstdc++6..." dpkg -x ./downloads/libstdc++6.deb ./downloads/libstdc++6 +check $? dpkg -e ./downloads/libstdc++6.deb ./downloads/libstdc++6/DEBIAN +check $? +echo echo "check packages:" +echo "check version libc6==lib_bin" LIBC6_VERSION=`cat ./downloads/libc6/DEBIAN/control | grep "^Version: .*"` +check $? LIBC6_VERSION=${LIBC6_VERSION:9} LIBC_BIN_VERSION=`cat ./downloads/libc-bin/DEBIAN/control | grep "^Version: .*"` +check $? LIBC_BIN_VERSION=${LIBC_BIN_VERSION:9} LIBSTDCxx6_VERSION=`cat ./downloads/libstdc++6/DEBIAN/control | grep "^Version: .*"` +check $? LIBSTDCxx6_VERSION=${LIBSTDCxx6_VERSION:9} +echo "$LIBC6_VERSION==$LIBC_BIN_VERSION" +[ "$LIBC6_VERSION" = "$LIBC_BIN_VERSION" ] +check $? + +echo "check arch libc6==libc_bin" LIBC6_ARCH=`cat ./downloads/libc6/DEBIAN/control | grep "^Architecture: .*"` +check $? LIBC6_ARCH=${LIBC6_ARCH:14} LIBC_BIN_ARCH=`cat ./downloads/libc-bin/DEBIAN/control | grep "^Architecture: .*"` +check $? LIBC_BIN_ARCH=${LIBC_BIN_ARCH:14} -LIBSTDCxx6_ARCH=`cat ./downloads/libstdc++6/DEBIAN/control | grep "^Architecture: .*"` -LIBSTDCxx6_ARCH=${LIBSTDCxx6_ARCH:14} -echo "check arch libc6==libc_bin $LIBC6_ARCH==$LIBC_BIN_ARCH" +echo "$LIBC6_ARCH==$LIBC_BIN_ARCH" [ "$LIBC6_ARCH" = "$LIBC_BIN_ARCH" ] check $? -echo "check arch libc6==libstdc++6 $LIBC6_ARCH==$LIBSTDCxx6_ARCH" + +echo "check arch libc6==libstdc++6" +LIBSTDCxx6_ARCH=`cat ./downloads/libstdc++6/DEBIAN/control | grep "^Architecture: .*"` +check $? +LIBSTDCxx6_ARCH=${LIBSTDCxx6_ARCH:14} + +echo "$LIBC6_ARCH==$LIBSTDCxx6_ARCH" [ "$LIBC6_ARCH" = "$LIBSTDCxx6_ARCH" ] check $? -echo "check version libc6==lib_bin $LIBC6_VERSION==$LIBC_BIN_VERSION" -check $? - +echo +echo "collect information:" +echo "glibc version:" GLIBC_VERSION=$LIBC6_VERSION -DEBIAN_DEB_ARCH=$LIBC6_ARCH -DEBIAN_MULTIARCH=`dpkg-architecture -A "$DEBIAN_DEB_ARCH" | grep "^DEB_TARGET_MULTIARCH=.*"` -DEBIAN_MULTIARCH=${DEBIAN_MULTIARCH:21} -LD_SO_LOCATION=`patchelf --print-interpreter "./downloads/libc6/lib/${DEBIAN_MULTIARCH}/libc.so.6"` -LIBC_SO_LOCATION="/lib/$DEBIAN_MULTIARCH/libc.so.6" -echo "$GLIBC_VERSION,$DEBIAN_DEB_ARCH,$DEBIAN_MULTIARCH,$LD_SO_LOCATION,$LIBC_SO_LOCATION" +echo "$GLIBC_VERSION" +echo "deb package architecture:" +DEBIAN_DEB_ARCH=$LIBC6_ARCH +echo "$DEBIAN_DEB_ARCH" + +echo "debian multiarch directory name:" +DEBIAN_MULTIARCH=`dpkg-architecture -A "$DEBIAN_DEB_ARCH" | grep "^DEB_TARGET_MULTIARCH=.*"` +check $? +DEBIAN_MULTIARCH=${DEBIAN_MULTIARCH:21} +echo "$DEBIAN_MULTIARCH" + +echo "ld.so location:" +LD_SO_LOCATION=`patchelf --print-interpreter "./downloads/libc6/lib/${DEBIAN_MULTIARCH}/libc.so.6"` +check $? +echo "$LD_SO_LOCATION" + +echo +echo "build package directories..." mkdir ./deb-contents mkdir ./deb-contents/DEBIAN mkdir ./deb-contents/usr @@ -75,6 +113,8 @@ mkdir ./deb-contents/usr/bin mkdir ./deb-contents/usr/lib mkdir "./deb-contents/usr/lib/$DEBIAN_MULTIARCH" +echo +echo "create control file..." echo "Package: additional-base-lib" >> ./deb-contents/DEBIAN/control echo "Version: $GLIBC_VERSION-$ABL_VERSION" >> ./deb-contents/DEBIAN/control echo "Section: utils" >> ./deb-contents/DEBIAN/control @@ -83,17 +123,34 @@ echo "Architecture: $DEBIAN_DEB_ARCH" >> ./deb-contents/DEBIAN/control echo "Maintainer: CongTianKong (gitee.com/CongTianKong)" >> ./deb-contents/DEBIAN/control echo "Depends: bubblewrap, bash, coreutils, shared-mime-info, xdg-utils" >> ./deb-contents/DEBIAN/control echo "Description: A script to run programs with newer libc." >> ./deb-contents/DEBIAN/control -echo " package built with make-deb.sh." >> ./deb-contents/DEBIAN/control +echo " package built with make-deb.sh from additional-base-lib project." >> ./deb-contents/DEBIAN/control +echo " libc6 download URL: $LIBC6_DOWNLOAD_URL" >> ./deb-contents/DEBIAN/control +echo " libc-bin download URL: $LIBC_BIN_DOWNLOAD_URL" >> ./deb-contents/DEBIAN/control +echo " libstdc++6 download URL: $LIBSTDCxx6_DOWNLOAD_URL" >> ./deb-contents/DEBIAN/control echo >> ./deb-contents/DEBIAN/control +check $? +echo +echo "gather files:" +echo "copy ablrun script..." cp ./scripts/ablrun ./deb-contents/usr/bin/ablrun +check $? + +echo "copy ablrun-appimage script..." cp ./scripts/ablrun-appimage ./deb-contents/usr/bin/ablrun-appimage +check $? + +echo "generate ablrun-normal script..." echo "#!/bin/bash" > ./deb-contents/usr/bin/ablrun-normal echo "ABL_TARGET_LD_SO_PATH=$LD_SO_LOCATION" >> ./deb-contents/usr/bin/ablrun-normal echo "ABL_ARCH_DIR=$DEBIAN_MULTIARCH" >> ./deb-contents/usr/bin/ablrun-normal cat ./scripts/ablrun-normal.1 >> ./deb-contents/usr/bin/ablrun-normal +check $? + +echo "chmod..." chmod a+x ./deb-contents/usr/bin/* +check $? rooted_readlink(){ rrl_result=$1 @@ -111,11 +168,28 @@ rooted_readlink(){ echo -n "$rrl_result" } +echo "copy many libc6 components..." cp -r "./downloads/libc6/lib/${DEBIAN_MULTIARCH}/" "./deb-contents/usr/lib/${DEBIAN_MULTIARCH}/additional-base-lib" +check $? + +echo "copy ld.so..." mkdir --parents "./deb-contents/usr/lib/${DEBIAN_MULTIARCH}/additional-base-lib/$LD_SO_LOCATION" rm -d "./deb-contents/usr/lib/${DEBIAN_MULTIARCH}/additional-base-lib/$LD_SO_LOCATION" cp `rooted_readlink "./downloads/libc6/$LD_SO_LOCATION" "./downloads/libc6"` "./deb-contents/usr/lib/${DEBIAN_MULTIARCH}/additional-base-lib/$LD_SO_LOCATION" -cp "./downloads/libc-bin/usr/bin/ldd" "./deb-contents/usr/lib/${DEBIAN_MULTIARCH}/additional-base-lib/ldd" -cp `rooted_readlink ./downloads/libstdc++6/usr/lib/${DEBIAN_MULTIARCH}/libstdc++.so.6 ./downloads/libstdc++6/` "./deb-contents/usr/lib/${DEBIAN_MULTIARCH}/additional-base-lib/libstdc++.so.6" +check $? -dpkg -b ./deb-contents "./additional-base-lib_${GLIBC_VERSION}-${ABL_VERSION}_${DEBIAN_DEB_ARCH}.deb" \ No newline at end of file +echo "copy ldd script..." +cp "./downloads/libc-bin/usr/bin/ldd" "./deb-contents/usr/lib/${DEBIAN_MULTIARCH}/additional-base-lib/ldd" +check $? + +echo "copy libstdc++..." +cp `rooted_readlink ./downloads/libstdc++6/usr/lib/${DEBIAN_MULTIARCH}/libstdc++.so.6 ./downloads/libstdc++6/` "./deb-contents/usr/lib/${DEBIAN_MULTIARCH}/additional-base-lib/libstdc++.so.6" +check $? + +echo +echo "build deb package:" +dpkg -b ./deb-contents "./additional-base-lib_${GLIBC_VERSION}-${ABL_VERSION}_${DEBIAN_DEB_ARCH}.deb" +check $? + +echo +echo "complete with no error!" \ No newline at end of file diff --git a/scripts/ablrun b/scripts/ablrun index ac22ba3..6b868b1 100755 --- a/scripts/ablrun +++ b/scripts/ablrun @@ -6,9 +6,11 @@ then echo " The script is part of additional-base-lib. The package provides a" echo " simple way to solve the compatible problem between application and" echo " glibc, powered by bubblewrap." - echo " All the library files, which distributed with additional-base-lib," - echo " are taken from debian bookworm. The script itself create by enforcee" - echo " from deepin forum <https://bbs.deepin.org/>. There's no lisence" + echo + echo " All the library files, which packed with additional-base-lib," + echo " are taken from one GNU/Linux distribution. You may found information" + echo " in package control files. The scripts theirselves were created by" + echo " CongTianKong <https://gitee.com/CongTianKong>. There's no lisence" echo " nor copyright restriction with The script. Feel free to deal with." echo echo " This script auto-detects normal executable and appimage, and then" diff --git a/scripts/ablrun-appimage b/scripts/ablrun-appimage index 89a613a..2df44a2 100755 --- a/scripts/ablrun-appimage +++ b/scripts/ablrun-appimage @@ -8,6 +8,10 @@ then echo " You have to ensure input file IS an appimage, for this script" echo " does not check. If you input other files, It will become" echo " unpredictable." + echo + echo " There is a more convenient script to handle both normal executable" + echo " and appimage, called ablrun." + echo " usage: ablrun [command [arguments ...]]" exit fi diff --git a/scripts/ablrun-normal.1 b/scripts/ablrun-normal.1 index bb9be0e..f946592 100755 --- a/scripts/ablrun-normal.1 +++ b/scripts/ablrun-normal.1 @@ -6,15 +6,19 @@ then echo " The script is part of additional-base-lib. The package provides a" echo " simple way to solve the compatible problem between application and" echo " glibc, powered by bubblewrap." - echo " All the library files, which distributed with additional-base-lib," - echo " are taken from debian bookworm. The script itself create by enforcee" - echo " from deepin forum <https://bbs.deepin.org/>. There's no lisence" + echo + echo " All the library files, which packed with additional-base-lib," + echo " are taken from one GNU/Linux distribution. You may found information" + echo " in package control files. The scripts theirselves were created by" + echo " CongTianKong <https://gitee.com/CongTianKong>. There's no lisence" echo " nor copyright restriction with The script. Feel free to deal with." echo echo " If you're going to run appimage with additional-base-lib, you may" echo " need ablrun-appimage." - echo " There is a simpler script to handle both normal executable and" - echo " appimage, called ablrun. usage: ablrun [command [arguments ...]]" + echo + echo " There is a more convenient script to handle both normal executable" + echo " and appimage, called ablrun." + echo " usage: ablrun [command [arguments ...]]" exit fi