summaryrefslogtreecommitdiff
path: root/data/live-build-config/hooks/live/99-strip-symbols.chroot
blob: 704f9cb3d4a610077cfafba455233e798c91da3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/bin/sh

#
# Discard symbols and other data from object files.
#
# Reference:
# https://www.linuxfromscratch.org/lfs/view/systemd/chapter08/stripping.html
# https://www.debian.org/doc/debian-policy/ch-files.html
#

# Set variables.
STRIPCMD_REGULAR="strip --remove-section=.comment --remove-section=.note --preserve-dates"
STRIPCMD_DEBUG="strip --strip-debug --remove-section=.comment --remove-section=.note --preserve-dates"
STRIPCMD_UNNEEDED="strip --strip-unneeded --remove-section=.comment --remove-section=.note --preserve-dates"
STRIPDIR_REGULAR="
"
STRIPDIR_DEBUG="
/usr/lib/modules
"
STRIPDIR_UNNEEDED="
/etc/hsflowd/modules
/usr/bin
/usr/lib/openvpn
/usr/lib/x86_64-linux-gnu
/usr/lib32
/usr/lib64
/usr/libx32
/usr/sbin
"
STRIP_EXCLUDE=`dpkg-query -L libbinutils | grep '.so'`

# Perform stuff.
echo "Stripping symbols..."

# List excluded files.
echo "Exclude files: ${STRIP_EXCLUDE}"

# CMD: strip
for DIR in ${STRIPDIR_REGULAR}; do
  echo "Parse dir (strip): ${DIR}"
  find ${DIR} -type f -exec file {} \; | grep 'not stripped' | cut -d ":" -f 1 | while read FILE; do
    echo "${STRIP_EXCLUDE}" | grep -F -q -w "${FILE}"
    if [ $? -ne 0 ]; then
      echo "Strip file (strip): ${FILE}"
      ${STRIPCMD_REGULAR} ${FILE}
    fi
  done
done

# CMD: strip --strip-debug
for DIR in ${STRIPDIR_DEBUG}; do
  echo "Parse dir (strip-debug): ${DIR}"
  find ${DIR} -type f -exec file {} \; | grep 'not stripped' | cut -d ":" -f 1 | while read FILE; do
    echo "${STRIP_EXCLUDE}" | grep -F -q -w "${FILE}"
    if [ $? -ne 0 ]; then
      echo "Strip file (strip-debug): ${FILE}"
      ${STRIPCMD_DEBUG} ${FILE}
    fi
  done
done

# CMD: strip --strip-unneeded
for DIR in ${STRIPDIR_UNNEEDED}; do
  echo "Parse dir (strip-unneeded: ${DIR}"
  find ${DIR} -type f -exec file {} \; | grep 'not stripped' | cut -d ":" -f 1 | while read FILE; do
    echo "${STRIP_EXCLUDE}" | grep -F -q -w "${FILE}"
    if [ $? -ne 0 ]; then
      echo "Strip file (strip-unneeded): ${FILE}"
      ${STRIPCMD_UNNEEDED} ${FILE}
    fi
  done
done

# Remove binutils package.
apt-get -y purge --autoremove binutils