Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Anbox in Lxd container #1203

Open
ss14 opened this issue Jul 24, 2019 · 8 comments
Open

Anbox in Lxd container #1203

ss14 opened this issue Jul 24, 2019 · 8 comments

Comments

@ss14
Copy link

@ss14 ss14 commented Jul 24, 2019

It seems running anbox in lxd container is not impossible as in blog by @morphis https://ubuntu.com/blog/running-android-in-the-cloud-with-amazon-ec2-a1-instances

I tried below steps to run anbox in lxd container.

  1. Install ashmem and binder modules in host machine.
  2. Create lxd container based on ubuntu 18.04 image
  3. added the ashmem and binder devices in lxd container. [ I also added loop0 and loop-control device in the lxd container]
  4. set security.privileged true for the lxd container.
  5. Setting X11 in lxd container [https://blog.simos.info/how-to-easily-run-graphics-accelerated-gui-apps-in-lxd-containers-on-your-ubuntu-desktop/]

Now I thought prerequisite for anbox in the lxd container was done and proceeded first to give a try to snap version of anbox.

But I am stuck with the snap error: "cannot setup udev for snap "anbox"" while installing.
After investigating, I gave up snap version and proceeded to compile anbox and manually run container-manger and session-manager.

I was successful in running container-manager but when running session-manager, I got "failed to connect to dbus" error. I installed dbus dbus-x11 inside lxd container but nothing changed.

// inside lxd container

ubuntu@my-ubuntu:~$ sudo ANBOX_LOG_LEVEL=debug anbox container-manager --android-image=/home/ubuntu/android.img --data-path=/home/ubuntu/anbox-data/ --privileged --daemon
[ 2019-07-24 08:54:22] [mount_entry.cpp:36@create] Mounting "/dev/loop1" on "/home/ubuntu/anbox-data/rootfs" ...
[ 2019-07-24 08:54:22] [mount_entry.cpp:36@create] Mounting "/home/ubuntu/anbox-data/cache" on "/home/ubuntu/anbox-data/rootfs/cache" ...
[ 2019-07-24 08:54:22] [mount_entry.cpp:36@create] Mounting "/home/ubuntu/anbox-data/data" on "/home/ubuntu/anbox-data/rootfs/data" ...
[ 2019-07-24 08:54:22] [service.cpp:57@create] Everything setup. Waiting for incoming connections.
[ 2019-07-24 08:54:34] [service.cpp:84@new_client] Got connection from pid 15838
ubuntu@my-ubuntu:~/anbox-data/containers$ ANBOX_LOG_LEVEL=debug anbox session-manager
[ 2019-07-24 08:54:34] [Renderer.cpp:168@initialize] Using a surfaceless EGL context
[ 2019-07-24 08:54:34] [Renderer.cpp:251@initialize] Successfully initialized EGL
[ 2019-07-24 08:54:34] [daemon.cpp:61@Run] Failed to connect to DBus

Running anbox in docker or lxd will be great and I hope someone is giving this a try.
Any help in this regard is appreciated.

Thanks!

@ss14

This comment has been minimized.

Copy link
Author

@ss14 ss14 commented Jul 24, 2019

// anbox system-info showing correct binder and ashmem modules

version: local-c732719
cpu:
  arch:  x86
  brand: Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
  features: 
    - aes
    - sse4_1
    - sse4_2
    - avx
    - avx2
os:
  name: Ubuntu
  version: 18.04.2 LTS (Bionic Beaver)
  snap-based: false
kernel:
  version: Linux version 4.18.0-25-generic (buildd@lgw01-amd64-033) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #26~18.04.1-Ubuntu SMP Thu Jun 27 07:28:31 UTC 2019
  binder: true
  ashmem: true
graphics:
  egl:
    vendor: Mesa Project
    version: 1.4
    extensions:
      - EGL_ANDROID_blob_cache
      - EGL_ANDROID_native_fence_sync
      - EGL_CHROMIUM_sync_control
      - EGL_EXT_buffer_age
      - EGL_EXT_create_context_robustness
      - EGL_EXT_image_dma_buf_import
      - EGL_EXT_image_dma_buf_import_modifiers
      - EGL_IMG_context_priority
      - EGL_KHR_config_attribs
      - EGL_KHR_create_context
      - EGL_KHR_create_context_no_error
      - EGL_KHR_fence_sync
      - EGL_KHR_get_all_proc_addresses
      - EGL_KHR_gl_colorspace
      - EGL_KHR_gl_renderbuffer_image
      - EGL_KHR_gl_texture_2D_image
      - EGL_KHR_gl_texture_3D_image
      - EGL_KHR_gl_texture_cubemap_image
      - EGL_KHR_image
      - EGL_KHR_image_base
      - EGL_KHR_image_pixmap
      - EGL_KHR_no_config_context
      - EGL_KHR_reusable_sync
      - EGL_KHR_surfaceless_context
      - EGL_EXT_pixel_format_float
      - EGL_KHR_wait_sync
      - EGL_MESA_configless_context
      - EGL_MESA_drm_image
      - EGL_MESA_image_dma_buf_export
      - EGL_MESA_query_driver
      - EGL_NOK_texture_from_pixmap
      - EGL_WL_bind_wayland_display
  gles2:
    vendor: Intel Open Source Technology Center
    vendor: OpenGL ES 3.2 Mesa 19.0.2
    extensions:
      - GL_EXT_blend_minmax
      - GL_EXT_multi_draw_arrays
      - GL_EXT_texture_filter_anisotropic
      - GL_EXT_texture_compression_s3tc
      - GL_EXT_texture_compression_dxt1
      - GL_EXT_texture_compression_rgtc
      - GL_EXT_texture_format_BGRA8888
      - GL_OES_compressed_ETC1_RGB8_texture
      - GL_OES_depth24
      - GL_OES_element_index_uint
      - GL_OES_fbo_render_mipmap
      - GL_OES_mapbuffer
      - GL_OES_rgb8_rgba8
      - GL_OES_standard_derivatives
      - GL_OES_stencil8
      - GL_OES_texture_3D
      - GL_OES_texture_float
      - GL_OES_texture_float_linear
      - GL_OES_texture_half_float
      - GL_OES_texture_half_float_linear
      - GL_OES_texture_npot
      - GL_OES_vertex_half_float
      - GL_EXT_texture_sRGB_decode
      - GL_OES_EGL_image
      - GL_OES_depth_texture
      - GL_OES_packed_depth_stencil
      - GL_EXT_texture_type_2_10_10_10_REV
      - GL_OES_get_program_binary
      - GL_APPLE_texture_max_level
      - GL_EXT_discard_framebuffer
      - GL_EXT_read_format_bgra
      - GL_EXT_frag_depth
      - GL_NV_fbo_color_attachments
      - GL_OES_EGL_image_external
      - GL_OES_EGL_sync
      - GL_OES_vertex_array_object
      - GL_OES_viewport_array
      - GL_ANGLE_texture_compression_dxt3
      - GL_ANGLE_texture_compression_dxt5
      - GL_EXT_occlusion_query_boolean
      - GL_EXT_robustness
      - GL_EXT_texture_rg
      - GL_EXT_unpack_subimage
      - GL_NV_draw_buffers
      - GL_NV_read_buffer
      - GL_NV_read_depth
      - GL_NV_read_depth_stencil
      - GL_NV_read_stencil
      - GL_EXT_draw_buffers
      - GL_EXT_map_buffer_range
      - GL_KHR_debug
      - GL_KHR_robustness
      - GL_KHR_texture_compression_astc_ldr
      - GL_OES_depth_texture_cube_map
      - GL_OES_required_internalformat
      - GL_OES_surfaceless_context
      - GL_EXT_color_buffer_float
      - GL_EXT_sRGB_write_control
      - GL_EXT_separate_shader_objects
      - GL_EXT_shader_framebuffer_fetch
      - GL_EXT_shader_implicit_conversions
      - GL_EXT_shader_integer_mix
      - GL_EXT_tessellation_point_size
      - GL_EXT_tessellation_shader
      - GL_INTEL_conservative_rasterization
      - GL_INTEL_performance_query
      - GL_ANDROID_extension_pack_es31a
      - GL_EXT_base_instance
      - GL_EXT_compressed_ETC1_RGB8_sub_texture
      - GL_EXT_copy_image
      - GL_EXT_draw_buffers_indexed
      - GL_EXT_draw_elements_base_vertex
      - GL_EXT_gpu_shader5
      - GL_EXT_polygon_offset_clamp
      - GL_EXT_primitive_bounding_box
      - GL_EXT_render_snorm
      - GL_EXT_shader_io_blocks
      - GL_EXT_texture_border_clamp
      - GL_EXT_texture_buffer
      - GL_EXT_texture_cube_map_array
      - GL_EXT_texture_norm16
      - GL_EXT_texture_view
      - GL_KHR_blend_equation_advanced
      - GL_KHR_blend_equation_advanced_coherent
      - GL_KHR_context_flush_control
      - GL_KHR_robust_buffer_access_behavior
      - GL_NV_image_formats
      - GL_OES_copy_image
      - GL_OES_draw_buffers_indexed
      - GL_OES_draw_elements_base_vertex
      - GL_OES_gpu_shader5
      - GL_OES_primitive_bounding_box
      - GL_OES_sample_shading
      - GL_OES_sample_variables
      - GL_OES_shader_io_blocks
      - GL_OES_shader_multisample_interpolation
      - GL_OES_tessellation_point_size
      - GL_OES_tessellation_shader
      - GL_OES_texture_border_clamp
      - GL_OES_texture_buffer
      - GL_OES_texture_cube_map_array
      - GL_OES_texture_stencil8
      - GL_OES_texture_storage_multisample_2d_array
      - GL_OES_texture_view
      - GL_EXT_blend_func_extended
      - GL_EXT_buffer_storage
      - GL_EXT_geometry_point_size
      - GL_EXT_geometry_shader
      - GL_EXT_shader_samples_identical
      - GL_EXT_texture_sRGB_R8
      - GL_KHR_no_error
      - GL_KHR_texture_compression_astc_sliced_3d
      - GL_NV_fragment_shader_interlock
      - GL_OES_EGL_image_external_essl3
      - GL_OES_geometry_point_size
      - GL_OES_geometry_shader
      - GL_OES_shader_image_atomic
      - GL_EXT_clip_cull_distance
      - GL_EXT_disjoint_timer_query
      - GL_MESA_shader_integer_functions
      - GL_EXT_texture_compression_bptc
      - GL_EXT_shader_framebuffer_fetch_non_coherent
      - GL_MESA_framebuffer_flip_y
@timiil

This comment has been minimized.

Copy link

@timiil timiil commented Aug 13, 2019

any luck for this?

@ss14

This comment has been minimized.

Copy link
Author

@ss14 ss14 commented Aug 14, 2019

I could not make anbox work with lxd but I did manage to modify anbox code to support multiple container managers, each with its own android lxc container and separate session manager for each instance. (in non snap mode)

It is work in progress and I will share the change once its finished. Basic outline

  1. Separate out container's socket_path on basis of a defined "container id". Similarly for input and audio dir.

  2. Separate out Dbus sessions for each container (again on basis of container id)

  3. Other modules such as adb message processor and launch cmd needs to be changed on similar lines.

Support for multiple containers needs architecture level changes in Anbox.

@timiil

This comment has been minimized.

Copy link

@timiil timiil commented Aug 14, 2019

sounds very nice, we can use snap install multi times, multi instance anbox , by your prgress.
correct me if i wrong :)

@baptx

This comment has been minimized.

Copy link

@baptx baptx commented Oct 5, 2019

What would be the advantage of using LXD instead of LXC for Anbox? LXC has the advantage to be made with C++ which is easier to contribute for most people, compared to LXD which is made with Go language from Google.
LXD is based on LXC so it would also add another dependency which may be unnecessary.
@timiil using multiple Anbox instances can be done with LXC snapshots too: #1061

@Daler1993

This comment has been minimized.

Copy link

@Daler1993 Daler1993 commented Nov 13, 2019

Hello, I have encountered the same problem. Are you progressing now?

@tonychan008

This comment has been minimized.

Copy link

@tonychan008 tonychan008 commented Nov 22, 2019

I have the same problem. Have you solved it?

@Daler1993

This comment has been minimized.

Copy link

@Daler1993 Daler1993 commented Nov 22, 2019

Yes, the problem of unable to connect is solved, you can try:
$sudo apt-get install dbus-x11
$sudo service dbus start
but then there will be problem #1236.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
5 participants
You can’t perform that action at this time.