View previous topic :: View next topic |
Author |
Message |
UX.MAN n00b
Joined: 09 Mar 2013 Posts: 72
|
Posted: Sat Mar 01, 2014 2:10 am Post subject: lvm2 & cryptsetup static libs |
|
|
Hi,
I need to build an initramfs with lvm2 & cryptsetup statically linked. I noticed the recent removal of static and static-libs flags from these packages, so I'm trying to figure out how am I gonna do this initramfs without these flags.
What can I do about it? |
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54550 Location: 56N 3W
|
Posted: Sat Mar 01, 2014 10:15 am Post subject: |
|
|
UX.MAN,
Build them dynamically, run lddtree on the resulting binaries and include all the required libs in the initrd along with the linker
e.g.
Code: | $ lddtree /sbin/lvm
/sbin/lvm (interpreter => /lib64/ld-linux-x86-64.so.2)
libdl.so.2 => /lib64/libdl.so.2
libblkid.so.1 => /lib64/libblkid.so.1
libuuid.so.1 => /lib64/libuuid.so.1
libdevmapper-event.so.1.02 => /lib64/libdevmapper-event.so.1.02
libdevmapper.so.1.02 => /lib64/libdevmapper.so.1.02
libpthread.so.0 => /lib64/libpthread.so.0
libreadline.so.6 => /lib64/libreadline.so.6
libncurses.so.5 => /lib64/libncurses.so.5
libc.so.6 => /lib64/libc.so.6 |
_________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
Tractor Girl Apprentice
Joined: 16 May 2013 Posts: 159
|
Posted: Sat Mar 01, 2014 1:55 pm Post subject: |
|
|
You don't need to build them statically for this setup - genkernel will build fully working initramfs just fine.
Just emerge genkernel with "cryptsetup", and run:
Code: | genkernel --lvm --luks --install initramfs |
|
|
Back to top |
|
|
UX.MAN n00b
Joined: 09 Mar 2013 Posts: 72
|
Posted: Sat Mar 08, 2014 9:55 pm Post subject: |
|
|
I noticed I should do it that way. I was able to copy all of the required libraries and I am able to decrypt my LUKS encrypted disk; but I am having problems with LVM. vgchange is not finding my volume group called "vg", and so it's not able to mount the new root.
Do you know why this could be happening? |
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54550 Location: 56N 3W
|
Posted: Sat Mar 08, 2014 10:37 pm Post subject: |
|
|
UX.MAN,
Did you build lvm with USE=static ?
If so you need lvm.static in your initrd.
lvm and all its libs should work too but I've not tested that. _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
Tractor Girl Apprentice
Joined: 16 May 2013 Posts: 159
|
Posted: Sun Mar 09, 2014 4:51 pm Post subject: |
|
|
Here's my (non-static) setup. |
|
Back to top |
|
|
frostschutz Advocate
Joined: 22 Feb 2005 Posts: 2977 Location: Germany
|
Posted: Sun Mar 09, 2014 7:06 pm Post subject: Re: lvm2 & cryptsetup static libs |
|
|
UX.MAN wrote: | I noticed the recent removal of static and static-libs flags from these packages |
the flags work fine for me |
|
Back to top |
|
|
UX.MAN n00b
Joined: 09 Mar 2013 Posts: 72
|
Posted: Sun Mar 09, 2014 8:57 pm Post subject: |
|
|
@frostschutz, the flags are off when you choose the gnome/systemd profile. I moved back to gnome profile and those flags are back on. I was able to build lvm and cryptsetup statically linked and it works. I'm now having a problem with the exec switch_root when running from BusyBox; my init will drop me directly to an sh session, and when I try to switch_root it's coming back with a kernel panic. I have no idea of what is going on, but I can barely see a message from BusyBox explaining how to use switch_root.
This is my init:
Code: |
#!/bin/busybox sh
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devtmpfs none /dev
cryptsetup luksOpen /dev/sda2 enc
lvm vgscan --mknodes
lvm vgchange -ay
mount -o ro /dev/vg/root /mnt/root
umount /proc /sys /dev
exec switch_root /mnt/root /sbin/init
|
|
|
Back to top |
|
|
frostschutz Advocate
Joined: 22 Feb 2005 Posts: 2977 Location: Germany
|
Posted: Sun Mar 09, 2014 11:44 pm Post subject: |
|
|
If you're using systemd, I think you have to exec something other than sbin/init, but I'm not sure as I've never used systemd myself. |
|
Back to top |
|
|
UX.MAN n00b
Joined: 09 Mar 2013 Posts: 72
|
Posted: Mon Mar 10, 2014 12:10 am Post subject: |
|
|
As I said, I was on the systemd's profile, but I switched back to the OpenRC (default) profile. So, I'm now on the OpenRC profile, /sbin/init is totally valid, but still getting a kernel panic when BusyBox tries to execute init. |
|
Back to top |
|
|
UX.MAN n00b
Joined: 09 Mar 2013 Posts: 72
|
Posted: Mon Mar 10, 2014 5:55 pm Post subject: |
|
|
@Tractor Girl
Your configuration works like a charm! I will start using the genkernel initramfs image from now on; it saves a lot of time and effort. Thanks for helping me on this! |
|
Back to top |
|
|
Tractor Girl Apprentice
Joined: 16 May 2013 Posts: 159
|
Posted: Tue Mar 11, 2014 12:03 am Post subject: |
|
|
Glad I could help |
|
Back to top |
|
|
SamuliSuominen Retired Dev
Joined: 30 Sep 2005 Posts: 2133 Location: Finland
|
Posted: Tue Mar 11, 2014 7:47 am Post subject: Re: lvm2 & cryptsetup static libs |
|
|
UX.MAN wrote: | Hi,
I need to build an initramfs with lvm2 & cryptsetup statically linked. I noticed the recent removal of static and static-libs flags from these packages, so I'm trying to figure out how am I gonna do this initramfs without these flags.
What can I do about it? |
While your setup doesn't need USE="static static-libs", and you should in fact be copying the required libraries to the initramfs like pointed out in this thread earlier, I'd just like to add you are wrong and the flags have not been removed:
Code: |
[ebuild U ] sys-fs/cryptsetup-1.6.4 [1.6.3] USE="gcrypt nls python udev -kernel -nettle -openssl -reencrypt -static -static-libs -urandom" PYTHON_SINGLE_TARGET="python2_7 -python2_6" PYTHON_TARGETS="python2_7 -python2_6" 1,057 kB
[ebuild R ] sys-fs/lvm2-2.02.105-r2 USE="readline thin udev -clvm -cman -device-mapper-only -lvm1 -lvm2create_initrd (-selinux) -static -static-libs" 0 kB
|
|
|
Back to top |
|
|
UX.MAN n00b
Joined: 09 Mar 2013 Posts: 72
|
Posted: Wed Mar 12, 2014 1:35 pm Post subject: |
|
|
I think the flags where removed from the gnome/systemd profile, somehow. I can't check right now, but I'm quite sure those flags where disabled on that profile; am I incorrect? I will try it as soon as I reach home.
Now that you bring this up, I would like to ask you about my init script. It's failing to switch_root when I try with my custom script; after Code: | exec switch_root /mnt/root /sbin/init | is executed, BusyBox is coming back with a message explaining how to use s[/code]witch_root. I have no clue as per why this is happening, but I suspect that I'm missing something in the initramfs. |
|
Back to top |
|
|
SamuliSuominen Retired Dev
Joined: 30 Sep 2005 Posts: 2133 Location: Finland
|
Posted: Wed Mar 12, 2014 1:45 pm Post subject: |
|
|
UX.MAN wrote: | I think the flags where removed from the gnome/systemd profile |
nod, sys-apps/systemd doesn't have USE="static-libs" to compile 'libudev.a' static archive for building cryptsetup and lvm2, therefore the profile masks the flags
makes sense
Last edited by SamuliSuominen on Wed Mar 12, 2014 3:06 pm; edited 1 time in total |
|
Back to top |
|
|
UX.MAN n00b
Joined: 09 Mar 2013 Posts: 72
|
Posted: Wed Mar 12, 2014 1:56 pm Post subject: |
|
|
Well, that would make sense. As you may have noticed, I am not pointing out that the init script is trying to run systemd as it's replacing init, but rather running OpenRC. So I will leave systemd apart for a moment and work on OpenRC; it is likely that the switch_root command is, somehow, unable to find the new init or it is not capable of parsing it. Did you ever come across this issue? Do you think this is a syntax issue? |
|
Back to top |
|
|
puchu n00b
Joined: 15 Feb 2005 Posts: 15
|
Posted: Mon Aug 25, 2014 11:55 pm Post subject: |
|
|
you could also just create a shell in your init script and type in the commands on the cmd line and see why it breaks
busybox --install -s
exec setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1' |
|
Back to top |
|
|
|