deepin 20.2 編譯 安裝 anbox


deepin 20.2 編譯 安裝 anbox

最低折騰時間: 2 hour

預覽:

image-20210428133958111image-20210428134017040

一、apt 安裝失敗原因

1. 內核不支持

$ ls -1 /dev/{ashmem,binder}
#顯示結果為空
$ sudo modprobe ashmem_linux                             
# Output:
modprobe: FATAL: Module ashmem_linux not found in directory /lib/modules/5.12.0-amd64-desktop-android

$ sudo modprobe binder_linux    
# Output:
modprobe: FATAL: Module binder_linux not found in directory /lib/modules/5.12.0-amd64-desktop-android

2. dkms驅動無法安裝

sudo apt install anbox-modules-dkms
# Output:
dpkg: 處理軟件包 anbox-modules-dkms (--configure)時出錯:
 已安裝 anbox-modules-dkms 軟件包 post-installation 腳本 子進程返回錯誤狀態 10

二、重新編譯安裝內核

重新編譯內核

參考文章:

https://github.com/anbox/anbox-modules/issues/75#issuecomment-794079944

1. 查看內核版本

$ uname -a
Linux 5.11.6-051106-generic #202103111435 SMP Thu Mar 11 14:42:39 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

2. 安裝依賴

  sudo apt install git dwarves fakeroot bc kmod kernel-package cpio libncurses5-dev libgtk2.0-dev libglib2.0-dev libglade2-dev libncurses-dev gawk flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev dpkg-dev autoconf

3. 下載內核源碼[URL]

  cd /tmp 
  mkdir kernel
  wget http://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.12.tar.gz
  • 解壓
  cd /tmp/kernel
  tar xzvf linux-*
  cd linux-5.12

4. 重要! 復制當前內核 config 配置

  cp /boot/config-$(uname -r) ./.config

5. 配置內核參數

鏈接中使用的是 make gconfig 的圖形界面配置, 但是配置項比較難找

vim ./.config
# 查找 Android 並修改如下配置:
CONFIG_ASHMEM=y

CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"

# 保存退出

如果有報證書錯誤, 編輯 CONFIG_SYSTEM_TRUSTED_KEYS="" 為空

6. 編譯內核

-j4 參數代表用幾個線程同時跑make, 一般按照CPU邏輯核心數進行設定; 例如我的機器是 4C8T(四核八線程) , 我就使用的是 -j8 參數

sudo time nice make -j8 bindeb-pkg LOCALVERSION=-android

.

.

.

編譯內核比較慢, 我這邊大約一個小時左右, 耐心等待即可

7. 安裝

cd ..
sudo dpkg -i linux-*.deb

8. 重啟確認

$ reboot

#之后
$ uname -a
Linux pro 5.12.0-amd64-desktop-android #1 SMP Tue Apr 27 16:48:19 CST 2021 x86_64 GNU/Linux


$ ls -1 /dev/{ashmem,binder}                    
/dev/ashmem

/dev/binder:
binder
binder-control
hwbinder
vndbinder

9. binder 不存在

手動創建並掛載

sudo mkdir /dev/binderfs
sudo mount -t binder binder /dev/binderfs

sudo mkdir /dev/binder
sudo mount -t binder binder /dev/binder

# 檢查: $ ls -1 /dev/{ashmem,binder}

10. modprobe 錯誤

# 內核安裝完畢之后, modprobe 依舊會失敗, 不用理會, 只需要 /dev/ashmem /dev/binder 的設備存在即可

三、源碼安裝 anbox

參考鏈接:

https://community.linuxmint.com/tutorial/view/2501

0. 卸載 apt 安裝的 anbox

sudo apt remove anbox -y

1. 安裝依賴

$ sudo apt update
$ sudo apt install build-essential cmake cmake-data debhelper dbus google-mock \
    libboost-dev libboost-filesystem-dev libboost-log-dev libboost-iostreams-dev \
    libboost-program-options-dev libboost-system-dev libboost-test-dev \
    libboost-thread-dev libcap-dev libexpat1-dev libsystemd-dev libegl1-mesa-dev \
    libgles2-mesa-dev libglm-dev libgtest-dev liblxc1 \
    libproperties-cpp-dev libprotobuf-dev libsdl2-dev libsdl2-image-dev lxc-dev \
    pkg-config protobuf-compiler libgmock-dev git \
    cmake-extras libdw-dev libbfd-dev libdwarf-dev

2. 編譯准備

cd /usr/local/src
sudo git clone https://github.com/anbox/anbox.git --recurse-submodules
sudo chown -R $USER:$USER anbox/
mkdir anbox/build/
cd anbox/build/

3. cmake 准備

cmake ..
  • 確保不會出現任何報錯信息, 否則 make 會失敗

  • 正常輸出類似這個樣子:

$ cmake ..

-- No build type selected, default to RelWithDebInfo
-- Treat warnings as errors
-- Boost version: 1.67.0
-- Found the following Boost libraries:
--   filesystem
--   log
--   serialization
--   system
--   thread
--   program_options
--   date_time
--   log_setup
--   regex
--   chrono
--   atomic
-- LXC version: 3.0.3
-- Boost version: 1.67.0
-- Found the following Boost libraries:
--   iostreams
--   system
--   regex
-- Boost version: 1.67.0
-- Found the following Boost libraries:
--   filesystem
--   system
--   unit_test_framework
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/local/src/anbox/build

