日月当空的博客日志 - 2021年12月
type: channel
link: https://mingtech.net.cn/blog/index.php/2021/12/
description: 日月当空的博客日志
items: hi3798mv100SDK上DropBear的交叉编译
items: Gogs的交叉编译与配置
items: SSL证书申请及HTTP转HTTPS
items: Gitea的交叉编译与配置
items: MariaDB 10.6.5的交叉编译

hi3798mv100SDK上DropBear的交叉编译
type: item
date: 2021-12-24T02:01:00+00:00
description: hi3798mv100SDK上DropBear的交叉编译Dropbear是一个相对较小的SSH服务器和客户端。它运行在各种基于POSIX的平台上。Dropbear是一种开源软件，以MIT风格的许可证分发。Dropbear对于“嵌入”型Linux（或其他Unix）系统（如无线路由器）特别有用。而在打造hi3798mv100的ramdisk时，SDK并没有包含此工具。因此需要手工添加上。一、下载Dropbear官方地址：https://matt.ucc.asn.au/dropbear/dropbear-2020.81.tar.bz2下载下来的源代码，放入SDK的默认开源代码目录下：third_party/open_source/二、添加Makefile在source/component/添加目录dropbear目录，仿照此目录下的其他子目录，添加上相应的Makefile#=============================================================================== # export variable #=============================================================================== ifeq ($(CFG_HI_EXPORT_FLAG),) SDK_DIR ?= $(shell cd $(CURDIR)/../../.. && /bin/pwd) include $(SDK_DIR)/base.mak endif #=============================================================================== # local variable #=============================================================================== DROPBEAR := dropbear-2020.81 DROPBEAR_DIR := $(HI_OUT_DIR)/obj/source/component/dropbear INSTALL_DIR = $(DROPBEAR_DIR)/release TARGETS := dropbear CFLAGS += $(subst -Werror,,$(CFG_HI_CFLAGS)) #=============================================================================== # rules #=============================================================================== .PHONY: all clean dropbear all: $(TARGETS) $(AT)test -d $(HI_INCLUDE_DIR) || mkdir -p $(HI_INCLUDE_DIR) clean: $(AT)rm -rf $(INSTALL_DIR) $(DROPBEAR_DIR) dropbear: $(DROPBEAR_DIR)/$(DROPBEAR)/tar $(AT)cd $(DROPBEAR_DIR)/$(DROPBEAR) && make && make install $(DROPBEAR_DIR)/$(DROPBEAR)/tar: $(AT)test -d $(INSTALL_DIR) || mkdir -p $(INSTALL_DIR) $(AT)test -d $(DROPBEAR_DIR)/$(DROPBEAR) || (tar xjf $(OPEN_SOURCE_DIR)/$(DROPBEAR).tar.bz2 -C $(DROPBEAR_DIR); \ cd $(DROPBEAR_DIR)/$(DROPBEAR); \ sh ./configure CC=$(CFG_HI_ARM_TOOLCHAINS_NAME)-gcc CPP=$(CFG_HI_ARM_TOOLCHAINS_NAME)-cpp AR=$(CFG_HI_ARM_TOOLCHAINS_NAME)-ar AS=$(CFG_HI_ARM_TOOLCHAINS_NAME)-as LD=$(CFG_HI_ARM_TOOLCHAINS_NAME)-ld NM=$(CFG_HI_ARM_TOOLCHAINS_NAME)-nm STRIP=$(CFG_HI_ARM_TOOLCHAINS_NAME)-strip OBJDU…

