制作一个龙芯旧世界的 dotnet sdk docker 镜像

news/2025/1/11 20:41:43/文章来源:https://www.cnblogs.com/lindexi/p/18521578

以下是我的 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 \libicu67RUN wget http://ftp.loongnix.cn/dotnet/8.0.7/8.0.7-1/pkg/dotnet-sdk-8.0.107-linux-loongarch64.tar.xzRUN mkdir dotnet && tar -xvf dotnet-sdk-8.0.107-linux-loongarch64.tar.xz -C dotnetRUN 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.107Commit:            1bdaef7265Workload version:  8.0.100-manifests.43c23f91Runtime Environment:OS Name:     LoongnixOS Version:  20OS Platform: LinuxRID:         linux-loongarch64Base 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.7Architecture: loongarch64Commit:       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:NoneEnvironment variables:Not setglobal.json file:Not foundLearn more:https://aka.ms/dotnet/infoDownload .NET:http://www.loongnix.cn/zh/api/dotnetLoongson'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 loongarch64International Components for Unicodelibicu67/Debian 67.1-7.lnd.1 loongarch64International 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.107Commit:            1bdaef7265Workload version:  8.0.100-manifests.43c23f91Runtime Environment:OS Name:     LoongnixOS Version:  20OS Platform: LinuxRID:         linux-loongarch64Base 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.7Architecture: loongarch64Commit:       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:NoneEnvironment variables:Not setglobal.json file:Not foundLearn more:https://aka.ms/dotnet/infoDownload .NET:http://www.loongnix.cn/zh/api/dotnetLoongson'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 教程 - 烧饼博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/825602.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

18-网络安全测评技术与标准

18.1 概况 1)概念 :指参照一定的标准规范要求,通过一系列的技术和管理方法,获取评估对象的网络安全状况信息,对其给出相应的网络安全情况综合判定。 网络安全测评对象通常包括信息系统的组成要素或信息系统自身。2)发展1983年,美国国防部颁布《可信计算机系统评估准则 T…

修改PE导入表注入DLL——实例图文教程——让你看的明明白白

其实通过修改PE导入表注入DLL的教程很多,本文也只是其中的沧海一粟而已,但既然写出来,自我感觉应该还是有一点自我的东西的,至少自认为做到了思路清晰,每步都有据可依,让看客应该能做到“看的明明白白”!本贴以《英雄无敌》1游戏程序为例子,向其添加一个DLL,调用其中的…

《机器人SLAM导航核心技术与实战》第1季:第10章_其他SLAM系统

《机器人SLAM导航核心技术与实战》第1季:第10章_其他SLAM系统 视频讲解【第1季】10.第10章_其他SLAM系统-视频讲解【第1季】10.1.第10章_其他SLAM系统_RTABMAP算法【第1季】10.2.第10章_其他SLAM系统_VINS算法【第1季】10.3.第10章_其他SLAM系统_机器学习与SL第1季:第10章_其…

web安全作业(SQL注入1)

web安全作业(SQL注入) 理论作业 1.什么是盲注?盲注的类型? 2.报错注入常用的函数有哪些?请分别解释其用法? 3.时间盲注的payload构造方法?用到的函数及其用法? 4.DNS Log注入原理?前提条件及应用场景分别是什么? 1. 开发人员屏蔽了报错信息,导致攻击者无法通过报错信…

RHEL9.4搭建虚拟机实验环境

日期:2024.10.27 目的:搭建Linux虚拟机环境供学习测试,无图形界面。同等硬件配置下性能上要优于Windows上运行的虚拟化解决方案。 参照:鸟哥Linux私房菜服务器篇 RockyLinux 9版 https://linux.vbird.org/linux_server/rocky9/ Linux中国 如何在 Rocky Linux 9 / AlmaLinux…

o1-mini首战Codeforces

chatgpt-o1-mini挑战codeforces它来了,找了最近的一场比赛,准备来试试效果如何,比赛链接https://codeforces.com/contest/2032 首先上场的是第一题 A - Circuit 我直接开问通过上述方法和代码,可以快速准确地解决问题,并满足题目中的时间和空间限制。 然后提交,果然没问题…

python bytecode解析

python bytecode解析 前言 我们的电脑是怎么运行的呢?计算机内部的 CPU 处理器是个硅片,上面雕刻着精心布置的电路,输入特定的电流,就能得到另一种模式的电流,而且模式可以预测,给这些模式起上名字并赋予含义,我们就可以说这种电流模式代表加法,电脑的工作原理就是如此…

09-XSS键盘监听、cookie窃取文件上传绕过

1、XSS (1)使用pikachu平台练习XSS键盘记录、前台XSS盲打攻击获取cookie,利用cookie实现登录XSS键盘记录docker打开pikachu靶场,进入pikachu后端修改/var/www/html/pkxss/rkeypress/rk.js文件在存储型XSS模块输入payload(以dvwa靶场测试)监听记录成功获取cookie信息实现登…

2.TiUP 部署 DM 集群

TiUP 是 TiDB 4.0 版本引入的集群运维工具,TiUP DM 是 TiUP 提供的使用 Golang 编写的集群管理组件,通过 TiUP DM 组件就可以进行日常的运维工作,包括部署、启动、关闭、销毁、扩缩容、升级 DM 集群以及管理 DM 集群参数。 安装 TiUP DM 组件: tiup install dm dmctl 生成模…

PNGify:将文本和文件编码为 PNG 图像的命令行工具

原创 Ots安全PNGify 是一款用 Go 编写的命令行工具,可让您将文本和文件编码为 PNG 图像,然后将其解码回原始格式。这种方法融合了文本和图像处理,提供了一种有趣的数据存储和检索方式。这个实验项目的目标是探索创造性的可能性。 安装 确保您的计算机上安装了 Go 编译器,然…

即将到来!

已经到一百三十节课了,努力这周就搞完!