On 29.07.2010 03:01, Michael Prokop wrote: > * Michael Biebl <bi...@debian.org> [Thu Jul 29, 2010 at 02:16:32AM +0200]: >> On 29.07.2010 01:37, Michael Prokop wrote: >>> * Michael Biebl <bi...@debian.org> [Thu Jul 29, 2010 at 01:13:01AM +0200]: > >>>> for testing purposes, I installed the upstart binary as /sbin/upstart and >>>> created a symlink /sbin/init → /sbin/upstart >>>> This causes a boot failure, due to this check in /usr/share/initramfs- >>>> tools/init > >>>> # Check init bootarg >>>> if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then >>>> echo "Target filesystem doesn't have ${init}." >>>> init= >>>> fi > >>>> To quote Mithrandir (from irc): >>>> <Mithrandir> -x follows symlinks >>>> <Mithrandir> but that means it'll look for symlinks in the initramfs, so >>>> the >>>> check is buggy. > >>> You shouldn't use an absolut symlink here, use a relative one instead. >>> See Debian policy 10.5 for details. > >> Well, changing it to /sbin/init -> upstart did indeed work for this >> particular >> case. But I still get the problem when the link is absolute, as is specified >> by >> the policy for symlinks not in the same directory. > >> To be a bit more specific what I was doing: >> I tested the new systemd init system, which installs the binary in >> /bin/systemd >> (note the "/bin"). > > This isn't an existing + available Debian package yet, right?
It's in experimental currently. > Why is it installing itself to /bin/systemd? Is it supposed to be > executed by non-root users as well? Indeed. The idea is, that systemd is also started by regular users and helps track their user session (replacement/extension for e.g. gnome-session) >> So I moved /sbin/init from upstart to /sbin/upstart and made >> /sbin/init a symlink so I could easily test both systems. Using a relative >> symlink for /sbin/upstart does work, but an absolute symlink /sbin/init -> >> /bin/systemd does not. >> So I'm reopening the bug report and retitling appropriately. > > If systemd really uses /bin for a reason we could use something like > the following in initramfs-tools' init: > > # Check init bootarg > if [ -n "${init}" ] ; then > > # Work around absolute symlinks > initsymlinktarget="${init}" > if [ -d "${rootmnt}" ] && [ -h "${rootmnt}${init}" ] ; then > case $(readlink "${rootmnt}${init}") in /*) > initsymlinktarget=$(chroot "${rootmnt}" readlink "${init}") > ;; > esac > fi > > if [ ! -x "${rootmnt}${init}" ] || [ ! -x > "${rootmnt}${initsymlinktarget}" ] ; then > echo "Target filesystem doesn't have ${init}." > init= > fi > fi Does not work. For one, I guess this check if [ ! -x "${rootmnt}${init}" ] || [ ! -x "${rootmnt}${initsymlinktarget}" ] ; should be using &&. Even after fixing that, we run into the same problem, later again, at: # No init on rootmount if [ ! -x "${rootmnt}${init}" ]; then panic "No init found. Try passing init= bootarg." fi Cheers, Michael -- Why is it that all of the instruments seeking intelligent life in the universe are pointed away from Earth?
signature.asc
Description: OpenPGP digital signature