On 12/10/2012 04:08 PM, Chris Leech wrote: > Sorry about the cross-posting, but I think that in order to get this right I'm > going to need as much feedback as I can get. > > I think I've got this working pretty well now (at least for my iBFT configured > iSCSI root test case), although the dracut module still needs work. This is > based on the iscsid socket activation patch from Tomasz Torcz and the unit > files from Tomasz and Jóhann B. Guðmundsson. > > Attempting to start iscsid using systemd unit files (socket activated or not) > was impacting my iscsi-root test setup. Rather than try to preserve the old > logic that used the _netdev mount flag to determine when iscsid could be safely > shutdown, I've been working on following the guidelines for root storage > daemons http://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons. > > 1) I patched iscsid to set argv[0][0] = '@' if a new --initrd flag is passed on > the command line. It's simple, it works, we don't kill iscsid before the > root filesystem is unmounted. > > 2) When starting iscsid from the initrd, I then ran into issues of iscsid not > functioning properly after the switch_root. It's not mentioned in the > RootStorageDaemons documentation, but if a process left running from the > initrd needs further filesystem access at runtime it will need to be able to > chroot itself before the switch_root. I patched iscsid and iscsiadm with a > newroot command (using plymouth as an example), and used a dracut clenaup > hook to call "iscsiadm --newroot /sysroot". > > 3) Related to #2, launching iscsid as a Type=simple service from the initrd > (I'm testing this with Fedora 18 beta, where dracut uses systemd in the > initrd) results in STDOUT/STDERR access after the switch_root failing with > EPIPE. It seems that the connection to the journal process is dead once the > initrd instantiated systemd-journald is replaced with the runtime process. > > I can at least keep iscsid functioning if I run it as Type=forking, but I'm > not sure if I'm losing runtime logging or not. I may be able to do > something with the StandardOutput and StandardError options in the service > file. > > 4) None of this helps if the sessions are shutdown when we still need them. > Rather than the all-or-nothing _netdev mount option checks that have been > used in the past, I'm attempting to use the fact that iscsiadm will skip > over session that match a node with startup=onboot set when doing a > logoutall. The iscsi_mark_root_nodes script is borrowed from the SUSE init > scripts in the open-iscsi repos written by Hannes Reinecke. I've made minor > changes to export the list of sessions activated in the initramfs, and then > mark those as onboot when starting iscsi.service. > > Things that still need looking into. > > 1) Command line configured iSCSI parameters. If iscsistart is to be fully > removed something needs to setup the node from the command line. Or > iscsistart needs to be able to run alongside iscsid. > The iscsi tools changes look ok to me. For 1), in this type of setup we are always only doing iscsiadm -m fw -l (saw that in the iscsiroot.sh part of patch). If so, then just modify to take params. I think you could just take parse_param/apply_params from iscsistart and use them. -- To unsubscribe from this list: send the line "unsubscribe initramfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html