linux – WSL mount binds spontaneously disappearing

I’m having trouble with several mount binds disappearing. My fstab looks like this:

LABEL=cloudimg-rootfs   /        ext4   defaults        0 0
/mnt/c/Users/thc/CloudDrive/      /home/thc/CloudDrive/       none    defaults,bind 0 0
/mnt/x/ /home/thc/x/ none    defaults,bind 0 0

I have a startup script that gets run via a windows bat script that launches ubuntu:

sudo mount -a

I have sudoers set up so that it doesn’t require a password. This works, and I can see and edit the files in the mount locations. But occasionally, the mounts will disappear (silently without error) and can’t be remounted without completely shutting down WSL.

And occasionally, the mounts won’t get mounted after running the startup script.

Why does this happen, and how can I troubleshoot?

Is there a better way to mount my folders?

linux – Tablet for dedicated system

I would like to convert an off the shelf tablet running android into a dedicated system running one single page application.

I have purchased the following off the shelf tablet for use in my project, mainly because of the aesthetics and that it comes with a sleek charging stand that will fit nicely on a conference table. My plan is to use this device in a conference room as an interface to control the rooms audiovisual equipment.

See tablet specification below:

MediaTek® Helio P22T Tab, Octa-Core, 4 x A53 @ 2.3 GHz, 4 x A53 @ 1.8 GHz
Android™ 9 Pie™
10.3" FHD (1920 x 1200) IPS, TDDI, touchscreen, 220 PPI, 330 nits
4 GB LPDDR4X (Soldered)
64 GB eMMC
One Year Depot
2 x Side Speakers, Tuned with Dolby Atmos®; Dual Microphones (with dedicated DSP)
Li-Polymer
Bluetooth® 5.0
Rear: 8 MP auto-focus
Front: 5 MP fixed-focus
802.11 a/b/g/n/ac (1 x 1)

A little background, I am using unity for development of the user-interface. My plan is to compile it to HTML5 and load it to the panel. On boot the tablet should load my application.

I am looking for some high level direction as to what I will need to achieve this. As of right now I dont exactly have a clear path for which I can begin researching the details.

linux – Erro nas configruações do proxychains

Bom dia!

Copiei as minhas configurações do proxychains para outro computador para usar os mesmos servidores.

Masele retorna este erro:

error: invalid item in proxylist section: 125.26.7.124 61642

Gostaria de saber o porque que no meu computador funciona normalmente, mas no outro ele dá erro. Já procurei pelo erro, mas não achei nada que me ajudasse.

Linux fallout 4 and wine

I have spent in the aria of 20 hours trying to get fallout 4 to work. tiring to get wine to install and nothing works. is Linux no loner a thing?

motherboard – ASUS ROG Strix B550-E Gaming vs NVIDIA K80 and Linux

Does the ASUS ROG Strix B550-E Gaming mainboard support above 4GB PCIe addressing? I want to attach a NVIDIA k80 compute card that requires 64 Bit BAR but I could not find any information about that detail.

Also I intend to install Kubuntu 20.04 on such a board. Has anyone tried that before?

ubuntu – Setup Linux Samba to Authenticate all users without Windows throwing Security Alert

I’m trying to setup a Samba Share that authenticates users with any supplied set of credentials. Using the map to guest = ... functionality results in an error for newer Windows 10s You can't access this shared folder because your organization's security policies block unauthenticated guest access.

I thought maybe a PAM module could somehow solve that by mimicking a successful user authentication, no matter the credentials supplied.

Considered using username map to provide a wide variety of username + password variations, but the system user used for the username map can only have one distinct password. Also thought about instead adding an upstream ADDS LDAP server, but because the system is supposed to be a honeypot, I would like to keep it standalone. Any ideas?

linux – Install OpenDR in CentOS 7 for native Python 3 (not Anaconda Python)

The following command didn’t work. Could you please guide me on how to fix it?

$ pip install opendr
Collecting opendr
  Downloading opendr-0.78.tar.gz (581 kB)
     |████████████████████████████████| 581 kB 1.3 MB/s 
