Hi,
I got the same error message.
In contrast, there is no such an error if I make use
of the wrapper chfn.fakechroot below :
$ chmod +x chfn.fakechroot
$ export FAKECHROOT_CMD_SUBST=/usr/bin/chfn=$(readlink -f chfn.fakechroot)
$ debirf make rescue
[ ... ]
debirf> debirf initrd created.
debirf> kernel: /home/me/rescue/vmlinuz-3.16-2-amd64
debirf> initrd: /home/me/rescue/debirf-rescue_sid_3.16-2-amd64.cgz
$ echo $?
0
It seems that this bug #763391 and #745082 share a common cause.
Regards,
JH Chatenet
File chfn.fakechroot :
----------8<-------------------8<------------------
#!/bin/bash
# chfn
#
# Replacement for chfn command which changes a gecos field in
# etc/passwd under the (fake)chroot. There is no locking and no permission
check.
which_option() {
option_name="$1"
option_value="$2"
case $option_name in
-f|--full-name)
has_new_name=1
new_name="$(echo $option_value|tr -d ':,=')"
;;
-h|--home-phone)
has_new_home_phone=1
new_home_phone="$(echo $option_value|tr -d ':,=')"
;;
-o|--other)
has_new_other=1
new_other="$(echo $option_value|tr -d ':')"
;;
-r|--room)
has_new_room=1
new_room="$(echo $option_value|tr -d ':,=')"
;;
-R|--root)
has_root=1
root="$option_value"
;;
-w|--work-phone)
has_new_work_phone=1
new_work_phone="$(echo $option_value|tr -d ':,=')"
;;
esac
}
parse_gecos_field() {
gecos_field="$1"
old_name="${gecos_field%%,*}"
gecos_field="${gecos_field#$old_name}"
if [ -z "$gecos_field" ]; then
return
else
gecos_field="${gecos_field#,}"
fi
old_room="${gecos_field%%,*}"
gecos_field="${gecos_field#$old_room}"
gecos_field="${gecos_field#,}"
old_work_phone="${gecos_field%%,*}"
gecos_field="${gecos_field#$old_work_phone}"
gecos_field="${gecos_field#,}"
old_home_phone="${gecos_field%%,*}"
gecos_field="${gecos_field#$old_home_phone}"
gecos_field="${gecos_field#,}"
if [ -n "$gecos_field" ]; then
has_old_other=1
old_other="$gecos_field"
fi
}
while [ $# -gt 0 ]; do
case $1 in
-u|--help)
echo "fakechroot : replacement of chfn"
chfn -u
exit 0
;;
-f|--full-name|-h|--home-phone|-o|--other|-r|--room|-R|--root|-w|--work-phone)
option_name="$1"
option_value="$2"
which_option "$option_name" "$option_value"
shift 2
;;
--full-name=*|--home-phone=*|--other=*|--room=*|--root=*|--work-phone=*)
option_name="${1%%=*}"
option_value="${1#*=}"
which_option "$option_name" "$option_value"
shift
;;
-f*|-h*|-o*|-r*|-R*|-w*)
option_value="${1#-?}"
option_name="${1%$option_value}"
which_option "$option_name" "$option_value"
shift
;;
--)
shift
break
;;
*)
break
;;
esac
done
if [ $# -gt 0 ]; then
user="$1"
else
user=$(id -u -n)
fi
# Where is the root ?
if [ -n "$root" ]; then
if [ "${root#/}" != "$root" ]; then
root="${FAKECHROOT_BASE_ORIG}${root}"
fi
else
root="$FAKECHROOT_BASE_ORIG"
fi
if [ ! -e "$root/etc/passwd" ]; then
echo "fakechroot chfn replacement : $root/etc/passwd : no such file" >&2
exit 1
fi
# Is there such user ?
grep -q "^${user}:" "$root/etc/passwd"
ret=$?
if [ $ret -eq 1 ]; then
echo "fakechroot chfn replacement : $user : no such user" >&2
exit 2
elif [ $ret -eq 2 ]; then
echo "fakechroot chfn replacement : grep error" >&2
exit 3
fi
# What is the old gecos field ?
old_gecos_field=$(sed -n "/^${user}/ {s/^\([^:]*:\)\{4\}\([^:]*\):.*$/\2/;p;q}"
"$root/etc/passwd")
parse_gecos_field "$old_gecos_field"
# Assemble new gecos
if [ -n "$has_new_name" ]; then
new_gecos_field="$new_name"
else
new_gecos_field="$old_name"
fi
if [ -n "$has_new_room" ]; then
new_gecos_field="${new_gecos_field},$new_room"
else
new_gecos_field="${new_gecos_field},$old_room"
fi
if [ -n "$has_new_work_phone" ]; then
new_gecos_field="${new_gecos_field},$new_work_phone"
else
new_gecos_field="${new_gecos_field},$old_work_phone"
fi
if [ -n "$has_new_home_phone" ]; then
new_gecos_field="${new_gecos_field},$new_home_phone"
else
new_gecos_field="${new_gecos_field},$old_home_phone"
fi
if [ -n "$has_new_other" ]; then
new_gecos_field="${new_gecos_field},$new_other"
elif [ -n "$has_old_other" ]; then
new_gecos_field="${new_gecos_field},$old_other"
fi
name_only="${new_gecos_field%%,*}"
if [ "${new_gecos_field#$name_only}" = ",,," ]; then
new_gecos_field="$name_only"
fi
# New /etc/passwd
sed -i "s/^\(${user}:\([^:]*:\)\{3\}\)\([^:]*\)/\1${new_gecos_field}/"
"$root/etc/passwd"
----------8<-------------------8<------------------
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]