Gogs的交叉编译与配置
type: item
date: 2021-12-15T01:18:00+00:00
description: Gogs的交叉编译与配置gogs官方的版本，已经有一年未发布Release版本了。因此需要手工交叉编译一个Gogs来，Gogs与Gitea的编译很类似。1.环境Host环境：Ubuntu 18.04.5 (PC)编译工具链：arm-himix200-linux（解包自arm-himix200-linux.tgz，据说来自Hi3516dv300SDK），海思提供的arm编译工具链环境变量：执行命令：export PATH=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin:$PATH编译器arm-himix200-linux默认输出的ELF格式为private flags = 5000200: [Version5 EABI] [soft-float ABI]，与ubuntu-armhf的格式private flags = 5000400: [Version5 EABI] [hard-float ABI]不兼容（soft-float ABI与hard-float ABI的传参规则不一样，因此会不兼容）。编译办法：CGO_ENABLED=1 CC=arm-himix200-linux-gcc PATH=$PATH:~/XXX/go/bin GOOS=linux GOARCH=arm GOARM=7 TAGS="cert" make build此时编译后，由于默认CC编译器的选项是生成5000200软浮点ABI，所以gitea出来的格式也是5000200。需要首先将Makefile中调用go generate生成bindata的部分代码修改调整一下sed -i 's|go generate|CC= GOOS= GOARCH= CGO_ENABLED=0 CGO_CFLAGS= CGO_CXXFLAGS= CGO_CPPFLAGS= CGO_LDFLAGS= go generate|g' Makefile然后再执行make build构建命令CGO_ENABLED=1 CGO_CFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4" CGO_CXXFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4" CGO_CPPFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4" CGO_LDFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4" CC=arm-himix200-linux-gcc PATH=$PATH:~/XXX/go/bin GOOS=linux GOARCH=arm GOARM=7 TAGS="cert" make build此时，生成的gogs程序gogs编译后，会生成一个打包的应用，需要参考官方文档添加相应服务文件、配置文件等。编译时，如果github等网站访问不畅，可以配置goproxy，如下： export GOPROXY=https://goproxy.io,direct1.1服务文件[Unit] Description=Gogs -- A painless self-hosted Git service After=syslog.target After=network.target #After=mariadb.service mysqld.service postgresql.service memcached.service redis.service [Service] # Modify these two values and uncomment them if you have # repos with lots of files and get an HTTP error 500 because # of that ### #LimitMEMLOCK=infinity #LimitNOFILE=65535 Type=simple User=git Group=git WorkingDirectory=/data/git ExecStart=/data/app/bin/gogs web --config /data/app/etc/gogs.app.ini Restart=always Environment=USER=git HOME=/data/git # Some distributions may not support these hardening directives. If you cannot start …

SSL证书申请及HTTP转HTTPS
type: item
date: 2021-12-08T00:10:00+00:00
description: SSL证书及HTTP转HTTPS搭建的个人网站，申请公安备案时，提示我没有证书。HTTP本身就是前期临时措施，总之后面是要转HTTPS的。因此走一遍HTTPS流程。1.申请Let's Encrypt证书穷人一个，当然是能省则省，证书不用高大上的，免费的最好，当然找Let's Encrypt了。1.1 脚本申请Let's Encrypt也不轻松，找来找去，certbot提示要安装一堆包，实在烦。搜索到一个github上的工程，acme.sh，一个脚本，深合朕意。链接：https://github.com/acmesh-official/acme.sh1.1.1 依赖程序acme.sh依赖于其他程序来完成相应证书申请、刷新、删除等工作。因此，需要加上openssl、curl所在的路径后再执行PATH=$PATH:/xxxx/bin ./acme.sh --issue -w /XXX/web -d YYYY.cn --server letsencrypt --preferred-chain "ISRG Root X1"但会提示错误：Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 60搜索得到答案，将acme.sh中的curl --silent中加入一个-k参数即可（是由于客户端缺少证书导致）。再次运行后，即可得到正确的证书、私钥等，位于当前用户目录的.acme.sh/YYYY.cn/下。如需要方便后续的renew操作，可以通过install-cert命令将证书复制到指定位置，复制完成后并可执行reload命令（除命令当次会执行拷贝、并reload外，同时会的.acme.sh/YYYY.cn/YYYY.cn.conf文件中保存证书目标位置、reload命令，方便renew命令自动完成这些复杂动作）。PATH=$PATH:/xxxx/bin /YYY/acme.sh-3.0.1/acme.sh --install-cert -d YYYY.cn --cert-file /ZZZZ/etc/ssl/certs/YYYY.cer --key-file /ZZZZ/etc/ssl/private/YYYY.cn.key --fullchain-file /ZZZZ/etc/ssl/certs/fullchain.cer --reloadcmd "systemctl reload nginx.service"PS：当前用户需要在/XXX/web目录下有写权限。1.2 二级域名新版acme.sh支持泛域名或多个二级域名。泛域名当然更好了（*.xxx.com），但泛域名并不支持-w方式指定本地路径，只支持DNSAPI方式。我并不想使用DNS厂商的API（毕竟，开放一个口子，就会增加一点安全风险），而且自己使用的二级域名并 不是很多，因此使用多个二级域名即可。申请时，执行如下命令PATH=$PATH:/XXXX/bin /data/acme.sh-3.0.1/acme.sh --issue -w /AAAA/web -d YYYY.cn -d www.YYYY.cn -d mail.YYYY.cn -d pop3.YYYY.cn -d smtp.YYYY.cn -d imap.YYYY.cn -d pop3s.YYYY.cn -d smtps.YYYY.cn -d imaps.YYYY.cn --server letsencrypt --preferred-chain "ISRG Root X1"安装到本地，方便后续自动续期PATH=$PATH:/XXXX/bin /data/acme.sh-3.0.1/acme.sh -d YYYY.cn -d www.YYYY.cn -d mail.YYYY.cn -d pop3.YYYY.cn -d smtp.YYYY.cn -d imap.YYYY.cn -d pop3s.YYYY.cn -d smtps.YYYY.cn -d imaps.YYYY.cn --install-cert --cert-file /ZZZZ/ssl/certs/YYYY.cn.cer --key-file /ZZZZ/ssl/private/YYYY.cn.key --fullchain-file /ZZZZ/ssl/certs/fullchain.cer --reloadcmd "systemctl reload nginx.service"2. nginx服务上配置首先，修改nginx的server配置模块，将http定向到https。 server { listen 80; listen [::]:80; s…