Requirement already satisfied: Cython in /scratch3/venv/frank/lib/python3.8/site-packages (from opendr) (0.29.22)
Requirement already satisfied: chumpy>=0.58 in /scratch3/venv/frank/lib/python3.8/site-packages (from opendr) (0.70)
Requirement already satisfied: matplotlib in /scratch3/venv/frank/lib/python3.8/site-packages (from opendr) (3.4.0)
Requirement already satisfied: scipy>=0.13.0 in /scratch3/venv/frank/lib/python3.8/site-packages (from chumpy>=0.58->opendr) (1.6.2)
Requirement already satisfied: six>=1.11.0 in /scratch3/venv/frank/lib/python3.8/site-packages (from chumpy>=0.58->opendr) (1.15.0)
Requirement already satisfied: numpy<1.23.0,>=1.16.5 in /scratch3/venv/frank/lib/python3.8/site-packages (from scipy>=0.13.0->chumpy>=0.58->opendr) (1.20.2)
Requirement already satisfied: kiwisolver>=1.0.1 in /scratch3/venv/frank/lib/python3.8/site-packages (from matplotlib->opendr) (1.3.1)
Requirement already satisfied: pyparsing>=2.2.1 in /scratch3/venv/frank/lib/python3.8/site-packages (from matplotlib->opendr) (2.4.7)
Requirement already satisfied: python-dateutil>=2.7 in /scratch3/venv/frank/lib/python3.8/site-packages (from matplotlib->opendr) (2.8.1)
Requirement already satisfied: cycler>=0.10 in /scratch3/venv/frank/lib/python3.8/site-packages (from matplotlib->opendr) (0.10.0)
Requirement already satisfied: pillow>=6.2.0 in /scratch3/venv/frank/lib/python3.8/site-packages (from matplotlib->opendr) (8.1.2)
Building wheels for collected packages: opendr
  Building wheel for opendr (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /scratch3/venv/frank/bin/python3.8 -u -c 'import sys, setuptools, tokenize; sys.argv(0) = '"'"'/scratch/tmp/pip-install-2xl2_aae/opendr_cca5ff679db14567af924447cc43444b/setup.py'"'"'; __file__='"'"'/scratch/tmp/pip-install-2xl2_aae/opendr_cca5ff679db14567af924447cc43444b/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'rn'"'"', '"'"'n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /scratch/tmp/pip-wheel-xb1f2chh
       cwd: /scratch/tmp/pip-install-2xl2_aae/opendr_cca5ff679db14567af924447cc43444b/
  Complete output (65 lines):
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.linux-x86_64-3.8
  creating build/lib.linux-x86_64-3.8/opendr
  copying opendr/__init__.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/camera.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/common.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/cvwrap.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/dummy.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/everything.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/filters.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/geometry.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/lighting.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/occlusion_test.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/renderer.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/serialization.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/simple.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/slider_demo.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/test_camera.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/test_depth_renderer.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/test_geometry.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/test_renderer.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/test_sh.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/topology.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/util_tests.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/utils.py -> build/lib.linux-x86_64-3.8/opendr
  copying opendr/version.py -> build/lib.linux-x86_64-3.8/opendr
  creating build/lib.linux-x86_64-3.8/opendr/contexts
  copying opendr/contexts/__init__.py -> build/lib.linux-x86_64-3.8/opendr/contexts
  copying opendr/contexts/_constants.py -> build/lib.linux-x86_64-3.8/opendr/contexts
  copying opendr/contexts/autogen.py -> build/lib.linux-x86_64-3.8/opendr/contexts
  copying opendr/contexts/draw_triangle_shaders_2_1.py -> build/lib.linux-x86_64-3.8/opendr/contexts
  copying opendr/contexts/draw_triangle_shaders_3_2.py -> build/lib.linux-x86_64-3.8/opendr/contexts
  copying opendr/contexts/fix_warnings.py -> build/lib.linux-x86_64-3.8/opendr/contexts
  creating build/lib.linux-x86_64-3.8/opendr/test_dr
  copying opendr/test_dr/__init__.py -> build/lib.linux-x86_64-3.8/opendr/test_dr
  running build_ext
  building 'opendr.contexts.ctx_mesa' extension
  creating build/temp.linux-x86_64-3.8
  creating build/temp.linux-x86_64-3.8/opendr
  creating build/temp.linux-x86_64-3.8/opendr/contexts
  gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -D__OSMESA__=1 -Iopendr/contexts -I. -I/scratch3/venv/frank/lib/python3.8/site-packages/numpy/core/include -Iopendr/contexts/OSMesa/include -I/scratch3/venv/frank/include -I/usr/local/include/python3.8 -c opendr/contexts/ctx_mesa.c -o build/temp.linux-x86_64-3.8/opendr/contexts/ctx_mesa.o -lstdc++
  In file included from /scratch3/venv/frank/lib/python3.8/site-packages/numpy/core/include/numpy/ndarraytypes.h:1944:0,
                   from /scratch3/venv/frank/lib/python3.8/site-packages/numpy/core/include/numpy/ndarrayobject.h:12,
                   from /scratch3/venv/frank/lib/python3.8/site-packages/numpy/core/include/numpy/arrayobject.h:4,
                   from opendr/contexts/ctx_mesa.c:660:
  /scratch3/venv/frank/lib/python3.8/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: #warning "Using deprecated NumPy API, disable it with " "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" (-Wcpp)
   #warning "Using deprecated NumPy API, disable it with " 
    ^~~~~~~
  opendr/contexts/ctx_mesa.c: In function ‘__pyx_pf_6opendr_8contexts_8ctx_mesa_13OsContextBase_150ShaderSource’:
  opendr/contexts/ctx_mesa.c:13144:49: warning: passing argument 3 of ‘glShaderSource’ from incompatible pointer type (-Wincompatible-pointer-types)
     glShaderSource(__pyx_v_shader, __pyx_v_count, (&__pyx_v_s), (&__pyx_v_len));
                                                   ^
  In file included from opendr/contexts/OSMesa/include/GL/gl.h:2085:0,
                   from opendr/contexts/gl_includes.h:10,
                   from opendr/contexts/ctx_mesa.c:668:
  opendr/contexts/OSMesa/include/GL/glext.h:5794:21: note: expected ‘const GLchar ** {aka const char **}’ but argument is of type ‘char **’
   GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length);
                       ^~~~~~~~~~~~~~
  gcc -pthread -shared build/temp.linux-x86_64-3.8/opendr/contexts/ctx_mesa.o -Lopendr/contexts/OSMesa/lib -lOSMesa -lGL -lGLU -o build/lib.linux-x86_64-3.8/opendr/contexts/ctx_mesa.cpython-38-x86_64-linux-gnu.so -lstdc++
  /usr/bin/ld: cannot find -lOSMesa
  collect2: error: ld returned 1 exit status
  error: command 'gcc' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for opendr
  Running setup.py clean for opendr
