imefisto_foro
05-14-2009, 07:48 PM
En el foro inglés apareció una alternativa a esta solución así que traduje el otro post y lo puse acá (http://regnumonline.com.ar/forum/showthread.php?t=50432).
Dejo este thread para que quede guardada la información, pero parece que la otra solución es mejor.
-----------------------------------------------------------------
Hola gentes. Un usuario del foro en inglés posteó una solución al problema de "SEGFAULT", el cual apareció en una de las últimas actualizaciones y nos tuvo a varios con dolores de cabeza.
El autor de la solución es onemyndseye (http://www.regnumonline.com.ar/forum/member.php?u=244662) y el post original está ACÁ (http://www.regnumonline.com.ar/forum/showthread.php?t=41850)
Les dejo la traducción de ese post (le pedí permiso al autor). Traté de apegarme el máximo posible a las palabras de onemyndseye.
De más está decir que el que quiera intentar la solución lo hace bajo su propio riesgo.
Cualquier error en la traducción que noten, avisen así lo edito.
El post:
-----------------------------------------------------------------------------
Aquí encontrarán una solución para el problema encontrado en este thread:
http://regnumonlinegame.com/forum/showthread.php?t=36774
http://regnumonlinegame.com/forum/showthread.php?t=41714
UPDATE [05/15/2009]: Script y HOWTO solucionan el asunto de RO ejecutándose como root
UPDATE [05/16/2009]: Script y HOWTO con algunas mejoras de código menores
UPDATE [05/18/2009]: Script y HOWTO actualizados para solucionar un problema que causaba la desconexión de internet dentro del chroot.
UPDATE [05/18/2009]: Se agregó soporte Español/Inglés. El locale del Chroot será el mismo que tu sistema.
Antes que nada -- Por lo que sé, este fix funciona en Ubuntu Jaunty o las distros de Linux con versión similar. Esto significa:
Xorg 7.4
Mesa 7.4
Kernel 2.6.28
El método básico es crear un chroot (http://sherekan.com.ar/2008/11/19/que-es-y-como-crear-chroot/) usando debootstrap y configurarlo para correr aplicaciones gráficas bajo tu servidor X / escritorio corriente. Hay una buena guía para esto aquí (inglés): https://wiki.ubuntu.com/DebootstrapChroot
Al final de este post encontrarán un script que hace este trabajo por ustedes ...
Necesitas tener RO instalado en ~/regnum antes de empezar.
De ahora en más asumo que están trabajando como root. Primero necesitamos instalar un par de paquetes necesarios: debootstrap y libtxc-dxtn los cuales asumiré que uds necesitan ya que están leyendo esto ;)
sudo su
apt-get install debootstrap
wget http://debian-multimedia.org/pool/main/libt/libtxc-dxtn/libtxc-dxtn0_0.070518-0.1_i386.deb
dpkg -i libtxc-dxtn0_0.070518-0.1_i386.deb
rm -f libtxc-dxtn0_0.070518-0.1_i386.deb
Para crear tu chroot asumiremos que quieres ponerlo en /opt/hardy-chroot
mkdir -p /opt/hardy-chroot
debootstrap --variant=buildd hardy /opt/hardy-chroot http://archive.ubuntu.com/ubuntu/
mkdir -p /opt/hardy-chroot/var/run/dbus
mkdir -p /opt/hardy-chroot/lib/modules
mkdir -p /opt/hardy-chroot/home
mkdir -p /opt/hardy-chroot/host-etc
Reemplazar los contenidos de /opt/hardy-chroot/etc/apt/sources.list
con las siguientes líneas: (hint: pico /opt/hardy-chroot/etc/apt/sources.list)
deb http://us.archive.ubuntu.com/ubuntu/ hardy main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ hardy main restricted
deb http://us.archive.ubuntu.com/ubuntu/ hardy-updates main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ hardy-updates main restricted
deb http://us.archive.ubuntu.com/ubuntu/ hardy universe
deb-src http://us.archive.ubuntu.com/ubuntu/ hardy universe
deb http://us.archive.ubuntu.com/ubuntu/ hardy-updates universe
deb-src http://us.archive.ubuntu.com/ubuntu/ hardy-updates universe
deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ hardy multiverse
deb http://us.archive.ubuntu.com/ubuntu/ hardy-updates multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ hardy-updates multiverse
deb http://us.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
deb http://archive.canonical.com/ubuntu hardy partner
deb-src http://archive.canonical.com/ubuntu hardy partner
deb http://security.ubuntu.com/ubuntu hardy-security main restricted
deb-src http://security.ubuntu.com/ubuntu hardy-security main restricted
deb http://security.ubuntu.com/ubuntu hardy-security universe
deb-src http://security.ubuntu.com/ubuntu hardy-security universe
deb http://security.ubuntu.com/ubuntu hardy-security multiverse
deb-src http://security.ubuntu.com/ubuntu hardy-security multiverse
Estas líneas deberían ser agregadas a tu /etc/fstab
/proc /opt/hardy-chroot/proc none rbind 0 0
/dev /opt/hardy-chroot/dev none rbind 0 0
/sys /opt/hardy-chroot/sys none rbind 0 0
/tmp /opt/hardy-chroot/tmp none rbind 0 0
/home /opt/hardy-chroot/home none rbind 0 0
/etc /opt/hardy-chroot/host-etc none rbind 0 0
/lib/modules /opt/hardy-chroot/lib/modules none rbind 0 0
/var/run/dbus /opt/hardy-chroot/var/run/dbus none rbind 0 0
Ejecutar el siguiente comando para montar el sistema de archivos necesario y entrar al chroot
mount -a
chroot /opt/hardy-chroot
Una vez aquí necesitamos instalar los paquetes necesarios para configurar el sistema de manera apropiada y para ejecutar RO
rm /etc/resolv.conf
ln -s /host-etc/resolv.conf /etc/resolv.conf
export LANG=C
apt-get update
apt-get --yes --force-yes --no-install-recommends install wget debconf devscripts gnupg nano
apt-get update
apt-get --yes --force-yes install language-pack-en
apt-get --yes --force-yes install xorg libgl1-mesa-dri libgl1-mesa-glx libglu1-mesa mesa-utils libglib2.0-0 libgtk2.0-0 libxt6 libopenal0a
wget http://debian-multimedia.org/pool/main/libt/libtxc-dxtn/libtxc-dxtn0_0.070518-0.1_i386.deb
dpkg -i libtxc-dxtn0_0.070518-0.1_i386.deb
rm -f libtxc-dxtn0_0.070518-0.1_i386.deb
apt-get clean
rm /etc/hostname
rm /etc/group
rm /etc/passwd
rm /etc/shadow
rm /etc/gshadow
ln -s /host-etc/hosts /etc/hosts
ln -s /host-etc/hostname /etc/hostname
ln -s /host-etc/group /etc/group
ln -s /host-etc/passwd /etc/passwd
ln -s /host-etc/shadow /etc/shadow
ln -s /host-etc/gshadow /etc/gshadow
mkdir -p /etc/default
rm /etc/default/locale
ln -s /host-etc/default/locale /etc/default/locale
exit
Salir de la actual sesión root:
exit
** NOTA YA NO ESTAMOS COMO ROOT **
Ahora debes crear 2 scripts para ejecutar RO:
~/regnum/chrooted_ro.sh
!/bin/bash
##
##
### NO EJECUTAR ESTE SCRIPT DIRECTAMENTE. Éste debería ser llamado por regnum-online.sh
# aceptar como usuario al pasado como parámetro desde regnum-online.sh
USER=$1
## Función para esperar hasta que RO haya finalizado
wait_game() {
RO_EXIT="0"
while [ $RO_EXIT = "0" ]
do
TMP1=$(ps -U $USER |grep game |grep -v grep |awk '{print $1}')
if [ -z "$TMP1" ]; then
RO_EXIT=1
fi
sleep 0.5
done
}
### Configurar entorno e iniciar launcher
cd /home/$USER/regnum
export MALLOC_CHECK_=1
su $USER -c ./rolauncher
## Esperar al proceso principal para salir. Para esto usamos un loop
#
sleep 2
wait_game
~/regnum/chrooted_ro.sh
#!/bin/bash
sudo chroot /opt/hardy-chroot /home/$USER/regnum/chrooted_ro.sh $USER
exit 0
Finalmente damos permiso de ejecución a ambos scripts:
chmod +x ~/chrooted_ro.sh
chmod +x ~/regnum-online.sh
Afortunadamente, he creado un script para hacer todo esto por ustedes ;) se encuentra aquí:
http://onemyndseye.doesntexist.com/scripts/build-ro-bottle.sh
*** UPDATE: se agregó soporte de locale Español/Inglés al script. El lenguaje es detectado a partir del sistema host y puede ser sobreescrito por el argumento --lang.. en cuyo caso se te pedirá confirmación. Ejemplo:
onemyndseye@onemyndsmobile ~ $ ./build-ro-bottle.sh --lang
1. English
2. Enspanol
English or Espanol?:
Este script se encarga de todo lo anterior incluyendo la construcción de los scripts para ejecutar RO. Lo único que dejé fuera del script es editar el archivo /etc/sudoers que nos permite saltar el introducir la contraseña ....
Para hacer esto...editar el archivo sudoers con el comando: sudo pico /etc/sudoers
Agregar la siguiente línea:
<YOUR USER NAME> ALL = NOPASSWD: /usr/sbin/chroot
Ejemplo:
onemyndseye ALL = NOPASSWD: /usr/sbin/chroot
Ahora puedes ejecutar RO con el siguiente comando: ~/regnum/regnum-online.sh
**** IMPORTANTE: Si desean borrar los archivos en /opt/hardy-chroot DEBEN remover las líneas relacionadas de /etc/fstab primero ENTONCES REBOOTEAR EL PC... de lo contrario esto arruinará tu instalación de linux
Este método y script deberían ser considerados un borrador así que espero que evolucione y sea mejorado con el tiempo...también notar que puede interrumpirse sin aviso y RO dejar de funcionar -- simplemente habrá que seguir adelante cuando lleguemos ahí
Una vez más, el link para el script: http://onemyndseye.doesntexist.com/scripts/build-ro-bottle.sh
Dejo este thread para que quede guardada la información, pero parece que la otra solución es mejor.
-----------------------------------------------------------------
Hola gentes. Un usuario del foro en inglés posteó una solución al problema de "SEGFAULT", el cual apareció en una de las últimas actualizaciones y nos tuvo a varios con dolores de cabeza.
El autor de la solución es onemyndseye (http://www.regnumonline.com.ar/forum/member.php?u=244662) y el post original está ACÁ (http://www.regnumonline.com.ar/forum/showthread.php?t=41850)
Les dejo la traducción de ese post (le pedí permiso al autor). Traté de apegarme el máximo posible a las palabras de onemyndseye.
De más está decir que el que quiera intentar la solución lo hace bajo su propio riesgo.
Cualquier error en la traducción que noten, avisen así lo edito.
El post:
-----------------------------------------------------------------------------
Aquí encontrarán una solución para el problema encontrado en este thread:
http://regnumonlinegame.com/forum/showthread.php?t=36774
http://regnumonlinegame.com/forum/showthread.php?t=41714
UPDATE [05/15/2009]: Script y HOWTO solucionan el asunto de RO ejecutándose como root
UPDATE [05/16/2009]: Script y HOWTO con algunas mejoras de código menores
UPDATE [05/18/2009]: Script y HOWTO actualizados para solucionar un problema que causaba la desconexión de internet dentro del chroot.
UPDATE [05/18/2009]: Se agregó soporte Español/Inglés. El locale del Chroot será el mismo que tu sistema.
Antes que nada -- Por lo que sé, este fix funciona en Ubuntu Jaunty o las distros de Linux con versión similar. Esto significa:
Xorg 7.4
Mesa 7.4
Kernel 2.6.28
El método básico es crear un chroot (http://sherekan.com.ar/2008/11/19/que-es-y-como-crear-chroot/) usando debootstrap y configurarlo para correr aplicaciones gráficas bajo tu servidor X / escritorio corriente. Hay una buena guía para esto aquí (inglés): https://wiki.ubuntu.com/DebootstrapChroot
Al final de este post encontrarán un script que hace este trabajo por ustedes ...
Necesitas tener RO instalado en ~/regnum antes de empezar.
De ahora en más asumo que están trabajando como root. Primero necesitamos instalar un par de paquetes necesarios: debootstrap y libtxc-dxtn los cuales asumiré que uds necesitan ya que están leyendo esto ;)
sudo su
apt-get install debootstrap
wget http://debian-multimedia.org/pool/main/libt/libtxc-dxtn/libtxc-dxtn0_0.070518-0.1_i386.deb
dpkg -i libtxc-dxtn0_0.070518-0.1_i386.deb
rm -f libtxc-dxtn0_0.070518-0.1_i386.deb
Para crear tu chroot asumiremos que quieres ponerlo en /opt/hardy-chroot
mkdir -p /opt/hardy-chroot
debootstrap --variant=buildd hardy /opt/hardy-chroot http://archive.ubuntu.com/ubuntu/
mkdir -p /opt/hardy-chroot/var/run/dbus
mkdir -p /opt/hardy-chroot/lib/modules
mkdir -p /opt/hardy-chroot/home
mkdir -p /opt/hardy-chroot/host-etc
Reemplazar los contenidos de /opt/hardy-chroot/etc/apt/sources.list
con las siguientes líneas: (hint: pico /opt/hardy-chroot/etc/apt/sources.list)
deb http://us.archive.ubuntu.com/ubuntu/ hardy main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ hardy main restricted
deb http://us.archive.ubuntu.com/ubuntu/ hardy-updates main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ hardy-updates main restricted
deb http://us.archive.ubuntu.com/ubuntu/ hardy universe
deb-src http://us.archive.ubuntu.com/ubuntu/ hardy universe
deb http://us.archive.ubuntu.com/ubuntu/ hardy-updates universe
deb-src http://us.archive.ubuntu.com/ubuntu/ hardy-updates universe
deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ hardy multiverse
deb http://us.archive.ubuntu.com/ubuntu/ hardy-updates multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ hardy-updates multiverse
deb http://us.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
deb http://archive.canonical.com/ubuntu hardy partner
deb-src http://archive.canonical.com/ubuntu hardy partner
deb http://security.ubuntu.com/ubuntu hardy-security main restricted
deb-src http://security.ubuntu.com/ubuntu hardy-security main restricted
deb http://security.ubuntu.com/ubuntu hardy-security universe
deb-src http://security.ubuntu.com/ubuntu hardy-security universe
deb http://security.ubuntu.com/ubuntu hardy-security multiverse
deb-src http://security.ubuntu.com/ubuntu hardy-security multiverse
Estas líneas deberían ser agregadas a tu /etc/fstab
/proc /opt/hardy-chroot/proc none rbind 0 0
/dev /opt/hardy-chroot/dev none rbind 0 0
/sys /opt/hardy-chroot/sys none rbind 0 0
/tmp /opt/hardy-chroot/tmp none rbind 0 0
/home /opt/hardy-chroot/home none rbind 0 0
/etc /opt/hardy-chroot/host-etc none rbind 0 0
/lib/modules /opt/hardy-chroot/lib/modules none rbind 0 0
/var/run/dbus /opt/hardy-chroot/var/run/dbus none rbind 0 0
Ejecutar el siguiente comando para montar el sistema de archivos necesario y entrar al chroot
mount -a
chroot /opt/hardy-chroot
Una vez aquí necesitamos instalar los paquetes necesarios para configurar el sistema de manera apropiada y para ejecutar RO
rm /etc/resolv.conf
ln -s /host-etc/resolv.conf /etc/resolv.conf
export LANG=C
apt-get update
apt-get --yes --force-yes --no-install-recommends install wget debconf devscripts gnupg nano
apt-get update
apt-get --yes --force-yes install language-pack-en
apt-get --yes --force-yes install xorg libgl1-mesa-dri libgl1-mesa-glx libglu1-mesa mesa-utils libglib2.0-0 libgtk2.0-0 libxt6 libopenal0a
wget http://debian-multimedia.org/pool/main/libt/libtxc-dxtn/libtxc-dxtn0_0.070518-0.1_i386.deb
dpkg -i libtxc-dxtn0_0.070518-0.1_i386.deb
rm -f libtxc-dxtn0_0.070518-0.1_i386.deb
apt-get clean
rm /etc/hostname
rm /etc/group
rm /etc/passwd
rm /etc/shadow
rm /etc/gshadow
ln -s /host-etc/hosts /etc/hosts
ln -s /host-etc/hostname /etc/hostname
ln -s /host-etc/group /etc/group
ln -s /host-etc/passwd /etc/passwd
ln -s /host-etc/shadow /etc/shadow
ln -s /host-etc/gshadow /etc/gshadow
mkdir -p /etc/default
rm /etc/default/locale
ln -s /host-etc/default/locale /etc/default/locale
exit
Salir de la actual sesión root:
exit
** NOTA YA NO ESTAMOS COMO ROOT **
Ahora debes crear 2 scripts para ejecutar RO:
~/regnum/chrooted_ro.sh
!/bin/bash
##
##
### NO EJECUTAR ESTE SCRIPT DIRECTAMENTE. Éste debería ser llamado por regnum-online.sh
# aceptar como usuario al pasado como parámetro desde regnum-online.sh
USER=$1
## Función para esperar hasta que RO haya finalizado
wait_game() {
RO_EXIT="0"
while [ $RO_EXIT = "0" ]
do
TMP1=$(ps -U $USER |grep game |grep -v grep |awk '{print $1}')
if [ -z "$TMP1" ]; then
RO_EXIT=1
fi
sleep 0.5
done
}
### Configurar entorno e iniciar launcher
cd /home/$USER/regnum
export MALLOC_CHECK_=1
su $USER -c ./rolauncher
## Esperar al proceso principal para salir. Para esto usamos un loop
#
sleep 2
wait_game
~/regnum/chrooted_ro.sh
#!/bin/bash
sudo chroot /opt/hardy-chroot /home/$USER/regnum/chrooted_ro.sh $USER
exit 0
Finalmente damos permiso de ejecución a ambos scripts:
chmod +x ~/chrooted_ro.sh
chmod +x ~/regnum-online.sh
Afortunadamente, he creado un script para hacer todo esto por ustedes ;) se encuentra aquí:
http://onemyndseye.doesntexist.com/scripts/build-ro-bottle.sh
*** UPDATE: se agregó soporte de locale Español/Inglés al script. El lenguaje es detectado a partir del sistema host y puede ser sobreescrito por el argumento --lang.. en cuyo caso se te pedirá confirmación. Ejemplo:
onemyndseye@onemyndsmobile ~ $ ./build-ro-bottle.sh --lang
1. English
2. Enspanol
English or Espanol?:
Este script se encarga de todo lo anterior incluyendo la construcción de los scripts para ejecutar RO. Lo único que dejé fuera del script es editar el archivo /etc/sudoers que nos permite saltar el introducir la contraseña ....
Para hacer esto...editar el archivo sudoers con el comando: sudo pico /etc/sudoers
Agregar la siguiente línea:
<YOUR USER NAME> ALL = NOPASSWD: /usr/sbin/chroot
Ejemplo:
onemyndseye ALL = NOPASSWD: /usr/sbin/chroot
Ahora puedes ejecutar RO con el siguiente comando: ~/regnum/regnum-online.sh
**** IMPORTANTE: Si desean borrar los archivos en /opt/hardy-chroot DEBEN remover las líneas relacionadas de /etc/fstab primero ENTONCES REBOOTEAR EL PC... de lo contrario esto arruinará tu instalación de linux
Este método y script deberían ser considerados un borrador así que espero que evolucione y sea mejorado con el tiempo...también notar que puede interrumpirse sin aviso y RO dejar de funcionar -- simplemente habrá que seguir adelante cuando lleguemos ahí
Una vez más, el link para el script: http://onemyndseye.doesntexist.com/scripts/build-ro-bottle.sh