製作一個龍芯舊世界的 dotnet sdk docker 映象

lindexi發表於2024-11-02

以下是我的 dockerfile 檔案,內容特別簡單

FROM cr.loongnix.cn/library/debian:buster
WORKDIR /root
RUN apt-get update -y && \
    apt-get install -y --no-install-recommends \
        apt-transport-https \
        ca-certificates \
        curl \
        git \
        wget \
        tzdata \
        openssh-client \
        xz-utils \
        libicu67

RUN wget http://ftp.loongnix.cn/dotnet/8.0.7/8.0.7-1/pkg/dotnet-sdk-8.0.107-linux-loongarch64.tar.xz

RUN mkdir dotnet && tar -xvf dotnet-sdk-8.0.107-linux-loongarch64.tar.xz -C dotnet

RUN ln -s /root/dotnet/dotnet /usr/bin/dotnet

我這裡的 cr.loongnix.cn/library/debian:buster 的 docker image Id 是 70fcf9ce129a,屬於龍芯舊世界版本

以上 dockerfile 在 2024.11.01 時能正常構建且構建出來的 docker image 可以在龍芯舊世界裡使用。以上的 dockerfile 的使用方法是在龍芯舊世界裝置上,用 docker build 一下即可。特別說明,要在龍芯舊世界裝置上,用 docker build 一下,因為 cr.loongnix.cn/library/debian:buster 裡面使用的就已經是龍架構的舊世界的系統了,在其他 CPU 架構上的裝置是無法直接跑起來的

如果大家不想自己構建,可以發郵件向我要 dockerimage-loongarch64-abi1.0-dotnet-sdk-8.0.107-debian-buster.8346c670d9f6.tar 檔案,這個檔案就是我用以上 dockerfile 構建出來的

以下是我的踩坑記錄:

一些概念

  • 龍芯新舊世界: 舊世界與新世界 - 咱龍了嗎?

業界共識是遲早龍芯都會進入新世界,即可能後續的 cr.loongnix.cn/library/debian:buster 會是屬於新世界的。儘管現在似乎龍芯準備將 cr.loongnix.cn 當成舊世界倉庫,將 lcr.loongnix.cnhttps://hub.docker.com/u/loongarch64 當成新世界倉庫

但必須說明的是,我沒有從龍芯任何文件找到說一定會將 cr.loongnix.cn 當成舊世界倉庫的說法,只是從 龍芯雲 https://loongson-cloud-community.github.io/Loongson-Cloud-Community/ 文件找到以下描述,從而進行推測而已:

cr.loongnix.cn 容器映象倉庫, 適用於核心版本 < 5.10的作業系統,如龍蜥8.8、龍芯debian10等。容器映象原始碼倉庫:https://github.com/Loongson-Cloud-Community/dockerfiles

lcr.loongnix.cn 容器映象倉庫,適用於核心版本>=5.10的作業系統,如尤拉22.03、尤拉24.03、龍蜥23版本等。容器映象原始碼倉庫:https://github.com/Loongson-Cloud-Community/docker-library

再根據 https://github.com/Loongson-Cloud-Community/docker-library/blob/b14dda076c0deadebe0a949a8603f07c8cc922cb/README.md 文件的以下內容證明至少 lcr.loongnix.cn 是新世界倉庫

適用於上游(abi2.0)作業系統的映象原始碼倉庫,對應的映象倉庫是lcr.loongnix.cn

舊世界與新世界 - 咱龍了嗎? 文件說明,上游(abi2.0)作業系統屬於新世界,而 abi1.0 屬於舊世界

想要在舊世界執行,就需要找到正確的舊世界倉庫。根據上文描述,在 docker hub 上找到的,預計都屬於新世界,而不是舊世界

在龍芯舊世界 kylin-2403 sp1 安裝 docker

我只借到一臺寶貴的龍芯裝置,這臺是 3A6000 的裝置,搭載了 kylin-2403 sp1 麒麟系統。系統版本資訊內容如下