Failed to build opendr
Installing collected packages: opendr
    Running setup.py install for opendr ... error
    ERROR: Command errored out with exit status 1:
     command: /scratch3/venv/frank/bin/python3.8 -u -c 'import sys, setuptools, tokenize; sys.argv(0) = '"'"'/scratch/tmp/pip-install-2xl2_aae/opendr_cca5ff679db14567af924447cc43444b/setup.py'"'"'; __file__='"'"'/scratch/tmp/pip-install-2xl2_aae/opendr_cca5ff679db14567af924447cc43444b/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'rn'"'"', '"'"'n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /scratch/tmp/pip-record-q52my77n/install-record.txt --single-version-externally-managed --compile --install-headers /scratch3/venv/frank/include/site/python3.8/opendr
         cwd: /scratch/tmp/pip-install-2xl2_aae/opendr_cca5ff679db14567af924447cc43444b/
    Complete output (65 lines):
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.8
    creating build/lib.linux-x86_64-3.8/opendr
    copying opendr/__init__.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/camera.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/common.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/cvwrap.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/dummy.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/everything.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/filters.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/geometry.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/lighting.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/occlusion_test.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/renderer.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/serialization.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/simple.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/slider_demo.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/test_camera.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/test_depth_renderer.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/test_geometry.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/test_renderer.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/test_sh.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/topology.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/util_tests.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/utils.py -> build/lib.linux-x86_64-3.8/opendr
    copying opendr/version.py -> build/lib.linux-x86_64-3.8/opendr
    creating build/lib.linux-x86_64-3.8/opendr/contexts
    copying opendr/contexts/__init__.py -> build/lib.linux-x86_64-3.8/opendr/contexts
    copying opendr/contexts/_constants.py -> build/lib.linux-x86_64-3.8/opendr/contexts
    copying opendr/contexts/autogen.py -> build/lib.linux-x86_64-3.8/opendr/contexts
    copying opendr/contexts/draw_triangle_shaders_2_1.py -> build/lib.linux-x86_64-3.8/opendr/contexts
    copying opendr/contexts/draw_triangle_shaders_3_2.py -> build/lib.linux-x86_64-3.8/opendr/contexts
    copying opendr/contexts/fix_warnings.py -> build/lib.linux-x86_64-3.8/opendr/contexts
    creating build/lib.linux-x86_64-3.8/opendr/test_dr
    copying opendr/test_dr/__init__.py -> build/lib.linux-x86_64-3.8/opendr/test_dr
    running build_ext
    building 'opendr.contexts.ctx_mesa' extension
    creating build/temp.linux-x86_64-3.8
    creating build/temp.linux-x86_64-3.8/opendr
    creating build/temp.linux-x86_64-3.8/opendr/contexts
    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -D__OSMESA__=1 -Iopendr/contexts -I. -I/scratch3/venv/frank/lib/python3.8/site-packages/numpy/core/include -Iopendr/contexts/OSMesa/include -I/scratch3/venv/frank/include -I/usr/local/include/python3.8 -c opendr/contexts/ctx_mesa.c -o build/temp.linux-x86_64-3.8/opendr/contexts/ctx_mesa.o -lstdc++
    In file included from /scratch3/venv/frank/lib/python3.8/site-packages/numpy/core/include/numpy/ndarraytypes.h:1944:0,
                     from /scratch3/venv/frank/lib/python3.8/site-packages/numpy/core/include/numpy/ndarrayobject.h:12,
                     from /scratch3/venv/frank/lib/python3.8/site-packages/numpy/core/include/numpy/arrayobject.h:4,
                     from opendr/contexts/ctx_mesa.c:660:
    /scratch3/venv/frank/lib/python3.8/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: #warning "Using deprecated NumPy API, disable it with " "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" (-Wcpp)
     #warning "Using deprecated NumPy API, disable it with " 
      ^~~~~~~
    opendr/contexts/ctx_mesa.c: In function ‘__pyx_pf_6opendr_8contexts_8ctx_mesa_13OsContextBase_150ShaderSource’:
    opendr/contexts/ctx_mesa.c:13144:49: warning: passing argument 3 of ‘glShaderSource’ from incompatible pointer type (-Wincompatible-pointer-types)
       glShaderSource(__pyx_v_shader, __pyx_v_count, (&__pyx_v_s), (&__pyx_v_len));
                                                     ^
    In file included from opendr/contexts/OSMesa/include/GL/gl.h:2085:0,
                     from opendr/contexts/gl_includes.h:10,
                     from opendr/contexts/ctx_mesa.c:668:
    opendr/contexts/OSMesa/include/GL/glext.h:5794:21: note: expected ‘const GLchar ** {aka const char **}’ but argument is of type ‘char **’
     GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length);
                         ^~~~~~~~~~~~~~
    gcc -pthread -shared build/temp.linux-x86_64-3.8/opendr/contexts/ctx_mesa.o -Lopendr/contexts/OSMesa/lib -lOSMesa -lGL -lGLU -o build/lib.linux-x86_64-3.8/opendr/contexts/ctx_mesa.cpython-38-x86_64-linux-gnu.so -lstdc++
    /usr/bin/ld: cannot find -lOSMesa
    collect2: error: ld returned 1 exit status
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /scratch3/venv/frank/bin/python3.8 -u -c 'import sys, setuptools, tokenize; sys.argv(0) = '"'"'/scratch/tmp/pip-install-2xl2_aae/opendr_cca5ff679db14567af924447cc43444b/setup.py'"'"'; __file__='"'"'/scratch/tmp/pip-install-2xl2_aae/opendr_cca5ff679db14567af924447cc43444b/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'rn'"'"', '"'"'n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /scratch/tmp/pip-record-q52my77n/install-record.txt --single-version-externally-managed --compile --install-headers /scratch3/venv/frank/include/site/python3.8/opendr Check the logs for full command output.

