Skip to content

过程分享:在鸿蒙PC里安装ARM64版Debian 12虚拟机并编译安装Termony #48

Open
@SwimmingTiger

Description

@SwimmingTiger
  1. 通过 Oseasy 虚拟机安装 Debian 12 ARM64 版。

    参考视频:https://www.bilibili.com/video/BV1rVMWzgEAG/

    要点1:不要删掉Windows,我们还得借助Windows版DevEco Studio获取签名证书。建议在Windows里把C盘用“压缩卷”缩小一下,留出空闲空间安装Linux。

    要点2:需要在 GRUB 传递给 Linux 内核的启动参数中添加 modprobe.blacklist=vmwgfx,禁用 vmwgfx 显卡驱动,要不然进入 Linux 后会黑屏无显示。

    要点3:虚拟机不支持DHCP,必须手动配置网络,IP地址 172.16.100.2,子网掩码 255.255.255.0,默认网关 172.16.100.1,DNS服务器 114.114.114.114。

  2. 安装编译工具链和依赖库(参考了 在WSL上成功编译的过程分享给大家 #47 ):

    sudo apt update
    sudo apt install -y build-essential make gcc flex autoconf bison tclsh gettext zlib1g-dev pkg-config jq zip unzip
    sudo apt install -y openjdk-17-jdk
    sudo apt install -y python3 python3-pip python3-setuptools python3-wheel python3-venv
    
    # 我编译的hdc命令依赖此包
    sudo apt install libusb-1.0-0-dev
    
  3. 创建一个pyenv来安装新版meson(用apt安装的版本太老,编译部分命令时会报错)。

    python3 -m venv ~/pyenv
    
    source ~/pyenv/bin/activate
    
    pip3 install meson
    

    以后每次编译前都要执行 source ~/pyenv/bin/activate,要不然找不到 meson 命令。

    如果不创建 pyenv,直接执行 pip3 install meson 也会报错,Debian 12 不让把 pip 包安装到系统目录。

  4. https://github.com/SwimmingTiger/third_party_llvm-project/releases 下载我编译的 ARM64 版 HarmonyOS 命令行工具并解压。

    cd ~
    
    wget https://github.com/SwimmingTiger/third_party_llvm-project/releases/download/15.0.4-ohos-cli-5.1.0/ohos-command-line-tools-5.1.0-for-debian-12-arm64.tar.xz
    
    tar vxf ohos-command-line-tools-5.1.0-for-debian-12-arm64.tar.xz
    
  5. 获取 Termony 的源代码(如需设置代理,可参考本文最后一节)。

    cd ~
    git clone https://github.com/jiegec/Termony.git
    cd Termony
    git submodule update --init --recursive
    
  6. 在 Termony 源代码目录创建 .npmrc 文件:

    cd ~/Termony
    
    cat <<EOF > ./.npmrc
    registry=https://repo.huaweicloud.com/repository/npm/
    @ohos:registry=https://repo.harmonyos.com/npm/
    EOF
    
  7. 编译 hnp 和 hap:

    # 激活pyenv以使用其中的meson命令
    source ~/pyenv/bin/activate
    
    # 设置必要的环境变量
    export TOOL_HOME=~/command-line-tools
    export PATH=$TOOL_HOME/sdk/default/openharmony/toolchains
    
    cd ~/Termony
    
    ./build-linux.sh -b
    

    如果遇到这个报错:Build hnp on arm64 debian 12: glib/gnulib/meson.build:316:2: ERROR: Problem encountered: frexpl() is missing or broken beyond repair #45
    就打开 build-hnp/Makefile 文件,把 PKGS= 最后的 libglib \qemu两行删掉再试。

    如果部分源码下载不下来,可以参考本文最后一节设置代理。

  8. 用 Windows 版 DevEco Studio 获取签名证书,复制到 Linux 的 ~/.ohos 文件夹,具体过程参考:

    https://c1sx6elpftd.feishu.cn/wiki/PdGRwW5vciNhDgkBKd1c2f57nag

    虚拟机重启到Windows,完成以下步骤:

    4、签名
    (1)项目加载及配置
    (2)连接设备
    (3)签名
    
    5、拷贝签名并重新打包
    (1)拷贝签名
    

    如果 DevEco Studio 打不开,参考这个解决方案:https://hu60.cn/q.php/bbs.topic.106821.html#nav

    拷贝签名可以重启回Linux完成,打开Debian的文件管理器,点“其他位置”,再双击挂载Windows的C盘,进入 Users/OseasyVM 文件夹,按 Ctrl+H 显示隐藏文件,然后把 .ohos 文件夹复制到 Linux 主目录。然后再找到 Windows盘里的 build-profile.json5 文件,复制到 Linux 里,再把路径修改为 Linux 路径即可。

  9. 用从 Windows 导入的证书给 hap 签名:

    source ~/pyenv/bin/activate
    export TOOL_HOME=~/command-line-tools
    export PATH=$TOOL_HOME/sdk/default/openharmony/toolchains
    
    cd ~/Termony
    
    ./build-linux.sh -s
    
  10. 安装签名后的 hap:

    export TOOL_HOME=~/command-line-tools
    export PATH=$TOOL_HOME/sdk/default/openharmony/toolchains
    
    # 通过 hdc 命令连接无线调试
    hdc tconn 无线调试IP:无线调试端口
    
    # 推送签名后的 hnp
    cd ~/Termony
    ./push.sh ./entry/build/default/outputs/default/entry-default-signed.hap
    

    至此,Termony已安装到鸿蒙PC上。

    备注:如果hdc命令报错,请安装libusb-1.0-0-dev软件包:sudo apt install libusb-1.0-0-dev


如何设置代理

在鸿蒙里启动ClashBox(可以从外区鸿蒙应用商店下载),确保“允许局域网”已启用,然后在Debian里设置以下环境变量:

export http_proxy="http://172.16.100.1:7890"
export https_proxy="http://172.16.100.1:7890"

设完之后再执行 git clone./build-linux.sh -b 等命令即可。

或者也可以自行安装 ARM Linux 版代理工具。


为什么不使用WSL?

Windows虚拟机里只能使用WSL1,编译太慢了。Debian 12里快很多。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions