s243a

mk_bb_links.sh (draft #1)

Mar 22nd, 2021 (edited)
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.01 KB | None | 0 0
  1. #!/bin/bash
  2. CWD="$PWD"
  3. BB_NAME_TARGET="${1:-busybox}"
  4. BB_NAME_SOURCE="$BB_NAME_TARGET"
  5.  
  6. CHROOT=no #If chroot=yes then locate full utils using chroot.
  7. #Add_BB_Wrapper=no
  8. USE_BB_FILE_LIST=yes
  9. #USE_BB_FULL_PATH=yes
  10. WRITE_NORMAL_LOCATION=yes #if no then BB links will be written to BB_UTIL_DIR only.
  11. MOVE_BB=no
  12. COPY_BB=yes #Copy takes precedence over move.
  13. CHECK_SOURCE=yes #Don't write sylink location in normal location if it isn't a symlink in the source.
  14. DELETE_SOURCE=no #Delete source file if it is a symlink
  15.  
  16. #CHROOT_DIR="$CWD/puppy_fossapup64_9.5.sfs.extracted"
  17. TARGET_DIR="$CWD/puppy_fossapup64_9.5_busybox"
  18. SOURCE_DIR="$CWD/puppy_fossapup64_9.5.sfs.extracted"
  19. CHROOT_DIR="$SOURCE_DIR"
  20.  
  21. mkdir -p "$TARGET_DIR"
  22.  
  23. BB_UTIL_DIR_rel="${BB_UTIL_DIR_rel:-/bin/bb_utils}"
  24. BB_UTIL_DIR="$TARGET_DIR/${BB_UTIL_DIR_rel:-/bin/bb_utils}"
  25.  
  26. BB_DIR_rel="${BB_DIR_rel:-/bin}"
  27. BB_TARGET_DIR="$TARGET_DIR${BB_DIR_rel:-/bin}"
  28. #BB_DIR=
  29. BB_SOURCE_DIR="$CHROOT_DIR${BB_DIR_rel:-/bin}"
  30. BB_DIR_CHROOT="$BB_SOURCE_DIR"
  31.  
  32. BB_TARGET_PATH="$BB_TARGET_DIR/$BB_NAME_TARGET"
  33. BB_SOURCE_PATH="$BB_SOURCE_DIR/$BB_NAME_SOURCE"
  34.  
  35. BB_LIST_rel=/bin/busybox.lst
  36. BB_LIST="$SOURCE_DIR$BB_LIST_rel"
  37.  
  38. function mk_parrent_dir(){
  39. parrent="$(dirname $1)"
  40. if [ ${#parrent} -le 1 ]; then
  41. return 0
  42. else [ ! -d "$TARGET_DIR$parrent" ];
  43. if [ ! -z "`which cpio`" ]; then
  44. ( cd "$SOURCE_DIR"
  45. echo "./$1" | \
  46. cpio -pdu "$TARGET_DIR" )
  47. else
  48. mkdir -p "$TARGET_DIR/$1"
  49. fi
  50. fi
  51. }
  52.  
  53. if [ ! -e "$BB_TARGET_PATH" ]; then
  54. if [ "$MOVE_BB" = yes ] && [ "$CHROOT_DIR" != "$SOURCE_DIR" ] && [ "$COPY_BB" != yes ]; then
  55. mk_parrent_dir "$BB_DIR_rel/$BB_NAME_TARGET"
  56. mv "$BB_SOURCE_PATH" "$BB_TARGET_PATH"
  57. elif [ "$MOVE_BB" = yes ] || [ "$COPY_BB" = yes ]; then
  58. mk_parrent_dir "$BB_DIR_rel/$BB_NAME_TARGET"
  59. [ ! -e "$BB_TARGET_PATH" ] && cp -a "$BB_SOURCE_PATH" "$BB_TARGET_PATH"
  60. fi
  61. fi
  62.  
  63.  
  64. #BB_PATH_rel=/bin/busybox
  65. #BB_PATH=$CHROOT_DIR/${BB_PATH_rel:-/bin/busybox}
  66.  
  67.  
  68.  
  69.  
  70.  
  71. CHROOT_CMD="`which chroot-FULL`"
  72. [ -z "$CHROOT_CMD" ] && CHROOT_CMD="`which chroot`"
  73.  
  74. function bb_list_full() { #$1=busybox or busybox-path
  75. local bb_name="${1:-busybox}"
  76. if [ ! -z "$BB_LIST" ]; then
  77. cat "$BB_LIST"
  78. elif [ ! -z "$CHROOT_DIR" ]; then
  79. "$CHROOT_CMD" "$CHROOT_DIR" "$bb_name" --list-full || \
  80. "$CHROOT_CMD" "$CHROOT_DIR" "$BB_DIR_rel/$bb_name" --list-full
  81. else #Requires static busybox
  82. "$BB_TARGET_DIR/$bb_name" --list-full
  83. fi
  84. }
  85. function bb_list() { #$1=busybox or busybox-path
  86. local bb_name="${1:-busybox}"
  87. if [ ! -z "$BB_LIST" ]; then
  88. cat "$BB_LIST" | sed -r 's@^.*/@@g'
  89. elif [ ! -z "$CHROOT_DIR" ]; then
  90. "$CHROOT_CMD" "$CHROOT_DIR" "$bb_name" --list || \
  91. "$CHROOT_CMD" "$CHROOT_DIR" "$BB_DIR_rel/$bb_name" --list
  92. else #Requires static busybox
  93. "$TARGET_DIR$BB_DIR_rel/$bb_name" --list
  94. fi
  95. }
  96.  
  97. rp_help_1="$(realpath --help | grep '--relative-to')"
  98. function find_rel_path(){ #source dir, target dir
  99. if [ ! -z "${#rp_help_1}" ]; then
  100. find_rel_path_result="$(realpath --relative-to="$1" "$2")"
  101. else
  102. find_rel_path_result="$(echo "$1" | sed -r 's/([^//]*)/../g' )/$2"
  103. fi
  104. }
  105. find_rel_path "$BB_UTIL_DIR" "$BB_TARGET_DIR"; UTIL_DIR_rel_BB_DIR="$find_rel_path_result"
  106.  
  107.  
  108. [ ! -e "$BB_UTIL_DIR" ] && mkdir -p "$BB_UTIL_DIR"
  109.  
  110. #for aBB_NAME in busybox.nosuid busybox.suid busybox; do
  111. aBB_NAME=busybox #TODO. let other bb names be used.
  112. cd "$BB_UTIL_DIR"
  113. [ ! -e "./$aBB_NAME" ] && continue
  114. [ $(file --mime-type "$BB_TARGET_DIR/$aBB_NAME" | grep -c text) -gt 0 ] && continue
  115. #TODO, skip busybox if it is a wrapper script
  116. #TODO considering adding an EOF at the end of --list to make sure that the read teminates
  117. bb_list "$aBB_NAME" |
  118. while read UTIL_NAME; do
  119. if [ ! -e "$BB_UTIL_DIR/$UTIL_NAME" ] && [ ! -z "$BB_UTIL_DIR" ]; then
  120. cd "$BB_UTIL_DIR"
  121. ln -s "$UTIL_DIR_rel_BB_DIR/$aBB_NAME" "$UTIL_NAME"
  122. fi
  123. #if [ "$USE_BB_FULL_PATH" = yes ] || [ "$USE_BB_FILE_LIST" = yes ]; then
  124. if [ "$WRITE_NORMAL_LOCATION" = yes ]; then
  125. FP="/$(bb_list_full "$aBB_NAME" | grep -E "/$UTIL_NAME"'$' | sed -r 's@^/@@g')"
  126. if [ "$CHECK_SOURCE" = yes ]; then
  127. [ ! -L "$SOURCE_DIR$FP" ] && continue
  128. fi
  129. cd "$(dirname "$TARGET_DIR$FP")"
  130. if [ ! -z "$FP" ]; then
  131. find_rel_path "$TARGET_DIR$(dirname "$FP")" "$BB_TARGET_PATH"; REL_SYM_TO_BB="$find_rel_path_result"
  132. if [ ! -e "$TARGET_DIR/$aBB_NAME" ]; then
  133. ln -s "$REL_SYM_TO_BB" "$UTIL_NAME"
  134. fi
  135. fi
  136. fi
  137. done
  138.  
  139. if [ "$MOVE_BB" = yes ] && [ -e "$BB_SOURCE_PATH" ]; then
  140. rm "$BB_SOURCE_PATH"
  141. fi
  142.  
  143. #done
  144.  
  145. #if [ Add_BB_Wrapper = yes ] && [ ! -e $BB_DIR/busybox ]; then
  146. #echo "#!/bin/sh
  147. #script=\${0##*/}
  148. #script2=\$1
  149. #if [ \"\$script\" = \"busybox\" ]; then
  150. # script=\$script2 ; shift
  151. #fi
  152. #exec \"$BB_UTIL_DIR/\$script\" \"\$@\"" > "/$BB_DIR/busybox"
  153. #chmod +x "/$BB_DIR/busybox"
  154. #fi
  155.  
Add Comment
Please, Sign In to add comment