Gitea的交叉编译与配置
type: item
date: 2021-12-01T19:27:00+00:00
description: Gitea的交叉编译与配置gitea官方提供的arm版本，为armel版本（即[soft-float ABI]），与ubuntu ports的armhf版本是不兼容的。因此需要手工交叉编译一个Gitea来。1.环境Host环境：Ubuntu 18.04.5 (PC)编译工具链：arm-himix200-linux（解包自arm-himix200-linux.tgz，据说来自Hi3516dv300SDK），海思提供的arm编译工具链环境变量：执行命令：export PATH=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin:$PATH编译器arm-himix200-linux默认输出的ELF格式为private flags = 5000200: [Version5 EABI] [soft-float ABI]，与ubuntu-armhf的格式private flags = 5000400: [Version5 EABI] [hard-float ABI]不兼容（soft-float ABI与hard-float ABI的传参规则不一样，因此会不兼容）。默认编译办法（不支持sqlite）：PATH=$PATH:~/XXX/go/bin GOOS=linux GOARCH=arm make build~/XXX/go/bin是从官方网站下载下来的go语言编译器位置。而全量的编译办法：CGO_ENABLED=1 CC=arm-himix200-linux-gcc PATH=$PATH:~/XXX/go/bin GOOS=linux GOARCH=arm GOARM=7 TAGS="bindata sqlite sqlite_unlock_notify" make build此时编译后，由于默认CC编译器的选项是生成5000200软浮点ABI，所以gitea出来的格式也是5000200。需要首先将Makefile中调用go generate生成bindata的部分代码修改调整一下sed -i 's|CC= GOOS= GOARCH= $(GO) generate|CC= GOOS= GOARCH= CGO_ENABLED=0 CGO_CFLAGS= CGO_CXXFLAGS= CGO_CPPFLAGS= CGO_LDFLAGS= $(GO) generate|g' Makefile然后再执行make build构建命令CGO_ENABLED=1 CGO_CFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4" CGO_CXXFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4" CGO_CPPFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4" CGO_LDFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4" CC=arm-himix200-linux-gcc PATH=$PATH:~/XXX/go/bin GOOS=linux GOARCH=arm GOARM=7 TAGS="bindata sqlite sqlite_unlock_notify" make build此时，生成的gitea程序gitea编译后，会生成一个打包的应用，需要参考官方文档添加相应服务文件、配置文件等。1.1服务文件[Unit] Description=Gitea (Git with a cup of tea) After=syslog.target After=network.target ### # Don't forget to add the database service dependencies ### # #Wants=mysql.service #After=mysql.service # #Wants=mariadb.service #After=mariadb.service # #Wants=postgresql.service #After=postgresql.service # #Wants=memcached.service #After=memcached.service # #Wants=redis.service #After=redis.service # ### # If using socket activation for main http/s ### # #After=gitea.main.socket #Requires=g…

