Skip to contentSkip to conversation

2.6.13 / cannot set up LDT for thread-local storage

uml-devel Nelson Castillo 4 participants 5 messages Sep 16, 2005 2 messages not in the archive User-mode Linux (UML)

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

A message that is not in the archive (sent off-list or not yet received): [email protected]

#2 lore raw

On 9/13/05, Blaisorblade <[email protected]> wrote:
(cut)

Quoted 4 lines
Quoted 2 lines

What should I try? Do I need a patch?

mv /lib/tls /lib/tls.away, after loop-mounting the filesystem on the host , or booting with init=/bin/bash (not sure the second will work).

I did some tests. I just found out that
In Debian the best solution is to run:

  # echo "LD_ASSUME_KERNEL=2.4.1" >> etc/environment

in the chroot.
(See http://people.redhat.com/drepper/assumekernel.html)

I found something in this thread:

http://lists.debian.org/debian-user/2005/01/msg04226.html
---------------------------------------

Quoted 5 lines · --- "Todd A. Jacobs
Quoted 1 line · On Fri, Jan 28, 2005 at 10:43:44PM -0500, [email protected] wrote:

Is the file /etc/environment _documented_ *anywhere*???

It's a highly non-standard, non-portable file that is source by PAM (and possibly other applications) on a Debian system.

That is as maybe, but /etc/environment is the only shell-agnostic file there is, and where it can be used, it certainly serves a good purpose.
---------------------------------------

I did 2 equivalent tests
1) patching init/main.c to add the variable to the environment
2) using a wrapper to /sbin/init

but it seems the environment is just discarded before running what is in inittab (I'm not sure, I should read the sources later).

sysvinit should have a way to add a variable to the environment. Can it be done in intitab?

With : cd /etc && grep "/etc/environment" * -RH 2>/dev/null

Among others, I found pam.d/login
# This module parses /etc/environment (the standard for setting

# environ vars) and also allows you to use an extended config

- Do they mean standard in Debian?

BTW,

- when is NPTL (not) supported in UML?

I'm sending for your consideration a small patch for the FAQ
(that may need some update. I'll do it as I learn more about
this issue).

Thanks,
Nelson.-

--
Homepage : http://geocities.com/arhuaco

The first principle is that you must not fool yourself and you are the easiest person to fool.
-- Richard Feynman.

538a539,589

Quoted 51 lines

<a name="kernel Panic, cannot set up thread-local storage"/><table width="100%" bgcolor="#e0e0e0">

            <tr>
              <td>
                <b>
                  <font color="black">kernel Panic, cannot set up thread-local storage</font>
                </b>
              </td>
            </tr>
          </table>

<blockquote>
Your UML kernel doesn't support Native Posix Thread Library and the binaries you're running are being dynamically linked to the NTPL libraries. <br><br>
You can boot moving the NTPL libraries away.
<ul>
<li> <font color="black"># mount root_fs mnt-uml/ -o loop</font> <li> <font color="black"># mv mnt-uml/lib/tls mnt-uml/lib/tls.away</font> <li> <font color="black"># umount mnt-uml</font>
</ul>
If you're running Debian, you can get away with:
<pre><font color="black">

 # mount root_fs mnt-uml/ -o loop
 # echo "LD_ASSUME_KERNEL=2.4.1" >> /mnt-uml/etc/environment
 # umount mnt-uml/
</font></pre>

It seems that using /etc/environment is Debian specific,
as <a href="http://lists.debian.org/debian-user/2005/01/msg04226.html">discussed here</a>.

The LD_ASSUME_KERNEL=2.4.1 environment variable precludes the dynamic linker from using the NTPL libraries, as explained <a href="http://people.redhat.com/drepper/assumekernel.html">here</a>.

If you decide to move away /lib/tls/ and you're running Debian, you might prefer to use dpkg-divert.
<pre><font color="black">

  # export LD_ASSUME_KERNEL=2.4.1
  # mount root_fs mnt-uml/ -o loop
  # chroot mnt-uml
  # mkdir /lib/tls.off
  # cd /lib/tls
  # pwd
  #  for f in *;
     do
       dpkg-divert --divert --local --rename --divert /lib/tls.off/$f --add /lib/tls/$f;
     done
  # exit
  # umount mnt-uml
</font></pre>
</blockquote>
#3 lore raw
Quoted 3 lines · Nelson Castillo

On 9/13/05, Blaisorblade <[email protected]> wrote:
sysvinit should have a way to add a variable to the environment. Can it be done in intitab?

I just fixed the patch for the FAQ. It's much simpler (and correct, I hope) now.

-------------

I tried with the patched init/main.c and:

inittab:
1:2345:respawn:/usr/bin/env LD_ASSUME_KERNEL=2.4.1 /sbin/getty 38400 tty1

(w/o the LD_ASSUME_KERNEL=2.4.1 the entry in
/etc/environment).

And it dies just after I log in, but I don't get a panic, just another password prompt. So I guess it's bash who is not taking the environment that /sbin/init sets...

And that's why things work when I set
the variable in "/etc/environment"

(and also send a modified environment to
/sbin/init .... with LD_ASSUME_KERNEL=2.4.1.
You must do both, I said that setting
/etc/environment was enough in my previous
email and I was quite wrong. Sorry).

Regards.

Signature · 5 lines
Homepage : http://geocities.com/arhuaco

The first principle is that you must not fool yourself
and you are the easiest person to fool.
     -- Richard Feynman.

538a539,574

Quoted 36 lines

<a name="kernel Panic, cannot set up thread-local storage"/><table width="100%" bgcolor="#e0e0e0">

            <tr>
              <td>
                <b>
                  <font color="black">kernel Panic, cannot set up thread-local storage</font>
                </b>
              </td>
            </tr>
          </table>

<blockquote>
Your UML kernel doesn't support Native Posix Thread Library and the binaries you're running are being dynamically linked to the NTPL libraries. <br><br>
You can boot moving the NTPL libraries away.
<ul>
<li> <font color="black"># mount root_fs mnt-uml/ -o loop</font> <li> <font color="black"># mv mnt-uml/lib/tls mnt-uml/lib/tls.away</font> <li> <font color="black"># umount mnt-uml</font>
</ul>
If you're running Debian, you might prefer to use dpkg-divert. <pre><font color="black">

  # export LD_ASSUME_KERNEL=2.4.1
  # mount root_fs mnt-uml/ -o loop
  # chroot mnt-uml
  # mkdir /lib/tls.off
  # cd /lib/tls
  # pwd
  #  for f in *;
     do
       dpkg-divert --divert --local --rename --divert /lib/tls.off/$f --add /lib/tls/$f;
     done
  # exit
  # umount mnt-uml
</font></pre>
</blockquote>
#4 lore raw
Quoted 7 lines · Nelson Castillo
Quoted 3 lines · Nelson Castillo

On 9/13/05, Blaisorblade <[email protected]> wrote:
sysvinit should have a way to add a variable to the environment. Can it be done in intitab?

I just fixed the patch for the FAQ. It's much simpler (and correct, I hope) now.

Hey, cool:

./linux rootfstype=hostfs rw init=/bin/sh LD_ASSUME_KERNEL=2.4.1

Just gave my a shell prompt in skas0 mode on ubuntu. Using unmodified 2.6.13.1 with the .config I posted earlier.

---
sh-3.00# mount -t proc /proc /proc
sh-3.00# cat /proc/cpuinfo
processor : 0
vendor_id : User Mode Linux
model name : UML
mode : skas
host : Linux driftwood 2.6.10-5-386 #1 Tue Apr 5 12:12:40 UTC 2005
i686
bogomips : 1268.12

sh-3.00#
---

Coolness. :)

Rob

-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download it for free - -and be entered to win a 42" plasma tv or your very own Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
User-mode-linux-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

#5 lore raw
In reply to Nelson Castillo
Quoted 9 lines · Nelson Castillo

On 9/13/05, Blaisorblade <[email protected]> wrote:
(cut)

That is as maybe, but /etc/environment is the only shell-agnostic file there is, and where it can be used, it certainly serves a good purpose.
---------------------------------------

Quoted 7 lines

I did 2 equivalent tests
1) patching init/main.c to add the variable to the environment
2) using a wrapper to /sbin/init

sysvinit should have a way to add a variable to the environment. Can it be done in intitab?

It can be done via adding LD_ASSUME_KERNEL=2.4.1 to the kernel command line.

Quoted 1 line

- Do they mean standard in Debian?

No idea about that - but I've never seen this file, so I assume it's Debian specific.

Quoted 7 lines

BTW,

- when is NPTL (not) supported in UML?

I'm sending for your consideration a small patch for the FAQ
(that may need some update. I'll do it as I learn more about
this issue).

I've not yet read the patch, and likely I won't before you generate it with -u.

Sorry but I've not the time to learn that format (nor the will), especially since patches with -u provide more info both to "patch" and to patch readers.

Quoted 2 lines

Thanks,
Nelson.-

Signature · 23 lines
Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!".
Paolo Giarrusso, aka Blaisorblade (Skype ID "PaoloGiarrusso", ICQ 215621894)
http://www.user-mode-linux.org/~blaisorblade

	

	
		
___________________________________ 
Yahoo! Mail: gratis 1GB per i messaggi e allegati da 10MB 
http://mail.yahoo.it



-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
User-mode-linux-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
#6 lore raw
In reply to Nelson Castillo
Quoted 2 lines · Nelson Castillo

1) patching init/main.c to add the variable to the environment
2) using a wrapper to /sbin/init

Better to just add the variable to the kernel command line.. any XX=something string on the command line is set as environment variables to init.

Quoted 3 lines

but it seems the environment is just discarded before running what is in inittab (I'm not sure, I should read the sources later).

It is not, but mingetty/login cleans up the environment on interactive logins. Many other commands is also very restrictive about what is preserved in the environment when starting childprocesses so relying on LD_ASSUME_KERNEL to be globally set for all processes in the whole system is generally not a good idea.. (very hard to guarantee).

Quoted 2 lines

sysvinit should have a way to add a variable to the environment. Can it be done in intitab?

Not that I know of. But as the environment can be specified on the kernel command line this isn't really needed.

Quoted 4 lines

# This module parses /etc/environment (the standard for setting

# environ vars) and also allows you to use an extended config

- Do they mean standard in Debian?

No idea what stadard they refer to. It is not in the UNIX standard from what I can see.

Regards
Henrik

-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download it for free - -and be entered to win a 42" plasma tv or your very own Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
User-mode-linux-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel