[OS Version]: SUSE Linux Enterprise Server 11 SP3 (x86_64)
[Software Version]: libzypp-9.38.8-0.7.1
zypper-1.6.327-9.9
rpm-4.4.2.3-37.56.1
rpm-python-4.4.2.3-37.46.7
[Steps of reproduce]:
-
I build a custom RPM package, then build a zypper repo.
custom RPM name: upg-client-1.0.0-1.x86_64
zypper repo: zypper ar file:///usr/src/packages/RPMS/ myrepo
zypper refresh -
Write two Bash scripts for testing (contexts of these scripts shown in “Additional Information”), one for installing upg-client RPM and another for reproduce this problem.
-
Run installing script, then run reproduce script. When the installing script is stopped, we can see that “rpm -qa upg-client” and “rpm -q upg-client” is inconsistent.
[Additional Info]
script for installing upg-client RPM:
#!/bin/bash
LOG_FILE=/home/auto_run_new_2.log
count=1
touch $LOG_FILE
while true;
do
rpm -q upg-client
if $? -ne 0 ];then
echo “date
] upg-client-1.0.0-1.x86_64 not install, now install” >> $LOG_FILE
zypper -n --gpg-auto-import-keys --no-gpg-checks in upg-client-1.0.0-1.x86_64
if $? -ne 0 ];then
echo “date
] install upg-client-1.0.0-1.x86_64 failed” >> $LOG_FILE
exit 1
fi
fi
echo “==============sleep=================”
echo “date
] =======sleeping 6=======” >> $LOG_FILE
sleep 3
XXX=sudo rpm -qa| grep upg-client
YYY=sudo rpm -q upg-client
if “x$XXX” = “x$YYY” ];then
echo “date
] auto:$count======ok=======” >> $LOG_FILE
((count++))
else
if “x$XXX” = “x” ];then
echo “date
] auto:$count======ok=======” >> $LOG_FILE
((count++))
else
echo “date
] error”
exit 1
fi
fi
echo “===remove=======”
zypper -n --gpg-auto-import-keys --no-gpg-checks remove -u upg-client-1.0.0-1.x86_64
if $? -ne 0 ];then
echo “date
] uninstall upg-client-1.0.0-1.x86_64 failed” >> $LOG_FILE
exit 1
fi
done
=============Dividing line================
script for reproduce the problem:
#!/bin/bash
while true
do
#find child rpm process
pid=ps aux| grep "/var/cache/zypp/packages/myrepo/x86_64/upg-client-1.0.0-1.x86_64.rpm" | grep '\-U' | awk '{print $2}'
if “x$pid” != “x” ];then
kill -9 $pid
echo “yes”
else
echo “no”
fi
sleep 0.5
done
=============Dividing line================
upg-client SPEC. (you can run "dd if=/dev/zero of=./xxx bs=10M count=1 " to create the file “/usr/local/bin/upg-client/xxx” in SOURCE package)
Name:upg-client
Summary:TEST
Version:1.0.0
Release:1
Group:NCU
License:GPL
Vendor:NCU
Source0: upg-client-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
%description
upg-client
%prep
%setup -q -n %{name}-%{version}
%install
file_list=$(find .)
rm -rf %{buildroot}
for file in $file_list
do
if -d “$file” ];then
install -d %{buildroot}/$file
elif -f “$file” ];then
install -c -m 755 $file %{buildroot}/$file
fi
done
%post
%files
%dir /usr/local/bin/upg-client
/usr/local/bin/upg-client/xxx
%changelog
- Tue Nov 17 2015 EDU
- test