$ uname -a
Linux lindexi-pc 5.4.18-116-generic #105-KYLINOS SMP Fri Jun 21 14:09:22 UTC 2024 loongarch64 loongarch64 loongarch64 GNU/Linux
$ uname -r
5.4.18-116-generic
$ cat /etc/kylin-version/kylin-system-version.conf
[SYSTEM]
os_version = 2403
update_version = 2403
quality_version =
$ cat /etc/.kyinfo
[dist]
name=Kylin-Desktop-EDU
milestone=V10
arch=loongarch64
beta=False
time=2024-09-14 12:27:59
dist_id=Kylin-Desktop-V10-SP1-2403-update1-EDU-Release-20240914-LoongArch64-2024-09-14 12:27:59

[servicekey]
key=0389218

[os]
to=
term=2025-12-18
$ cat /etc/debian_version
bullseye/sid

CPU 資訊如下

$ cat /proc/cpuinfo | grep name
model name              : Loongson-3A6000

我的 docker 安裝方法:

先下載安裝 docker-ce-cli:https://pkg.loongnix.cn/loongnix/pool/main/d/docker-ce/docker-ce-cli_20.10.3-7.1_loongarch64.deb

$ wget https://pkg.loongnix.cn/loongnix/pool/main/d/docker-ce/docker-ce-cli_20.10.3-7.1_loongarch64.deb
$ sudo dpkg -i docker-ce-cli_20.10.3-7.1_loongarch64.deb

此時 docker 尚未啟動,執行將會提示 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 錯誤,需要再按照 https://bbs.loongarch.org/d/80-docker-buildx-compose 提供的方法進行安裝 docker ce 版本