I have:

$ python
Python 3.8.5 (default, Mar 31 2021, 02:37:07) 
(GCC 7.3.1 20180303 (Red Hat 7.3.1-5)) on linux

and

$ lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.9.2009 (Core)
Release:    7.9.2009
Codename:   Core


linux – Anaconda Virtual Environment Tensorflow allocates 95% of memory and the process is very slow

I have a server running on CentOS 7 where I am trying to create a conda environment to run some GPU (NVIDIA) processes.
This is what I did:

  1. created a conda env with python 3.6
  2. conda install tensorflow-gpu=1.14 keras=2.2.4

When I tried to train a model, I can see that GPU is getting worked by monitoring GPU memory usage.
However, the issue is that tensorflow allocates about 95% of memory for the model when I configure it and the process is very slow such that I would never get to the point where I actually train images.

So, I tried to limit the memory allocation, but the slow process persists.

I also tried TF_FORCE_GPU_ALLOW_GROWTH=True, but the process is still slow while GPU gets worked and fan kicks in after a minute or so.

Lastly, here are the different versions that I have tried:

  1. tensorflow-gpu=1.14, keras=2.2.4, cudatoolkit=10.0, cudnn=7.6.5
  2. tensorflow-gpu=1.14, keras=2.2.4, cudatoolkit=10.1, cudnn=7.6.5
  3. tensorflow-gpu=1.12, keras=2.2.4, cudatoolkit=9.2, cudnn=7.6.5

