Como iniciar o servidor Xorg dentro do chroot simples?

6

quando eu corro chroot /somepath /usr/bin/startx Eu tenho algo que parece um problema evdev ... (Eu corretamente --bind montado / dev / dev / pts / dev / shm / proc / sys / tmp)

A tela é exibida e os programas são executados normalmente, exceto que não tenho mouse nem teclado e não posso alternar para um terminal local, forçando-me a reinicializar com força.

Qual é a causa disso?
Existe alguma solução para prosseguir executando o servidor?

Passos possíveis para reproduzir (trabalhe em todas as distribuições) :

  • copie o diretório raiz de uma distribuição do Linux para uma pasta de distribuição em execução.

  • vincular corretamente montar tudo (/ dev / pts / var / run / dev / shm / sys / kernel / debugfs ...)

  • executar um shell com o chroot comando.

  • Certifique-se de que nenhum servidor X11 já esteja em execução. xinit /usr/bin/some X11 program

Agora você pode hard-reboot seu computador! (se você não configurou nenhum acesso remoto)

user2284570
fonte
@ IgnacioVazquez-Abrams: BIND MOUNT!
user2284570
@MariusMatutiae: Obrigado, acabei de tentar copiar (cp -r --sparse = always / path_to_root / * / mnt) os rootfs para a raiz de uma partição vazia (em um disco flash USB) e inicializei diretamente. ... E funciona perfeitamente! (Então não é porque alguns pacotes / arquivos estão faltando :-(). Preciso usar o chroot para misturar as funcionalidades de duas diferentes distro.
user2284570
1
Pelo menos no meu caso, a máquina não está completamente morta. Apenas não responde ao teclado / mouse. Quando eu logar remotamente, posso matar o servidor X ofensivo e isso é o suficiente para retomar a operação normal.
Petr Pudlák
@ PetrPudlák: Sim, isso foi eu disse " A tela é exibida e os programas são executados normalmente ... ". Eu não tenho outra máquina que eu possa usar para o ssh. Então, minha única opção é reinicializar.
user2284570

Respostas:

6

Eu percebo que esta pergunta é antiga, mas para referência:

A tela é exibida e os programas são executados normalmente, exceto que eu não tenho mouse nem teclado e não posso mudar para um terminal local, forçando-me a reiniciar.

Eu corretamente --bind montado / dev / dev / pts / dev / shm / proc / sys / tmp

Além de montar o acima, Eu também tive que bind mount / run / udev para fazer o mouse e o teclado funcionarem no meu chroot. eu fiz não use um xorg.conf *, e o Xorg conseguiu detectar corretamente minhas configurações.

Entrada na minha /etc/schroot/default/fstab:

/run/udev /run/udev none rw,bind 0 0

Se você está fazendo um chroot padrão, você pode colocá-lo em sua /etc/fstab em vez de:

/run/udev /path/to/chroot/run/udev none rw,bind 0 0

...ou mount --bind isto.


* Bem - eu tentei usar um xorg.conf inicialmente, mas não funcionou. Eu também tentei adicionar

Section "ServerFlags" Option "AutoAddDevices" "false" EndSection no xorg.conf, o que fez meu mouse funcionar, mas não o teclado.

transistor1
fonte
1
fstab não é uma ajuda. É o mesmo que especificar comandos manualmente. Eu não aceito respostas que dizem que não resolveram o erro. Além disso, não há Xorg.conf no gentoo. (Se você quiser usar arquivos escritos à mão, você tem que diferentemente) . Última pergunta: como iniciar uma sessão se você não tem teclado virtual?
user2284570
1
Eu resolvi o erro. Tem certeza de que leu esta resposta completa? A solução não foi fstab. A solução para mim foi para ligar o mount / run / udev ... Eu também disse que fiz não use um xorg.conf. Além disso - eu disse que você também poderia mount --bind se você quisesse.
transistor1
2

Existe um artigo no wiki do Gentoo que detalha o procedimento requerido:
HOWTO_startx_in_a_chroot .
O artigo detalha como primeiro configurar o chroot, então como entrar no chroot e configurar o sistema principal.

Outro artigo desse tipo vem do Arch Linux:
Executando aplicativos gráficos a partir do chroot .

Mais para o Ubuntu:
Acessando aplicativos gráficos dentro do chroot
Criando uma cadeia chroot com som e X11

Para o KDE: Kde4schroot . Já que é o que é exigido, aqui estão alguns detalhes:

Substituir /etc/schroot/schroot.conf com:

# schroot chroot definitions.
# See schroot.conf(5) for complete documentation of the file format.
#
# Please take note that you should not add untrusted users to
# root-groups, because they will essentially have full root access
# to your system.  They will only have root access inside the chroot,
# but that's enough to cause malicious damage.
#
[experimental]
type=directory
description=Debian experimental (unstable)
priority=4
groups=sbuild,root
users=kde4
#root-groups=root,sbuild
aliases=unstable,default
#device=/dev/hda_vg/experimental_chroot
mount-options=-o atime,sync,user_xattr
location=/home/chroot
run-setup-scripts=true
run-exec-scripts=true

Então substitua /etc/schroot/mount-defaults :

# mount.defaults: static file system information for chroots.
# Note that the mount point will be prefixed by the chroot path
# (CHROOT_PATH)
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev            /dev            none    rw,bind         0       0
/dev/pts        /dev/pts        none    rw,bind         0       0
tmpfs           /dev/shm        tmpfs   defaults        0       0
/home           /home           none    rw,bind         0       0
/tmp            /tmp            none    rw,bind         0       0

Mude para o usuário kde4:

su - kde4

Em seguida, digite schroot e digite a senha root:

schroot -u root

Adicione os repositórios lenny e experimental ao /etc/apt/sources.list:

echo "deb http://ftp.us.debian.org/debian experimental main non-free contrib" >> /etc/apt/sources.list
echo "deb http://ftp.us.debian.org/debian lenny main" >> /etc/apt/sources.list

Configurar a fixação por edição /etc/apt/preferences e adicionando:

 Package: *
 Pin: release a=experimental
 Pin-Priority: 800
 Package: *
 Pin: release a=unstable
 Pin-Priority: 400
 Package: *
 Pin: release a=lenny
 Pin-Priority: 200

Então execute update e instale o kde4:

aptitude update && aptitude install -t experimental kde4 xorg

Instale o kdm:

aptitude install -t experimental kdm

Em seguida, edite o / etc / kde4 / kdm / kdmrc e altere os servidores estáticos e de reserva:

StaticServers=:1
ReserveServers=:2,:3

Ou use o gdm (o gdm irá pedir para usar outro display se DISPLAY: 0 já estiver em uso.

aptitude install gdm

Para executar uma sessão completa do kde4, vá para um terminal virtual de texto (vt) fora da atual sessão X, por exemplo vt2 (ctrl-alt-F2). Para fazer o login em uma sessão completa do kde4, execute o seguinte:

su - kde4
schroot
su (use root passwd here)
invoke-rc.d kdm start

E agora você deve ver o kdm e deve poder fazer o login como kde4 para o kde4!
Para mais detalhes veja o artigo acima.

harrymc
fonte
Não deveria ter sido um comentário em vez de uma resposta? No melhor dos casos, é apenas uma resposta de link.
Cristian Ciupitu
@CristianCiupitu: Como eu disse acima, eu estou esperando por seu feedback, a fim de completá-lo com a resposta para sua distribuição Linux (não especificada).
harrymc
2
O problema é que todos os links são simples chroot, enquanto o problema está acontecendo usando schroot. Além disso, os dois últimos links falam sobre como executar um chroot ed aplicação gráfica em um servidor X em execução, enquanto a questão é sobre como executar um servidor X autônomo dentro schroot. Eu tentei tirar algo do primeiro link, mas até agora não tive sucesso. (Minha distribuição é Debian Wheezy.)
Petr Pudlák
Algumas fontes mais promissoras: Kde4schroot e prisão chroot com som e X11 . Além disso, você já pensou em contas e permissões?
harrymc
eh, se a pergunta original for em 2013, é provável que não haja feedback do OP. Eu consideraria ter os principais pontos aqui essencial . Eu gostaria de reverter as edições de tags, no entanto - as instruções provavelmente serão as mesmas, com mudanças específicas de distro e as intenções do OP não são claras. Eu adicionaria isso como está, é um link só responde, e todos nós tendemos a odiar isso.
Journeyman Geek