Skip to content

Commit feef9ca

Browse files
liushilongbuaamssonicbld
authored andcommitted
[build] Add environment when using dpkg hook to avoid lock loop. (#13150)
Why I did it In some cases, dpkg will call dpkg to validate version. dpkg hook will get stuck in a loop to lock. How I did it Use an env variable to skip duplicated lock.
1 parent a1200da commit feef9ca

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

build_debian.sh

+2
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ echo '[INFO] Install and setup eatmydata'
120120
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install eatmydata
121121
sudo LANG=C chroot $FILESYSTEM_ROOT ln -s /usr/bin/eatmydata /usr/local/bin/dpkg
122122
echo 'Dir::Bin::dpkg "/usr/local/bin/dpkg";' | sudo tee $FILESYSTEM_ROOT/etc/apt/apt.conf.d/00image-install-eatmydata > /dev/null
123+
## Note: dpkg hook conflict with eatmydata
124+
sudo LANG=C chroot $FILESYSTEM_ROOT rm /usr/local/sbin/dpkg -f
123125

124126
echo '[INFO] Install packages for building image'
125127
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install makedev psmisc

src/sonic-build-hooks/hooks/dpkg

100644100755
+9-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,16 @@
33
. /usr/local/share/buildinfo/scripts/buildinfo_base.sh
44
REAL_COMMAND=$(get_command dpkg)
55
COMMAND_INFO="Locked by command: $REAL_COMMAND $@"
6-
lock_result=$(acquire_apt_installation_lock "$COMMAND_INFO" )
6+
NEED_RELEASE_LOCK=n
7+
if [[ "$DPKG_HOOK_LOCKED" != "y" ]];then
8+
lock_result=$(acquire_apt_installation_lock "$COMMAND_INFO" )
9+
export DPKG_HOOK_LOCKED=y
10+
NEED_RELEASE_LOCK=y
11+
fi
712
$REAL_COMMAND "$@"
813
command_result=$?
14+
if [[ "$NEED_RELEASE_LOCK" == "y" ]];then
15+
unset DPKG_HOOK_LOCKED
16+
fi
917
[ "$lock_result" == y ] && release_apt_installation_lock
1018
exit $command_result

0 commit comments

Comments
 (0)