MariaDB 10.6.5的交叉编译
type: item
date: 2021-12-01T19:26:00+00:00
description: MariaDB的交叉编译1.环境Host环境：Ubuntu 18.04.5 (PC)编译工具链：arm-himix200-linux（解包自arm-himix200-linux.tgz，据说来自Hi3516dv300SDK），海思提供的arm编译工具链环境变量：执行命令：export PATH=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin:$PATHNginx目标安装目录：/data/app编译器arm-himix200-linux默认输出的ELF格式为private flags = 5000200: [Version5 EABI] [soft-float ABI]，与ubuntu-armhf的格式private flags = 5000400: [Version5 EABI] [hard-float ABI]不兼容（soft-float ABI与hard-float ABI的传参规则不一样，因此会不兼容）。通过gcc的print-multi-lib查询xxx@xxx-HP-ProDesk-480-G5-MT:~/YYY$ arm-himix200-linux-gcc --print-multi-lib .; armv5te_arm9;@mcpu=arm926ej-s a9;@mcpu=cortex-a9 a7;@mcpu=cortex-a7 a17;@mcpu=cortex-a17 a17_a7;@mcpu=cortex-a17.cortex-a7 a53;@mcpu=cortex-a53 a73;@mcpu=cortex-a73 a73_a53;@mcpu=cortex-a73.cortex-a53 armv5te_arm9_soft;@mcpu=arm926ej-s@mfloat-abi=soft armv5te_arm9_vfp;@mcpu=arm926ej-s@mfloat-abi=softfp@mfpu=vfp a9_soft;@mcpu=cortex-a9@mfloat-abi=soft a9_softfp_vfp;@mcpu=cortex-a9@mfloat-abi=softfp@mfpu=vfp a9_softfp_vfpv3-d16;@mcpu=cortex-a9@mfloat-abi=softfp@mfpu=vfpv3-d16 a9_vfpv3;@mcpu=cortex-a9@mfloat-abi=softfp@mfpu=vfpv3 a9_vfpv3_neon;@mcpu=cortex-a9@mfloat-abi=softfp@mfpu=neon a9_hard_neon;@mcpu=cortex-a9@mfloat-abi=hard@mfpu=neon a7_soft;@mcpu=cortex-a7@mfloat-abi=soft a7_softfp_vfpv4;@mcpu=cortex-a7@mfloat-abi=softfp@mfpu=vfpv4 a7_softfp_neon-vfpv4;@mcpu=cortex-a7@mfloat-abi=softfp@mfpu=neon-vfpv4 a7_hard_neon-vfpv4;@mcpu=cortex-a7@mfloat-abi=hard@mfpu=neon-vfpv4 a17_soft;@mcpu=cortex-a17@mfloat-abi=soft a17_softfp_vfpv4;@mcpu=cortex-a17@mfloat-abi=softfp@mfpu=vfpv4 a17_softfp_neon-vfpv4;@mcpu=cortex-a17@mfloat-abi=softfp@mfpu=neon-vfpv4 a17_hard_neon-vfpv4;@mcpu=cortex-a17@mfloat-abi=hard@mfpu=neon-vfpv4 a17_a7_soft;@mcpu=cortex-a17.cortex-a7@mfloat-abi=soft a17_a7_softfp_vfpv4;@mcpu=cortex-a17.cortex-a7@mfloat-abi=softfp@mfpu=vfpv4 a17_a7_softfp_neon-vfpv4;@mcpu=cortex-a17.cortex-a7@mfloat-abi=softfp@mfpu=neon-vfpv4 a17_a7_hard_neon-vfpv4;@mcpu=cortex-a17.cortex-a7@mfloat-abi=hard@mfpu=neon-vfpv4 a53_soft;@mcpu=cortex-a53@mfloat…