#dayu200体验官#openharmony标准系统运行docker软件

慢工出细活 慢工出细活     2022-12-03     782

关键词:

Rk3568 openharmony运行docker

以润和DAYU200为例,展示openharmony设备上运行docker的具体过程。这里,所用的容器运行时为docker,使用containerd运行时是类似的步骤。

  • 检测openharmony对docker容器的支持
  • 修改源码内核配置
  • 编译并在设备运行openharmony系统
  • 格式化sd卡为f2fs文件系统
  • 安装ip、iptables和awk必备组件
  • 安装docker容器引擎组件
  • docker环境准备
  • 运行docker
  • 验证docker工作状态


检测openhramony对Docker容器的支持

目的:检测openharmony标准系统是否具备安装docker的配置要求

原配置导出(仍以3.1 release为例)
  • 源码编译后会产生内核Img,具体位置在/out/kernel/src_tmp/linux-5.10/arch/boot/
  • 进入源码树下/out/kernel/src_tmp/linux-5.10/
  • 输入命令:scripts/extract-ikconfig arch/arm/boot/*Image > .config
  • 当然输出的.config可以到具体的路径下
  • ps:也可以在os运行时cat /proc/config.gz | gzip -d > /sdcard/config命令在/home下生成的config就是内核的配置文件类似于下面:
# 配置文件的部分:
# Automatically generated file; DO NOT EDIT.
# Linux/arm64 5.10.79 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="aarch64-linux-gnu-gcc (Linaro GCC 7.5-2019.12) 7.5.0"
CONFIG_CC_IS_GCC=y
CONFIG_GCC_VERSION=70500
CONFIG_LD_VERSION=228020000
CONFIG_CLANG_VERSION=0
CONFIG_LLD_VERSION=0
CONFIG_CC_CAN_LINK=y
CONFIG_CC_CAN_LINK_STATIC=y
CONFIG_CC_HAS_ASM_GOTO=y
CONFIG_CC_HAS_ASM_INLINE=y
CONFIG_IRQ_WORK=y
CONFIG_BUILDTIME_TABLE_SORT=y
CONFIG_THREAD_INFO_IN_TASK=y

#
# General setup
#
CONFIG_INIT_ENV_ARG_LIMIT=32
# CONFIG_COMPILE_TEST is not set
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_BUILD_SALT=""
CONFIG_DEFAULT_INIT=""
CONFIG_DEFAULT_HOSTNAME="localhost"
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_WATCH_QUEUE is not set
CONFIG_CROSS_MEMORY_ATTACH=y
# CONFIG_USELIB is not set
CONFIG_AUDIT=y
CONFIG_HAVE_ARCH_AUDITSYSCALL=y
CONFIG_AUDITSYSCALL=y

#
# IRQ subsystem
#
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
CONFIG_GENERIC_IRQ_MIGRATION=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_CHIP=y
CONFIG_IRQ_DOMAIN=y
CONFIG_IRQ_DOMAIN_HIERARCHY=y
CONFIG_GENERIC_IRQ_IPI=y
CONFIG_GENERIC_MSI_IRQ=y
CONFIG_GENERIC_MSI_IRQ_DOMAIN=y
CONFIG_IRQ_MSI_IOMMU=y
CONFIG_HANDLE_DOMAIN_IRQ=y
CONFIG_IRQ_FORCED_THREADING=y
CONFIG_SPARSE_IRQ=y
# CONFIG_GENERIC_IRQ_DEBUGFS is not set
# end of IRQ subsystem

CONFIG_GENERIC_IRQ_MULTI_HANDLER=y
CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_ARCH_HAS_TICK_BROADCAST=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y

#
# Timers subsystem
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ_COMMON=y
# CONFIG_HZ_PERIODIC is not set
CONFIG_NO_HZ_IDLE=y
# CONFIG_NO_HZ_FULL is not set
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
# end of Timers subsystem

# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not set

#
# CPU/Task time and stats accounting
#
CONFIG_TICK_CPU_ACCOUNTING=y
# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set
# CONFIG_IRQ_TIME_ACCOUNTING is not set
CONFIG_SCHED_THERMAL_PRESSURE=y
CONFIG_SCHED_WALT=y
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
CONFIG_PSI=y
# CONFIG_PSI_DEFAULT_DISABLED is not set
# end of CPU/Task time and stats accounting

CONFIG_CPU_ISOLATION=y
CONFIG_SCHED_RUNNING_AVG=y
CONFIG_CPU_ISOLATION_OPT=y
CONFIG_SCHED_CORE_CTRL=y

#
# RCU Subsystem
#
CONFIG_TREE_RCU=y
# CONFIG_RCU_EXPERT is not set
CONFIG_SRCU=y
CONFIG_TREE_SRCU=y
CONFIG_TASKS_RCU_GENERIC=y
CONFIG_TASKS_RUDE_RCU=y
CONFIG_RCU_STALL_COMMON=y
CONFIG_RCU_NEED_SEGCBLIST=y
# end of RCU Subsystem

CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
# CONFIG_IKHEADERS is not set
CONFIG_LOG_BUF_SHIFT=18
CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
CONFIG_GENERIC_SCHED_CLOCK=y
下载检测脚本
执行脚本

用check-config.sh去检测我们上面导出的内核配置 ./check-config.sh /home/.config

检查结果

#DAYU200体验官#

#DAYU200体验官#

#DAYU200体验官#

接下来的任务

依据上述check的结果

  • 需要将必选/可选的都打开
  • Network Drivers部分:我们一般用bridge就可以了,暂不用再开其它了。
  • Storage Drivers部分: 打开overlay部分就可以了。

修改源码的内核配置

  • 修改openharmony3.1/kernel/linux/config/linux-5.10/arch/arm64/configs/rk3568_standard_defconfig (主要集中再namespace, control group, network, overlay filesystem等方面支持的追加)

增加如下配置:

--- configbk  2022-09-19 14:54:36.873667819 +0800
+++ /home/cpss/bj/project/openharmony31/kernel/linux/config/linux-5.10/arch/arm64/configs/rk3568_standard_defconfig 2022-09-03 15:31:29.170980918 +0800
@@ -30,6 +30,7 @@

+CONFIG_POSIX_MQUEUE=y
+CONFIG_SCHED_WALT=y
+CONFIG_PSI=y
+CONFIG_PAGE_COUNTER=y
+CONFIG_CGROUP_BPF=y
+CONFIG_MEMCG_KMEM=y
+CONFIG_MEMCG_SWAP_ENABLED=y
+CONFIG_BLK_CGROUP=y
+CONFIG_BLK_DEV_THROTTLING=y
+CONFIG_RT_GROUP_SCHED=y
+CONFIG_CGROUP_PIDS=y
+CONFIG_CGROUP_HUGETLB=y
+CONFIG_CGROUP_PERF=y
+CONFIG_NET_CLS_CGROUP=y
+CONFIG_BPF_SYSCALL=y

+CONFIG_BINFMT_MISC=y
+CONFIG_TLS=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
+CONFIG_INET_ESP=y
+CONFIG_IPV6_MIP6=y
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_MROUTE=y
+CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
+CONFIG_NF_CONNTRACK=y
+CONFIG_NETFILTER_XT_MARK=y
+CONFIG_NETFILTER_XT_SET=y
+CONFIG_NETFILTER_XT_TARGET_CHECKSUM=y
+CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
+CONFIG_NETFILTER_XT_MATCH_IPVS=y
+CONFIG_NETFILTER_XT_MATCH_CGROUP=y
+CONFIG_IP_SET=y
+CONFIG_IP_SET_HASH_IP=y
+CONFIG_IP_SET_HASH_NET=y
+CONFIG_IP_VS=y
+CONFIG_IP_VS_NFCT=y
+CONFIG_IP_VS_PROTO_TCP=y
+CONFIG_IP_VS_PROTO_UDP=y
+CONFIG_IP_VS_RR=y
+CONFIG_IP_VS_WRR=y
+CONFIG_IP_VS_SH=y

+CONFIG_IP_NF_MATCH_STATE=y
+CONFIG_IP_NF_MATCH_LIMIT=y
+CONFIG_IP_NF_TARGET_LOG=y
+CONFIG_NF_NAT=y
+CONFIG_IP_NF_FTP=y
+CONFIG_IP_NF_TARGET_REDIRECT=y
+CONFIG_IP_NF_CONNTRACK=y
+CONFIG_IP_NF_IRC=y
+CONFIG_IP_NF_NAT=y
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_MASQUERADE=y
+CONFIG_BRIDGE=y
+CONFIG_BRIDGE_NETFILTER=y
+CONFIG_CGROUP_NET_PRIO=y
+CONFIG_STREAM_PARSER=y
+CONFIG_DRIVERS_HDF_LIGHT=y
+CONFIG_HYPERHOLD=y
+CONFIG_HYPERHOLD_DEBUG=y
+CONFIG_HYPERHOLD_ZSWAPD=y
+CONFIG_HYPERHOLD_FILE_LRU=y
+CONFIG_HYPERHOLD_MEMCG=y
+CONFIG_ZRAM_GROUP=y
+CONFIG_ZRAM_GROUP_DEBUG=y
+CONFIG_ZLIST_DEBUG=y
+CONFIG_ZRAM_GROUP_WRITEBACK=y
+CONFIG_REGMAP_SPI=y
+CONFIG_MACVLAN=y
+CONFIG_VXLAN=y
+CONFIG_AUFS_FS=y
+CONFIG_VETH=y
+CONFIG_DRM_DW_HDMI_I2S_AUDIO=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_PCM_ELD=y
+CONFIG_SND_PCM_IEC958=y
+CONFIG_SND_DMAENGINE_PCM=y
+CONFIG_SND_HWDEP=y
+CONFIG_SND_SEQ_DEVICE=y
+CONFIG_SND_RAWMIDI=y
+CONFIG_SND_JACK=y
+CONFIG_SND_JACK_INPUT_DEV=y
+CONFIG_SND_PCM_TIMER=y
+CONFIG_SND_HRTIMER=y
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_MAX_CARDS=32
+CONFIG_SND_PROC_FS=y
+CONFIG_SND_VERBOSE_PROCFS=y
+CONFIG_SND_SEQUENCER=y
+CONFIG_SND_SEQ_DUMMY=y
+CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
+CONFIG_SND_SEQ_MIDI_EVENT=y
+CONFIG_SND_SEQ_MIDI=y
+CONFIG_SND_DRIVERS=y
+CONFIG_SND_HDA_PREALLOC_SIZE=64
+CONFIG_SND_USB=y
+CONFIG_SND_USB_AUDIO=y
+CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y
+CONFIG_SND_SOC=y
+CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
+CONFIG_SND_SOC_ROCKCHIP=y
+CONFIG_SND_SOC_ROCKCHIP_I2S=y
+CONFIG_SND_SOC_ROCKCHIP_I2S_TDM=y
+CONFIG_SND_SOC_ROCKCHIP_PDM=y
+CONFIG_SND_SOC_ROCKCHIP_SPDIF=y
+CONFIG_SND_SOC_ROCKCHIP_SPDIFRX=y
+CONFIG_SND_SOC_ROCKCHIP_MAX98090=y
+CONFIG_SND_SOC_ROCKCHIP_MULTICODECS=y
+CONFIG_SND_SOC_ROCKCHIP_RT5645=y
+CONFIG_SND_SOC_ROCKCHIP_HDMI=y
+CONFIG_SND_SOC_DUMMY_CODEC=y
+CONFIG_SND_SOC_HDMI_CODEC=y
+CONFIG_SND_SOC_ES7202=y
+CONFIG_SND_SOC_ES7243E=y
+CONFIG_SND_SOC_ES8311=y
+CONFIG_SND_SOC_ES8316=y
+CONFIG_SND_SOC_MAX98090=y
+CONFIG_SND_SOC_RK3308=y
+CONFIG_SND_SOC_RK3328=y
+CONFIG_SND_SOC_RK817=y
+CONFIG_SND_SOC_RK_CODEC_DIGITAL=y
+CONFIG_SND_SOC_RL6231=y
+CONFIG_SND_SOC_RT5616=y
+CONFIG_SND_SOC_RT5640=y
+CONFIG_SND_SOC_RT5645=y
+CONFIG_SND_SOC_RT5651=y
+CONFIG_SND_SOC_SPDIF=y
+CONFIG_SND_SOC_TS3A227E=y
+CONFIG_SND_SIMPLE_CARD_UTILS=y
+CONFIG_SND_SIMPLE_CARD=y
+CONFIG_ANDROID_PARANOID_NETWORK=y
+CONFIG_ACCESS_TOKENID=y
+CONFIG_F2FS_GRADING_SSR=y
+CONFIG_OVERLAY_FS=y
+CONFIG_HUGETLBFS=y
+CONFIG_HUGETLB_PAGE=y
+CONFIG_CRYPTO_SEQIV=y

修改后的rk3568_standard_defconfig,如果大家不会修改可以直接参考我的另一篇博文(我成功运行的完整配置):OpenHarmony标准系统支持docker运行时的完整配置


  • 追加docker在openharmony上正常运行所需的一些目录 修改openharmony3.1/build/ohos/images/build_image.py
def _prepare_root(system_path, target_cpu):
root_dir = os.path.join(os.path.dirname(system_path), root)
if os.path.exists(root_dir):
shutil.rmtree(root_dir)
os.makedirs(root_dir, exist_ok=True)

_dir_list = [
config, dev, proc, sys, updater, system, vendor, data,
chipset, storage, mnt, tmp, sys_prod, chip_prod,
run, var, opt, usr
]

for _dir_name in _dir_list:
os.makedirs(os.path.join(root_dir, _dir_name), exist_ok=True)
os.symlink(/system/bin, os.path.join(root_dir, bin))
os.symlink(/system/bin/init, os.path.join(root_dir, init))
os.symlink(/system/etc, os.path.join(root_dir, etc))

if target_cpu == arm64:
os.symlink(/system/lib64, os.path.join(root_dir, lib))
else:
os.symlink(/system/lib, os.path.join(root_dir, lib))

修改openharmony3.1/base/security/selinux/sepolicy/base/system/file_contexts

# 增加for docker
/run u:object_r:rootfs:s0
/var u:object_r:rootfs:s0
/opt u:object_r:rootfs:s0
/usr u:object_r:rootfs:s0
/lib u:object_r:rootfs:s0

编译并在设备运行openharmony系统

具体过程参考我的前两篇文章:

​DAYU200体验 OpenHarmony3.1 Release编译(一)​

​DAYU200体验 OpenHarmony3.1 Release烧录(二)​

并且通过hdc_std标准工具(通过蓝色的debug线也就是烧录线与PC进行通信)进入oh系统

# 查看是否有oh设备
D:>hdc_std.exe list targets

# 进入oh系统
D:>hdc_std.exe shell

# 修改root目录下的权限使其可以进行文件操作
mount -o rw,remount -t auto /

格式化sd卡为f2fs文件系统

  • docker overlay filesystem推荐backing filesystem是未加密的f2fs。而RK3568的data分区是加密的ext4,可以通过micro sd card卡扩展RK3568的存储将sd card格式化为f2fs解决此问题。
  • 准备一个sd卡,插入到DAYU200板子上
# 查看系统文件系统格式
blkid

# 查看系统文件系统和挂载情况
df -h

# 确定sd卡的名称并且格式化sd卡为f2fs
blkid
mkfs.f2fs /dev/sdc1

安装ip、iptables和awk必备组件

  • 通过有线或者无线连接网络
# 查看正在运行的
ifconfig

# 查看所有的网络接口
ifconfig -a

# 开启ip forward
echo "1" > /proc/sys/net/ipv4/ip_forward
  • 由于润和DAYU200是arm64类型的主板,所以需要安装第三方组件的arm64版本并且是静态二进制文件。
  • 有三种方式:在官网直接获得静态二进制文件,在arm主机源码编译获得静态二进制文件以及在x86_64主机交叉编译获得静态二进制组件。
# 交叉编译环境的搭建
# 查看有哪些编译工具的版本可以安装
apt-cache search aarch64

# 选择某个版本的进行安装
apt-get install gcc-10-aarch64-linux-gnu
# 如果出现缺失E: Unmet dependencies 错误,再运行下面一条命令即可
apt --fix-broken install

# 可以查看里边的版本信息,里边有host是什么,target是什么
aarch64-linux-gnu-gcc -v
  • 安装iproute2
# 交叉编译的方式获得静态二进制文件

# 下载:iproute2-4.9.0源码
https://mirrors.edge.kernel.org/pub/linux/utils/net/iproute2/
# 解压并且进入源码文件修改configure文件
CC和ar 修改成aarch64-linux-gnu- 的路径
./configure
# 修改修改Makefile,CC为交叉编译器的路径,修改SUBDIRS=lib ip
# 静态编译,否则,运行时报缺少.so文件
make LDFLAGS=-static
# 过程可参考
https://www.cxybb.com/article/hylaking/95336108


# 也可以直接在arm主机上直接静态编译源码
./configure
make LDFLAGS=-static


# 在源码文件目录下可以找到编译好的可执行二进制文件
ip

# 将ip程序利用hdc_std命令传到openhramony系统内
hdc_std.exe file send d:\\ip /data/tmp/
# 如果发送失败,修改一下主目录的权限
hdc_std.exe shell
mount -o rw,remount -t auto /

# 在openharmony内给ip权限并且将其加入环境变量,便可使用iproute2命令了
chmod +x ip
export PATH=$PATH:/data/tmp/
  • 安装iptables
# iptables与iproute2的安装相近

# 源码下载并且解压
http://www.netfilter.org/projects/iptables/files/iptables-1.8.7.tar.bz2

# 交叉编译或者在arm主机直接静态编译获得静态二进制文件
# 交叉编译过程可以参考
https://www.cnblogs.com/eleclsc/p/11686287.html

# 通过hdc_std上传到openharmony系统内
# 在openharmony内给iptables权限并且将其加入环境变量,便可使用iptables命令了

# 比较特别的是虽然DAYU200板子是arm64位的,iptables交叉编译成32位openharmony才能正常使用
  • 安装busybox组件
# busybox官网直接提供了arm64静态二进制文件
https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/

# 在其他PC机上
wget https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-armv8l

# 通过hdc_std上传到openharmony系统内,如下操作即可使用busybox的所有工具了
mkdir /system/xbin/
hdc_std.exe file send d:\\busybox /system/xbin/
cd /system/xbin
chmod +x busybox
export PATH=$PATH:/system/xbin/
busybox --install .

# 具体可以参考
https://www.cnblogs.com/biang/p/6703238.html

安装docker容器引擎组件

  • 创建cgroups.json
# 在/etc/下创建cgroups.json,用busybox包含的工具创建即可
touch /etc/cgroups.json
cd etc
vi cgroups.json

# cgroups.json内容填写一下内容


"Cgroups": [

"UID": "system",
"GID": "system",
"Mode": "0755",
"Controller": "blkio",
"Path": "/dev/blkio"
,

"UID": "system",
"GID": "system",
"Mode": "0755",
"Controller": "cpu",
"Path": "/dev/cpu"
,

"Mode": "0555",
"Path": "/dev/cpuacct",
"Controller": "cpuacct"
,

"UID": "system",
"GID": "system",
"Mode": "0755",
"Controller": "cpuset",
"Path": "/dev/cpuset"
,

"UID": "system",
"GID": "system",
"Mode": "0755",
"Controller": "memory",
"Path": "/dev/memcg"
,

"UID": "system",
"GID": "system",
"Mode": "0755",
"Controller": "schedtune",
"Path": "/dev/stune"
,

"GID": "system",
"UID": "system",
"Mode": "0755",
"Controller": "devices",
"Path": "/dev/devices"
,

"GID": "system",
"UID": "system",
"Mode": "0755",
"Controller": "freezer",
"Path": "/dev/freezer"
,

"GID": "system",
"UID": "system",
"Mode": "0755",
"Controller": "hugetlb",
"Path": "/dev/hugetlb"
,

"GID": "system",
"UID": "system",
"Mode": "0755",
"Controller": "net_cls",
"Path": "/dev/net_cls"
,

"GID": "system",
"UID": "system",
"Mode": "0755",
"Controller": "net_prio",
"Path": "/dev/net_prio"
,

"GID": "system",
"UID": "system",
"Mode": "0755",
"Controller": "perf_event",
"Path": "/dev/perf_event"
,

"GID": "system",
"UID": "system",
"Mode": "0755",
"Controller": "pids",
"Path": "/dev/pids"
,

"GID": "system",
"UID": "system",
"Mode": "0755",
"Controller": "rdma",
"Path": "/dev/rdma"

],
"Cgroups2":
"UID": "root",
"GID": "root",
"Mode": "0600",
"Path": "/dev/cg2_bpf"


  • 安装docker静态二进制文件
# 下载docker static binaries
https://download.docker.com/linux/static/stable/aarch64/
若为32位选择armhf版。

# 解压并且加入环境变量
tar zxvf 到/system/bin下
export PATH=$PATH:/system/bin/
export PATH=$PATH:/system/bin/docker/

docker环境准备

运行脚本(如果脚本无法运行也可以按脚本一步一步来)

# mkdir on /system
if [ ! -d "/system/etc/docker" ]; then
mkdir /system/etc/docker
fi

# mkdir on /data
if [ ! -d "/data/var" ]; then
mkdir /data/var
else
rm -rf /data/var/run
fi
if [ ! -d "/data/run" ]; then
mkdir /data/run
fi
if [ ! -d "/data/tmp" ]; then
mkdir /data/tmp
fi
if [ ! -d "/data/opt" ]; then
mkdir /data/opt
fi
if [ ! -d "/data/etc" ]; then
mkdir /data/etc
mkdir /data/etc/docker
fi
if [ ! -d "/data/usr" ]; then
mkdir /data/usr
fi
if [ ! -d "/mnt/f2fs" ]; then
mkdir /mnt/f2fs
fi

# 这里对应刚刚已经被f2fs格式化的sd卡设备,可以用blkid查看到具体的名称
mount /dev/block/mmcblk0p1 /mnt/f2fs/

mount tmpfs /sys/fs/cgroup -t tmpfs -o size=1G
if [ ! -d "/sys/fs/cgroup/blkio" ]; then
mkdir /sys/fs/cgroup/blkio
mkdir /sys/fs/cgroup/cpu
mkdir /sys/fs/cgroup/cpuacct
mkdir /sys/fs/cgroup/cpuset
mkdir /sys/fs/cgroup/devices
mkdir /sys/fs/cgroup/freezer
mkdir /sys/fs/cgroup/hugetlb
mkdir /sys/fs/cgroup/memory
mkdir /sys/fs/cgroup/net_cls
mkdir /sys/fs/cgroup/net_prio
mkdir /sys/fs/cgroup/perf_event
mkdir /sys/fs/cgroup/pids
mkdir /sys/fs/cgroup/rdma
mkdir /sys/fs/cgroup/schedtune
mkdir /sys/fs/cgroup/systemd
fi

# mount --bind
mount --bind /data/etc/docker /etc/docker
mount --bind /data/var /var
mount --bind /data/run /run
mount --bind /data/tmp /tmp
mount --bind /data/opt /opt
mount --bind /data/usr /usr

mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
mount -t cgroup -o blkio,nodev,noexec,nosuid cgroup /sys/fs/cgroup/blkio
mount -t cgroup -o cpu,nodev,noexec,nosuid cgroup /sys/fs/cgroup/cpu
mount -t cgroup -o cpuacct,nodev,noexec,nosuid cgroup /sys/fs/cgroup/cpuacct
mount -t cgroup -o cpuset,nodev,noexec,nosuid cgroup /sys/fs/cgroup/cpuset
mount -t cgroup -o devices,nodev,noexec,nosuid cgroup /sys/fs/cgroup/devices
mount -t cgroup -o freezer,nodev,noexec,nosuid cgroup /sys/fs/cgroup/freezer
mount -t cgroup -o hugetlb,nodev,noexec,nosuid cgroup /sys/fs/cgroup/hugetlb
mount -t cgroup -o memory,nodev,noexec,nosuid cgroup /sys/fs/cgroup/memory
mount -t cgroup -o net_cls,nodev,noexec,nosuid cgroup /sys/fs/cgroup/net_cls
mount -t cgroup -o net_prio,nodev,noexec,nosuid cgroup /sys/fs/cgroup/net_prio
mount -t cgroup -o perf_event,nodev,noexec,nosuid cgroup /sys/fs/cgroup/perf_event
mount -t cgroup -o pids,nodev,noexec,nosuid cgroup /sys/fs/cgroup/pids
mount -t cgroup -o rdma,nodev,noexec,nosuid cgroup /sys/fs/cgroup/rdma
mount -t cgroup -o schedtune,nodev,noexec,nosuid cgroup /sys/fs/cgroup/schedtune

# ip route
ip rule add pref 1 from all lookup main
ip rule add pref 2 from all lookup default

###
# setup dns nameserver and docker images registry
echo "\\"registry-mirrors\\":[\\"https://docker.mirrors.ustc.edu.cn\\"],\\"experimental\\":false,\\"storage-driver\\": \\"overlay2\\",\\"data-root\\": \\"/mnt/f2fs\\"" > /etc/docker/daemon.json

# open br_netfilter module
#modprobe br_netfilter
setenforce 0

运行docker

# run dockerd
dockerd -D -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock &

验证docker工作状态

# docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(arm64v8)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/


# 查看docker的信息
docker version
docker info
docker ps -a
docker images

#DAYU200体验官#

#DAYU200体验官#

#DAYU200体验官#



#dayu200体验官#mppt光伏发电项目dayu200hi3861华为云iotda(代码片段)

一、项目介绍​能源危机日益严重,发展新能源势在必行。光伏发电就是不错的选择,但是光电转换效率一直是困扰行业发展的一大难题。本项目通过MPPT全称“最大功率点跟踪”(MaximumPowerPointTracking)实时侦测太阳能板的发电... 查看详情

#dayu200体验官#arkuiets实践开发一个管家服务系统(代码片段)

DAYU200开发板eTS实现的若干效果合集@toc前言实现的一些效果展示项目结构1.我的通知知识点:使用了Column布局、Flex流式布局、时间格式化工具类等Badge(消息气泡)的使用Column()Badge(count:this.nCounts,//消息数量maxCount:99,position:BadgePosi... 查看详情

润和软件dayu200的openharmony赋能之旅

前言2021年,润和软件推出了OpenHarmony高性能设备平台大禹系列,其中DAYU200作为首款支持OpenHarmony富设备的开发板,是广大开发者探索OpenHarmony开发的首选设备之一。今天就来带大家了解一下DAYU200是如何为OpenHarmony生态... 查看详情

#dayu200体验官#农业喷灌的可视化控制(代码片段)

背景“民以食为天”,粮食安全关系一个国家和民族的基本生存,联合国发布《2022年全球粮食危机报告》称全球或面临严重的粮食短缺。粮食生产离不开浇水和施肥,要想获得高产稳产,必须采用更加科学高效的节水灌溉技术... 查看详情

#dayu200体验官#hellokun开源鸿蒙车机系统ohcar(代码片段)

@toc0.OHCar?想象一下,现在你正忙完一天的工作准备下班回家,担心车辆能源不足?天气太热或太冷?于是在走到楼下停车位上的DreamCar前,拿出鸿蒙手机打开车辆专属的管家APP,提前检测剩余能量百分比,打开车载空调。到达... 查看详情

#dayu200#openharmony视频播放器(代码片段)

作者:徐建国Video由于使用本地视频文件会影响App的包大小,所以通常我们的视频文件来源于网络地址,需要在config或者module.json对应的"abilities"中添加网络使用权限ohos.permission.INTERNET。"abilities":["permissi... 查看详情

#dayu200#openharmony视频播放器(代码片段)

作者:徐建国Video由于使用本地视频文件会影响App的包大小,所以通常我们的视频文件来源于网络地址,需要在config或者module.json对应的"abilities"中添加网络使用权限ohos.permission.INTERNET。"abilities":["permissi... 查看详情

dayu200升级最新的openharmony系统,一起来玩开源鸿蒙呀!

视频教程1.下载镜像烧录固件的下载可以通过每日构建下载:http://ci.openharmony.cn/dailys/dailybuilds选择master分支,形态组件dayu200,设备层级——富设备,选择镜像包,点击下载。等下载成功之后,解压再解压2.... 查看详情

dayu200升级最新的openharmony系统,一起来玩开源鸿蒙呀!

视频教程1.下载镜像烧录固件的下载可以通过每日构建下载:http://ci.openharmony.cn/dailys/dailybuilds选择master分支,形态组件dayu200,设备层级——富设备,选择镜像包,点击下载。等下载成功之后,解压再解压2.... 查看详情

#dayu200#openharmony跳转拨号界面(代码片段)

日常交流中,给朋友打电话是一个常见的交流方式,那么如何在OpenHarmony中进行电话服务相关的开发呢,今天我们可以一起来了解一下。电话服务系统提供了一系列的API用于拨打电话、获取无线蜂窝网络和SIM卡相关信... 查看详情

#dayu200#openharmony跳转拨号界面(代码片段)

日常交流中,给朋友打电话是一个常见的交流方式,那么如何在OpenHarmony中进行电话服务相关的开发呢,今天我们可以一起来了解一下。电话服务系统提供了一系列的API用于拨打电话、获取无线蜂窝网络和SIM卡相关信... 查看详情

润和软件dayu200的openharmony赋能之旅

前言2021年,润和软件推出了OpenHarmony高性能设备平台大禹系列,其中DAYU200作为首款支持OpenHarmony富设备的开发板,是广大开发者探索OpenHarmony开发的首选设备之一。今天就来带大家了解一下DAYU200是如何为OpenHarmony生态... 查看详情

富设备平台突破:基于rk3568的dayu200进入openharmony3.1release主干

近日,润和软件出品的HH-SCDAYU200开发套件基于瑞芯微RK3568芯片,代码已完成进入OpenAtomOpenHarmony(以下简称“OpenHarmony”)主干,并第一时间支持OpenHarmony3.1Release版本,实现了“富设备平台入主干”从0到1的... 查看详情

如何在dayu200上安装浏览器-基于openharmony3.1release版本

前言:终于!OpenHarmony有自己的浏览器应用了!可以查看视频演示:先看下效果:打开某宝:可以扫码登录:安装教程:1.DAYU200升级最新的3.1Release版本固件升级教程:DAYU200升级OpenHarmony系统࿰... 查看详情

“上新了!开发”系列直播课#第六期#dayu200技术公开课

来啦!来啦!!!华为开发者联盟学堂联合润和软件召集OpenAtomOpenHarmony(以下简称“OpenHarmony”)社区大咖——张荣超老师、连志安老师、徐建国老师、梁开祝老师、徐礼文老师,推出《DAYU200技术公开... 查看详情

“上新了!开发”系列直播课#第六期#dayu200技术公开课

来啦!来啦!!!华为开发者联盟学堂联合润和软件召集OpenAtomOpenHarmony(以下简称“OpenHarmony”)社区大咖——张荣超老师、连志安老师、徐建国老师、梁开祝老师、徐礼文老师,推出《DAYU200技术公开... 查看详情

想开发dayu200,我教你(代码片段)

摘要:本文主要介绍OpenHarmony富设备DAYU200开发板的入门指导。本文分享自华为云社区《DAYU200开发指导》,作者:星辰27。1概述DAYU200开发板属于OpenHarmonyL2富设备,具备多种开发场景,功能较为强大,可以类... 查看详情

支持工业级瘦设备4g接入,润和软件dayu120通过openharmony兼容性测评

近日,润和软件HH-SCDAYU120开发板顺利通过OpenHarmony3.1release版本兼容性测评,获颁OpenAtomOpenHarmony(以下简称OpenHarmony)生态产品兼容性证书,标志着润和软件大禹系列开发板正式开启支持OpenHarmony瘦设备迁移至4G... 查看详情