summaryrefslogtreecommitdiffstats
path: root/debian/_buildscripts/local/internals/_pbuilder.sh
blob: f8056de82b3bc2488868569dbf93e53129c1b7a7 (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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/bin/bash

source "$SCRIPT_DIR/internals/prebuilt_pkg_paths.txt"

function run_pdebuild()
{
  # pbuilder absolute paths
  PBUILDER_HOOK_DIR="/var/cache/pbuilder/hooks"
  PBUILDER_SHELL_HOOK_TEMPLATE="$SCRIPT_DIR/internals/C10shell"
  PBUILDER_SHELL_HOOK="$PBUILDER_HOOK_DIR/C10shell"
  PBUILDER_DEPS_HOOK="$PBUILDER_HOOK_DIR/D05deps"

  # Sign packages optino
  OPT_SIGN_PKG_PBUILDER=""
  if [ ! -z "$GPG_SIGN_KEYID" ]; then
    OPT_SIGN_PKG_LOCAL="-k$GPG_SIGN_KEYID"
    OPT_SIGN_PKG_PBUILDER="--auto-debsign --debsign-k $GPG_SIGN_KEYID"
  fi

  ## Build module in a clean chroot environment using pbuilder
  # Install/remove shell hook
  if [ ! -d "$PBUILDER_HOOK_DIR" ]; then
    mkdir -p "$PBUILDER_HOOK_DIR"
  fi
  if [ "$bool_SHELL_HOOK" = "y" ]; then
    cp "$PBUILDER_SHELL_HOOK_TEMPLATE" "$PBUILDER_SHELL_HOOK"
    chmod a+x "$PBUILDER_SHELL_HOOK"
  else
    if [ -x "$PBUILDER_SHELL_HOOK" ]; then
      rm "$PBUILDER_SHELL_HOOK"
    fi
  fi
  # Build using pbuilder
  echo -e "${CYellow}> Building using pbuilder${CNone}"
  # Create pbuilder hook to make sure all available packages are scanned
  # Store any existing D05 hook as a temporary file, this will be reinstated at the end
  cat <<END_D05_01 > "$PBUILDER_DEPS_HOOK"
#!/bin/sh
(cd "$TDE_DEBS_DIR"; apt-ftparchive packages . > Packages)
echo "deb [trusted=yes] file:$TDE_DEBS_DIR ./" >> /etc/apt/sources.list
END_D05_01

  # -- prebuilt TDE packages
  if [[ "$USE_PREBUILD_PACKAGES" = "y" ]]; then
    # Get building branch from .tdescminfo file
    if [[ -f "$MOD_BUILD_PATH/.tdescminfo" ]]; then
      BUILD_BRANCH=`sed -n -r "s/^Revision: ([^-]+)-.*/\1/p" "$MOD_BUILD_PATH/.tdescminfo"`
      bool_EDEPS_FOUND="n"
      OLD_IFS=$IFS && IFS=$' \t'
      while read l_branch l_repo l_component; do
        if [ "$l_branch" = "$BUILD_BRANCH" ]; then
          bool_EDEPS_FOUND="y"
          cat <<END_D05_02 >> "$PBUILDER_DEPS_HOOK"
echo "deb [trusted=yes] $l_repo $DISTRO_NAME $l_component" >> /etc/apt/sources.list
END_D05_02
          break
        fi
      done <<< $(echo "$TDE_PREBUILT_PKGS" | grep -E "^[[:space:]]*[^#[:space:]]+[[:space:]]+[^[:space:]]+.*$")
      if [ "$bool_EDEPS_FOUND" != "y" ]; then
        # EDEPS repository not found, use default. This could happen when building from sub branches of the main package repo
        while read l_branch l_repo l_component; do
          if [ "$l_branch" = "default" ]; then
            bool_EDEPS_FOUND="y"
            cat <<END_D05_03 >> "$PBUILDER_DEPS_HOOK"
echo "deb [trusted=yes] $l_repo $DISTRO_NAME $l_component" >> /etc/apt/sources.list
END_D05_03
            break
          fi
        done <<< $(echo "$TDE_PREBUILT_PKGS" | grep -E "^[[:space:]]*[^#[:space:]]+[[:space:]]+[^[:space:]]+.*$")
      fi
      IFS=$OLD_IFS
    fi
  fi

  # -- prebuilt extra dependencies
  if [[ "$USE_PREBUILD_EXTRA_DEPS" = "y" ]]; then
    # Get building branch from .tdescminfo file
    if [[ -f "$MOD_BUILD_PATH/.tdescminfo" ]]; then
      BUILD_BRANCH=`sed -n -r "s/^Revision: ([^-]+)-.*/\1/p" "$MOD_BUILD_PATH/.tdescminfo"`
      bool_EDEPS_FOUND="n"
      OLD_IFS=$IFS && IFS=$' \t'
      while read l_branch l_repo l_component; do
        if [ "$l_branch" = "$BUILD_BRANCH" ]; then
          bool_EDEPS_FOUND="y"
          cat <<END_D05_04 >> "$PBUILDER_DEPS_HOOK"
echo "deb [trusted=yes] $l_repo $DISTRO_NAME $l_component" >> /etc/apt/sources.list
END_D05_04
          break
        fi
      done <<< $(echo "$TDE_PREBUILT_EDEPS" | grep -E "^[[:space:]]*[^#[:space:]]+[[:space:]]+[^[:space:]]+.*$")
      if [ "$bool_EDEPS_FOUND" != "y" ]; then
        # EDEPS repository not found, use default. This could happen when building from sub branches of the main package repo
        while read l_branch l_repo l_component; do
          if [ "$l_branch" = "default" ]; then
            bool_EDEPS_FOUND="y"
            cat <<END_D05_05 >> "$PBUILDER_DEPS_HOOK"
echo "deb [trusted=yes] $l_repo $DISTRO_NAME $l_component" >> /etc/apt/sources.list
END_D05_05
            break
          fi
        done <<< $(echo "$TDE_PREBUILT_EDEPS" | grep -E "^[[:space:]]*[^#[:space:]]+[[:space:]]+[^[:space:]]+.*$")
      fi
      IFS=$OLD_IFS
    fi
  fi

  cat <<END_D05_06 >> "$PBUILDER_DEPS_HOOK"
apt-get update
END_D05_06
  chmod a+x "$PBUILDER_DEPS_HOOK"
  # Build
  OPT_BUILD_PARALLEL=""
  if [ ${DEB_BUILD_PARALLEL+x} ]; then
    OPT_BUILD_PARALLEL="DEB_BUILD_PARALLEL=$DEB_BUILD_PARALLEL"
  fi
  eval pdebuild $OPT_SIGN_PKG_PBUILDER \
                --architecture $ARCHITECTURE  \
                --buildresult \"$MOD_DEB_PATH\" \
                --pbuilderroot \"sudo $OPT_BUILD_PARALLEL DISTRO_NAME=$DISTRO_NAME ARCHITECTURE=$ARCHITECTURE\" \
                --logfile \"$BUILDING_LOG_FILE\" \
                -- \
                --bindmounts \"$TDE_DEBS_DIR\" \
                --hookdir \"$PBUILDER_HOOK_DIR\" \
                $OPT_SHOW_LOGS\"$BUILDING_LOG_FILE\"
  PBUILDER_RETVAL=$?
  # Remove shell hook if it was installed before the build
  if [ -x "$PBUILDER_SHELL_HOOK" ]; then
    rm "$PBUILDER_SHELL_HOOK"
  fi
  # Remove deps hook
  if [ -x "$PBUILDER_DEPS_HOOK" ]; then
    rm "$PBUILDER_DEPS_HOOK"
  fi
  # Return pdebuild return value to calling function
  return $PBUILDER_RETVAL
}


#----------------------------
# The actual code is inside a function to allow the pdebuild return value to be
# correctly passed back to the calling script in all cases (root and non root users)
run_pdebuild