# docker binaries
$ wget https://github.com/wojiushixiaobai/docker-ce-binaries-loongarch64/releases/download/v24.0.2/docker-24.0.2.tgz
$ tar -xf docker-24.0.2.tgz
$ cp docker/* /usr/local/bin/

# systemd
$ wget https://raw.githubusercontent.com/jumpserver/installer/9dfdfad3d71759483f12a90d62c609ba6f64bc46/scripts/docker/docker.service -O /etc/systemd/system/docker.service

啟動 docker:

$ systemctl start docker

此時執行 sudo docker ps 如能看到以下輸出內容,則證明安裝成功

$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

接下來嘗試構建上文提供的 dockerfile 檔案

# 先使用 cd 進入到 dockerfile 檔案所在目錄
$ sudo docker build -t t1 .

構建完成之後,試試進入 docker image 裡面。以上命令列將構建出 t1:latest 的 docker image

$ sudo docker run -it t1

進入 docker 容器之後,試試輸入 dotnet --infodotnet nuget --version 測試 dotnet 是否部署成功

root@0957d906898b:~# dotnet --info
.NET SDK:
 Version:           8.0.107
 Commit:            1bdaef7265
 Workload version:  8.0.100-manifests.43c23f91

Runtime Environment:
 OS Name:     Loongnix
 OS Version:  20
 OS Platform: Linux
 RID:         linux-loongarch64
 Base Path:   /root/dotnet/sdk/8.0.107/

.NET workloads installed:
 Workload version: 8.0.100-manifests.43c23f91
There are no installed workloads to display.

Host:
  Version:      8.0.7
  Architecture: loongarch64
  Commit:       dbda949b78

.NET SDKs installed:
  8.0.107 [/root/dotnet/sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 8.0.7 [/root/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 8.0.7 [/root/dotnet/shared/Microsoft.NETCore.App]

Other architectures found:
  None

Environment variables:
  Not set

global.json file:
  Not found

Learn more:
  https://aka.ms/dotnet/info

Download .NET:
  http://www.loongnix.cn/zh/api/dotnet

Loongson's .NET version:
  8.0.107-1
root@0957d906898b:~# dotnet nuget --version
NuGet Command Line
6.8.1.32767

如能夠完成上述步驟,則證明已經成功完成

以下是記錄我過程中的一些踩坑點:

其實核心踩坑點是由於龍芯新舊世界的存在,讓我不能確定在網上找到的文章屬於新世界還是舊世界,再加上我開始對龍芯新舊世界沒有概念或概念混亂,導致我踩坑比較多

docker 源

針對舊世界,不能使用 lcr.loongnix.cn 和 docker hub 源,這兩個源都不符合舊世界的預期

也即如 loongsongd/debian10_loongarch64_x64:mini 等 docker image 都是不符合預期的。其中 loongsongd/debian10_loongarch64_x64:mini 存在比較大的問題是似乎容器裡面已經開了 qemu 模擬了,但各個程序,如 bash 等都是非龍架構的,導致執行必定失敗

docker ce 的安裝

不能使用通用的 docker ce 版本,本身龍芯使用的是 龍架構。敲黑板,龍架構的地位和 x86、x86_64 是等同的,即大家可以說,世界上的 CPU 架構有: x86、x64、arm、arm64、龍架構、MIPS

請必須明確的是龍架構是一個獨立的架構,不是 MIPS 架構,細節請參閱: 龍芯自主指令集LoongArch為什麼是全新指令集,和MIPS不同在哪兒?- 闢謠 - 嗶哩嗶哩

更多請參考: 如何稱呼龍架構? - 咱龍了嗎?

這就是為什麼需要使用龍架構版的 docker ce 的原因了。再疊加新舊世界的影響,就需要使用龍架構的舊世界的 docker ce 包

官方提供的 https://pkg.loongnix.cn/loongnix/pool/main/d/docker-ce/docker-ce_20.10.3-7.1_loongarch64.deb 需要有 containerd.io 依賴,不太好裝。這就是為什麼我去使用論壇提供的安裝方法的原因

但是由於 https://bbs.loongarch.org/d/80-docker-buildx-compose 論壇上提供的內容比較舊了,一些連結,如 https://raw.githubusercontent.com/jumpserver/installer/master/scripts/docker.service 已經 404 了,需要更新

更新之後的命令如下,和上文給出的相同

# docker binaries
$ wget https://github.com/wojiushixiaobai/docker-ce-binaries-loongarch64/releases/download/v24.0.2/docker-24.0.2.tgz
$ tar -xf docker-24.0.2.tgz
$ cp docker/* /usr/local/bin/

# systemd
$ wget https://raw.githubusercontent.com/jumpserver/installer/9dfdfad3d71759483f12a90d62c609ba6f64bc46/scripts/docker/docker.service -O /etc/systemd/system/docker.service

哪個才是龍芯官方 GitHub 組織

  • https://github.com/Loongson-Cloud-Community :官方組織
  • https://github.com/Loongson-Community : 非官方的社群組織
  • https://github.com/loongson :非官方的社群組織

根據 容器映象倉庫 - 龍芯開源社群 提及的原始碼倉庫為 : https://github.com/Loongson-Cloud-Community ,可認為 Loongson-Cloud-Community 為官方組織

基本上只有官方組織在維護 abi1.0 舊世界,其他組織都是在做新世界。新世界的 dotnet 是在龍芯社群組織裡面的,詳細請看 https://github.com/loongson-community/dotnet-unofficial-build

dotnet 找不到 icu 不支援多語言

執行 dotnet --info 的報錯如下

root@55154e73f795:~# dotnet --info
Process terminated. Couldn't find a valid ICU package installed on the system. Please install libicu (or icu-libs) using your package manager and try again. Alternatively you can set the configuration flag System.Globalization.Invariant to true if you want to run with no globalization support. Please see https://aka.ms/dotnet-missing-libicu for more information.
   at System.Environment.FailFast(System.String)
   at System.Globalization.GlobalizationMode+Settings..cctor()
   at System.Globalization.CultureData.CreateCultureWithInvariantData()
   at System.Globalization.CultureData.get_Invariant()
   at System.Globalization.CultureInfo..cctor()
   at System.Globalization.CultureInfo.get_CurrentUICulture()
   at System.TimeZoneInfo.GetUtcStandardDisplayName()
   at System.TimeZoneInfo.CreateUtcTimeZone()
   at System.TimeZoneInfo..cctor()
   at System.DateTime.get_Now()
   at Microsoft.DotNet.Cli.Program.Main(System.String[])
Aborted (core dumped)

透過 apt search libicu 可知道在龍芯源上帶了 libicu67 和 libicu63 版本

root@55154e73f795:~# apt search libicu
...
libicu63/Debian 63.1-6+deb10u1.lnd.1 loongarch64
  International Components for Unicode

libicu67/Debian 67.1-7.lnd.1 loongarch64
  International Components for Unicode
...

只需在 dockerfile 帶上 libicu67 的安裝即可解決在龍芯裝置上 dotnet 找不到多語言丟擲異常的問題,帶上之後的 dockerfile 安裝內容如下,以下程式碼和本文一開始給出的 dockerfile 內容相同

RUN apt-get update -y && \
    apt-get install -y --no-install-recommends \
        apt-transport-https \
        ca-certificates \
        curl \
        git \
        wget \
        tzdata \
        openssh-client \
        xz-utils \
        libicu67

以上的 ca-certificates 也是必要項,詳細請參閱 修復 Debian 安裝 dotnet 失敗 depends on ca-certificates

更多多語言相關,請參閱: Globalization config settings - .NET - Microsoft Learn

dotnet 軟連結

  1. 應該使用 ln -s 軟連結的方式,否則將會遇到 Error: [/usr/bin/host/fxr] does not exist 錯誤。詳細請看 徹底明白Linux硬連結和軟連結-linux硬連結和軟連結區別
  2. 軟連結過程中,不應該使用相對路徑,即 ln -s ./dotnet/dotnet /usr/bin/dotnet 也是錯誤的,將會提示 bash: /usr/bin/dotnet: Too many levels of symbolic links 錯誤

詳細請看 製作一個能構建 dotnet AOT 的 gitlab ruuner 的 Debian docker 映象

為何不使用 dotnet deb 包

http://ftp.loongnix.cn/dotnet/8.0.7/8.0.7-1/deb/dotnet-sdk-8.0_8.0.107-1_loongarch64.deb 下載的包是需要帶依賴的,透過 dpkg -e 獲取 control 檔案,可見如下內容

Depends: dotnet-runtime-8.0 (>= 8.0.7), dotnet-targeting-pack-8.0 (>= 8.0.7), dotnet-apphost-pack-8.0 (>= 8.0.7), netstandard-targeting-pack-2.1 (>= 2.1.0), aspnetcore-runtime-8.0 (>= 8.0.7), aspnetcore-targeting-pack-8.0 (>= 8.0.7)

這裡有比較多依賴包,不如直接使用 tar.xz 包

x86_64 配合 qemu 模擬執行龍架構 docker

結論: 不可行

能夠跑起來龍架構舊世界的 docker 容器,但是 QEMU 模擬有些坑,導致 dotnet 有些功能不能符合預期工作。且執行效能很低

現在我的需求是不能按照 X86模擬龍芯與編譯 .NET CoreCLR - 痴者工良 - 部落格園 部落格提供的方法進行,此部落格裡面使用的是 MIPS 的,非龍架構的,不符合本文的需求。但依然感謝大佬幫忙踩坑

先準備好一臺 x86_64 的 debian 12 的裝置,接著按照通用的方法安裝上 docker 和相關工具,推薦一切按照預設的來。我這裡就因為擔心磁碟空間問題,踩了一個坑,詳細請看 docker中無法使用sudo命令,提示沒有root許可權或者檔案系統掛載沒有nosuid選項_an nfs file system without root privileges?-CSDN部落格

官方 docker 安裝方法: https://docs.docker.com/engine/install/debian/

為了能夠使用上龍芯舊世界的 QEMU 需要使用特別的版本,我的夥伴 lsj 告訴我說 QEMU 有核心和使用者態的部分,不僅僅只是靠底層模擬龍架構指令,還需要一些使用者態的支援,使用者態部分的支援就和新舊世界 ABI1.0 和 ABI2.0 有關係

特別感謝 lsj 教會了我這個方法

GitHub 上找到了 zhangguanzhang 大佬貼出來的龍芯官方的qemu提交人給的版本,以及 msojocs 大佬的測試結果,即可知道,可以使用如下命令進行部署

$ sudo docker run --rm --privileged zhangguanzhang/qemu-user-static --reset -p yes

拉取 zhangguanzhang/qemu-user-static 需要到 docker io 拉取,如果大家拉不下來,可以發郵件向我要 zhangguanzhang_qemu-user-static.335cfbcdcc6d.tar 檔案,我透過網盤給你

完成上述步驟之後,即可拉取舊世界的包,如以下命令

docker pull cr.loongnix.cn/library/debian:buster-slim

預期會提示以下警告

WARNING: The requested image's platform (linux/loong64) does not match the detected host platform (linux/amd64/v3) and no specific platform was requested

有以上警告是非常正確的事情,因為就是要拉取龍架構的,不匹配當前的 amd64 架構的

試試此時繼續使用以下命令看能否進入到容器裡

docker run -it cr.loongnix.cn/library/debian:buster-slim 

如能夠進入到容器,再使用 ls /lib64 命令,如輸出的是 ld.so.1 則證明確實是舊世界

root@ff641f574628:~# ls /lib64
ld.so.1

以上就是在 amd64 裝置上,使用 QEMU 執行龍芯舊世界的 docker 的方法

我開始使用 https://gitee.com/michael0066/qemu-loongarch64-static.git 的方式做,但似乎這樣做出來的是新世界的。在這裡踩坑,感謝 lsj 的幫助,才讓我找到正確的方法

嘗試繼續在裡面打上 dotnet 的支援,如以下命令

root@ff641f574628:~# wget http://ftp.loongnix.cn/dotnet/8.0.7/8.0.7-1/pkg/dotnet-sdk-8.0.107-linux-loongarch64.tar.xz
root@ff641f574628:~# mkdir dotnet && tar -xvf dotnet-sdk-8.0.107-linux-loongarch64.tar.xz -C dotnet
root@ff641f574628:~# ln -s /root/dotnet/dotnet /usr/bin/dotnet

此時使用 dotnet --info 都是能正常輸出的,證明 dotnet 能夠最基礎在此容器裡執行

root@ff641f574628:~# dotnet --info
.NET SDK:
 Version:           8.0.107
 Commit:            1bdaef7265
 Workload version:  8.0.100-manifests.43c23f91

Runtime Environment:
 OS Name:     Loongnix
 OS Version:  20
 OS Platform: Linux
 RID:         linux-loongarch64
 Base Path:   /root/dotnet/sdk/8.0.107/

.NET workloads installed:
 Workload version: 8.0.100-manifests.43c23f91
There are no installed workloads to display.

Host:
  Version:      8.0.7
  Architecture: loongarch64
  Commit:       dbda949b78

.NET SDKs installed:
  8.0.107 [/root/dotnet/sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 8.0.7 [/root/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 8.0.7 [/root/dotnet/shared/Microsoft.NETCore.App]

Other architectures found:
  None

Environment variables:
  Not set

global.json file:
  Not found

Learn more:
  https://aka.ms/dotnet/info

Download .NET:
  http://www.loongnix.cn/zh/api/dotnet

Loongson's .NET version:
  8.0.107-1

然而當輸入 dotnet --helpdotnet nuget --version 時,卻有異常提示

root@ff641f574628:~# dotnet --help
System.IO.IOException: Not enough storage is available to process this command. : 'NuGet-Migrations'
   at System.Threading.Mutex.CreateMutexCore(Boolean initiallyOwned, String name, Boolean& createdNew)
   at System.Threading.Mutex..ctor(Boolean initiallyOwned, String name)
   at NuGet.Common.Migrations.MigrationRunner.Run(String migrationsDirectory)
   at NuGet.Common.Migrations.MigrationRunner.Run()
   at Microsoft.DotNet.Configurer.DotnetFirstTimeUseConfigurer.Configure()
   at Microsoft.DotNet.Cli.Program.ConfigureDotNetForFirstTimeUse(IFirstTimeUseNoticeSentinel firstTimeUseNoticeSentinel, IAspNetCertificateSentinel aspNetCertificateSentinel, IFileSentinel toolPathSentinel, Boolean isDotnetBeingInvokedFromNativeInstaller, DotnetFirstRunConfiguration dotnetFirstRunConfiguration, IEnvironmentProvider environmentProvider, Dictionary`2 performanceMeasurements)
   at Microsoft.DotNet.Cli.Program.ProcessArgs(String[] args, TimeSpan startupTime, ITelemetry telemetryClient)
   at Microsoft.DotNet.Cli.Program.Main(String[] args)

錯誤資訊如下

System.IO.IOException: Not enough storage is available to process this command. : 'NuGet-Migrations'
   at System.Threading.Mutex.CreateMutexCore(Boolean initiallyOwned, String name, Boolean& createdNew)
   at System.Threading.Mutex..ctor(Boolean initiallyOwned, String name)
   at NuGet.Common.Migrations.MigrationRunner.Run(String migrationsDirectory)
   at NuGet.Common.Migrations.MigrationRunner.Run()
   at Microsoft.DotNet.Configurer.DotnetFirstTimeUseConfigurer.Configure()
   at Microsoft.DotNet.Cli.Program.ConfigureDotNetForFirstTimeUse(IFirstTimeUseNoticeSentinel firstTimeUseNoticeSentinel, IAspNetCertificateSentinel aspNetCertificateSentinel, IFileSentinel toolPathSentinel, Boolean isDotnetBeingInvokedFromNativeInstaller, DotnetFirstRunConfiguration dotnetFirstRunConfiguration, IEnvironmentProvider environmentProvider, Dictionary`2 performanceMeasurements)
   at Microsoft.DotNet.Cli.Program.ProcessArgs(String[] args, TimeSpan startupTime, ITelemetry telemetryClient)
   at Microsoft.DotNet.Cli.Program.Main(String[] args)

透過 GitHub 大佬的分析,可以定位到是 https://github.com/NuGet/NuGet.Client/blob/3ab7d1462029e0b211a88040c952c9b8a679708d/src/NuGet.Core/NuGet.Common/Migrations/MigrationRunner.cs#LL23C17-L23C73 這句程式碼丟擲的。也看到 Stephen Toub 大佬在 GitHub 的如下內容分析

Mutex on Linux needs to perform a variety of I/O operations, including creating a file on disk and creating a pthreads mutex; it's possible one of those is failing for some reason.

That error string looks like https://github.com/dotnet/runtime/blob/622277e02da5517aaeaa322be27079822b4d33e2/src/coreclr/pal/src/misc/errorstrings.cpp#L71, which is used in a variety of places. For example, it'll be used in https://github.com/dotnet/runtime/blob/622277e02da5517aaeaa322be27079822b4d33e2/src/coreclr/pal/src/synchobj/mutex.cpp#L791 if the operation encounters an EPERM errno from pthread_mutex_init.

但是無論是以下哪個帖子的內容,都幫不到忙

  • https://github.com/dotnet/runtime/issues/80619
  • https://github.com/termux/termux-packages/issues/516#issuecomment-2109348032
  • https://github.com/NuGet/Home/issues/12365#issuecomment-1463016158
  • https://github.com/dotnet/runtime/issues/91987#issuecomment-2236418465
  • https://gist.github.com/pchalamet/7c17be4cb4e74c7cacf36f94bf62b4ea

其中有人說可能是 root 許可權的問題,於是我就在不斷倒騰各種許可權,但依然失敗。第二天 lsj 告訴我說可能是 QEMU 哪些模擬不正確,讓我試試在龍芯物理裝置上跑跑看

於是我就在 debian 裡面,使用 docker image save 儲存到本地,然後傳到龍芯物理裝置上,使用 docker image load 命令載入起來

接著再在龍芯物理裝置上使用 docker run -it 方式進入容器,嘗試各種 dotnet 命令都沒有問題。由於使用的是相同的 docker image 因此可以證明是在 debian 12 上使用 QEMU 模擬不正確導致的問題,而不是製作出來的 docker image 有問題或 dotnet 有問題

透過在龍芯物理裝置上的對比,就可以瞭解到在 debian 12 上使用 QEMU 模擬不正確,導致了 dotnet 許多基礎命令不可用

由於我使用的是 GitHub 上 zhangguanzhang 大佬貼出來的龍芯官方的qemu提交人給的版本,既沒有程式碼且我也不懂。於是我就放棄了走模擬這條路

參考文件

  • 如何稱呼龍架構? - 咱龍了嗎?
  • 舊世界與新世界 - 咱龍了嗎?
  • 龍芯自主指令集LoongArch為什麼是全新指令集,和MIPS不同在哪兒?- 闢謠 - 嗶哩嗶哩
  • 龍芯雲 https://loongson-cloud-community.github.io/Loongson-Cloud-Community/
  • 容器映象倉庫 - 龍芯開源社群
  • Loongnix作業系統源
  • https://hub.docker.com/u/loongarch64
  • bash: xz: command not found - CSDN文庫
  • Linux tar 命令解壓tar.xz檔案 - myfreax
  • apt 與 apt-get — Linux 中軟體包管理工具的區別 — AWS
  • dotnet 基於 debian 建立一個 docker 的 sdk 映象
  • 修復 Debian 安裝 dotnet 失敗 depends on ca-certificates
  • 製作一個能構建 dotnet AOT 的 gitlab ruuner 的 Debian docker 映象
  • .net - A fatal error occurred. The folder [/usr/share/dotnet/host/fxr] does not exist - Stack Overflow
  • Troubleshoot .NET package mix ups on Linux - .NET - Microsoft Learn
  • Globalization config settings - .NET - Microsoft Learn
  • X86模擬龍芯與編譯 .NET CoreCLR - 痴者工良 - 部落格園
  • X86模擬龍芯與編譯 .NET CoreCLR - 痴者工良 - 部落格園
  • dockerfile-新增使用者並賦予sudo許可權以及指定密碼_dockerfile sudo-CSDN部落格
  • 【零基礎入門Docker】Dockerfile中的USER指令以及dockerfile命令詳解_docker_arthas777-雲原生
  • Linux下建立普通使用者遇到的問題及解決辦法_安裝linux忘記建立普通使用者-CSDN部落格
  • linux給普通使用者分配root許可權_linux給多使用者root許可權-CSDN部落格
  • linux給使用者新增root許可權方法總結-騰訊雲開發者社群-騰訊雲
  • docker容器以ROOT賬號登入(獲取ROOT許可權/ROOT密碼) - cn2024 - 部落格園
  • docker中無法使用sudo命令,提示沒有root許可權或者檔案系統掛載沒有nosuid選項_an nfs file system without root privileges?-CSDN部落格
  • sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges? · Issue #1100 · docker/for-linux
  • sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges? - CSDN文庫
  • [daily][centos][sudo] sudo 報錯 - toong - 部落格園
  • https://docs.docker.com/engine/install/debian/
  • https://gitee.com/michael0066/qemu-loongarch64-static.git
  • x86 架構執行 其他架構映象-騰訊雲開發者社群-騰訊雲
  • Debian 12 / Ubuntu 24.04 安裝 Docker 以及 Docker Compose 教程 - 燒餅部落格

相關文章