Any help would be much much appreciated!!
Thank you.

linux – Bash script to copy files and then move them to trash (non-destructive)

I am trying to write a script to copy files with cp or, preferably, rsync and then move the source files to the trash. I do not want to use mv because in case of an error, I want to be able to recover the source files.

This script works. It hard codes the destination folder.

for i in "$@"; do
    cp -a -R "$i" '/home/userxyz/Downloads/folder1'
    gio trash "$i"
done

However, this script that uses a variable for the destination folder does not work.

read -p "Enter destination folder: " destination

for i in "$@"; do
    cp -a -R "$i" "$destination"
    gio trash "$i"
done

Error when I enter ‘/home/userxyz/Downloads/folder1’ as destination:

cp: cannot create regular file "'/home/userxyz/Downloads/folder1'": No such file or directory

Similarly, this works:

for i in "$@"; do
    rsync "$i" '/home/userxyz/Downloads/folder1'
    gio trash "$i"
done

But this does not work:

read -p "Enter destination folder: " destination

for i in "$@"; do
    rsync "$i" "$destination"
    gio trash "$i"
done

Error:

rsync: change_dir#3 "/home/userxyz//'/home/userxyz/Downloads" failed: No such file or directory (2)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(720) (Receiver=3.1.3)

I have confirmed that ‘/home/userxyz/Downloads/folder1’ exists. What am I doing wrong?

linux – Quiero hacer un ciclo until que pare cuando un proceso sea lanzado

Estoy haciendo un script(cabe destacar que quiero que sea 100% automatico) y en una parte quiero modificar el valor niceness de un proceso que aún no existe, antiguamente solo ponía un sleep 10, pero luego hice más complejo el script y ahora el tiempo que demora el proceso en ser lanzado es bastante inconsistente, así que quiero usar un bucle until.

Pero no tengo idea de como expresar la NO existencia de un proceso en una variable de control.

Pensé en hacer un pgrep -f Brawlhalla.exe, volcar el resultado en una variable y comparar si el valor de esa variable era una cadena de números o una variable vacía(cuando pgrep no encuentra un proceso literalmente no devuelve nada), pero investigué y creo que eso no es posible o en su defecto no encontré como hacerlo.

Alguna idea? estoy realmente atascado.