4. make

sudo make -j8

5. make install

sudo -i
cd /usr/local/src/anbox/build/
make install

6. 測試

$ anbox                                               

NAME:
    anbox - anbox

USAGE:
    anbox [command options] [arguments...]

COMMANDS:
    wait-ready                     Wait until the Android system has successfully booted                                               
    check-features                 Check that the host system supports all necessary features                                          
    version                        Print the version of the daemon                                                                     
    help                           Print a short help message                                                                          
    launch                         Launch an Activity by sending an intent                                                             
    session-manager                Run the the anbox session manager                                                                   
    system-info                    Print various information about the system we're running on

如果成功進行到了這一步, 恭喜! 你已經成功了一大半!

7. 檢測 anbox 需求

$ anbox check-features
Your computer does meet all requirements to run Anbox
$ anbox system-info
version: local-9de4e87
cpu:
  arch:  x86
  brand: AMD Ryzen 5 3550H with Radeon Vega Mobile Gfx  
  features: 
    - aes
    - sse4_1
    - sse4_2
    - avx
    - avx2
os:
  name: Deepin
  version: 20.2
  snap-based: false
kernel:
  version: Linux version 5.12.0-amd64-desktop-android (root@pro) (gcc (Uos 8.3.0.3-3+rebuild) 8.3.0, GNU ld (GNU Binutils for Uos) 2.31.1) #1 SMP Tue Apr 27 16:48:19 CST 2021
  binder: true
  ashmem: true
graphics:
  egl:
    vendor: Mesa Project
    version: 1.5
    extensions:
      - EGL_ANDROID_blob_cache
...# 折疊了
      - EGL_WL_bind_wayland_display
  gles2:
    vendor: X.Org
    vendor: OpenGL ES 3.2 Mesa 19.2.6
    extensions:
      - GL_EXT_blend_minmax
...# 折疊了
      - GL_EXT_texture_query_lod

四、運行 anbox

0. 准備 Android 鏡像

wget https://build.anbox.io/android-images/2018/07/19/android_amd64.img
sudo mkdir /var/lib/anbox
sudo mv android_amd64.img /var/lib/anbox/android.img

1. 命令行運行測試

  • 新啟動一個命令行窗口 1
# 再次確認
$ ls -1 /dev/{ashmem,binder}
/dev/ashmem
/dev/binder
# 啟動 bridge 腳本
sudo /usr/local/src/anbox/scripts/anbox-bridge.sh start
# 啟動 manager 腳本
sudo anbox container-manager --daemon --privileged --data-path=/var/lib/anbox
# 上面這個命令將會占用窗口, 沒有任何輸出, 需要初始化一段時間, 放着就行, 測試完 ctrl + C 關掉就好
  • 新啟動一個命令行窗口 2
# 檢測 manager 日志, 直到文件存在且日志顯示:
# Mainloop is ready 字樣再往下走
sudo tail -f /var/lib/anbox/logs/container.log
  • 新啟動一個命令行窗口 3

啟動 anbox

anbox launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity

一般情況下會正常運行, 如果顯示 session manager failed to become ready 那么代表 上一步驟中的 manager 還沒有完全啟動, 等等再啟動即可

五、寫入 systemctl 服務

1. 寫入 service

$ sudo vim /lib/systemd/system/anbox-container-manager.service

[Unit]
Description=Anbox Container Manager
After=network.target
Wants=network.target
ConditionPathExists=/var/lib/anbox/android.img

[Service]
#ExecStartPre=/sbin/modprobe ashmem_linux
#ExecStartPre=/sbin/modprobe binder_linux
ExecStartPre=/usr/local/src/anbox/scripts/anbox-bridge.sh start
ExecStart=/usr/local/bin/anbox container-manager --daemon --privileged --data-path=/var/lib/anbox
ExecStopPost=/usr/local/src/anbox/scripts/anbox-bridge.sh stop

[Install]
WantedBy=multi-user.target

由於 modprobe ashmem_linux 命令執行會出錯, 所以跳過去 (命令的作用是啟動內核的 askmem 模塊, 不過我們已經編譯在內核里面自動啟動了, 所以這里不需要這個操作)

2. 建立啟動鏈接

sudo ln -s /lib/systemd/system/anbox-container-manager.service /etc/systemd/system/

如果顯示 ln: 無法創建符號鏈接'/etc/systemd/system/anbox-container-manager.service': 文件已存在, 刪掉 上述文件即可

3. reload daemon

sudo systemctl daemon-reload

4. 啟動

sudo systemctl start anbox-container-manager.service

# 查看運行狀態
sudo systemctl status anbox-container-manager.service

5. [選擇性]開機啟動

sudo systemctl enable anbox-container-manager.service

6. 啟動 anbox

anbox launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity

小結

deepin 由於內核版本更新的速度比較快, 而且使用的是社區維護的版本, 所以有些軟件不可用是正常的;

anbox 這一波的確比較折騰, 不過占用資源比較少;

我還沒有使用 anbox 進行操作, 當前僅僅是安裝成功, 預計情況下會有很多 app 不兼容的情況, 遇見再說吧;

希望這篇總結可以幫到你 😃

David Zhang,

Br


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM