Linux ip-172-26-7-228 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64
Your IP : 18.188.218.134
#!/bin/sh
set -e
# $1: dfile, $2: link target, $3: distrib
replace_with_link() {
dfile=$1; ltarget=$2; distrib=$3
temp=$dfile.tmp
# Safely create a symlink to $ltarget at $dfile, first
# making a backup of $dfile (the file being diverted)
# in $distrib (if specified).
#
# The cp / ln -s / mv dance avoids having to live without
# $dfile (think: /bin/sh) for even a moment, so applications
# running in parallel can continue without trouble.
# See dash.preinst for details.
if [ -n "$distrib" ] && [ -e "$dfile" ]; then
cp -dp "$dfile" "$distrib"
fi
ln -sf "$ltarget" "$temp"
mv -f "$temp" "$dfile"
}
claim_binsh() {
dfile=$1 ltarget=$2 distrib=${3:-$dfile.distrib}
diverter=$(dpkg-divert --listpackage $dfile)
truename=$(dpkg-divert --truename $dfile)
if [ "$diverter" = dash ]; then
# good.
return
fi
if [ "$diverter" = LOCAL ]; then
# The sysadmin wants it this way. Who am I to argue?
return
fi
if [ "$diverter" != bash ]; then
# Let dpkg-divert error out; we are not taking
# over the diversion, unless we added it
# ourselves on behalf of bash.
dpkg-divert --package dash --remove $dfile
echo "This should never be reached"
exit 1
fi
dpkg-divert --package bash --remove $dfile
dpkg-divert --package dash --divert $distrib --add $dfile
# remove the old equivalent of $distrib, if it existed.
if [ -n "$truename" ]; then
rm -f "$truename"
fi
replace_with_link $dfile $ltarget $distrib
}
unclaim_binsh() {
dfile=$1 ltarget=$2 distrib=${3:-$dfile.distrib}
diverter=$(dpkg-divert --listpackage $dfile)
truename=$(dpkg-divert --truename $dfile)
if [ "$diverter" != dash ]; then
# good.
return
fi
# Donate the diversion and sh symlink to the bash package.
ltarget=$(echo $ltarget | sed s/dash/bash/)
dpkg-divert --package dash --remove $dfile
dpkg-divert --package bash --divert $distrib --add $dfile
if [ -n "$truename" ]; then
rm -f "$truename"
fi
replace_with_link $dfile $ltarget $distrib
}
initial_binsh_setup() {
dfile=$1 ltarget=$2 distrib=${3:-$dfile.distrib} ashfile=$4
diverter=$(dpkg-divert --listpackage $dfile)
truename=$(dpkg-divert --truename $dfile)
if [ -z "$diverter" ]; then
# good.
return
fi
if [ "$diverter" = ash ]; then
dpkg-divert --package ash --remove $dfile
dpkg-divert --package dash --divert $distrib --add $dfile
if [ "$truename" != "$distrib" ] && [ -e "$truename" ]; then
mv "$truename" "$distrib"
fi
replace_with_link $dfile $ltarget
return
fi
if
[ -h $dfile ] &&
[ -f $dfile ] &&
[ -f $ashfile ] &&
cmp $dfile $ashfile
then
replace_with_link $dfile $ltarget
fi
}
add_shell() {
if ! type add-shell > /dev/null 2>&1; then
return
fi
add-shell /bin/dash
}
debconf=
if [ -f /usr/share/debconf/confmodule ]; then
. /usr/share/debconf/confmodule
debconf=yes
fi
if [ "$1" = configure ] && [ -z "$2" ]; then
initial_binsh_setup /bin/sh dash '' /bin/ash
initial_binsh_setup /usr/share/man/man1/sh.1.gz dash.1.gz \
/usr/share/man/man1/sh.distrib.1.gz \
/usr/share/man/man1/ash.1.gz
add_shell
elif [ "$1" = configure ] && dpkg --compare-versions "$2" lt 0.4.18; then
add_shell
fi
if [ $debconf ]; then
db_get dash/sh
if [ "$RET" = true ]; then
claim_binsh /bin/sh dash
claim_binsh /usr/share/man/man1/sh.1.gz dash.1.gz \
/usr/share/man/man1/sh.distrib.1.gz
else
unclaim_binsh /bin/sh dash
unclaim_binsh /usr/share/man/man1/sh.1.gz dash.1.gz \
/usr/share/man/man1/sh.distrib.1.gz
fi
fi
# Automatically added by dh_installmenu/11.1.4ubuntu1
if [ "$1" = "configure" ] && [ -x "`which update-menus 2>/dev/null`" ]; then
update-menus
fi
# End automatically added section
|