在服务器CentOS7系统上使用Docker安装Ubuntu20.04 X86使用交叉编译链6.3版本交叉编译Ubuntu20.04 ARM64的MongoDB v4.0版本
1.查看系统信息(ARMv8、aarch64、Cortex-A53)
产品信息:AI计算盒SE5
GNU版本:GCC/G++编译器默认为9.3.0
linaro@bm1684:/data/mongo$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
linaro@bm1684:/data/mongo$ uname -a
Linux bm1684 5.4.217-bm1684-gc696259809f0 #1 SMP Mon Mar 27 06:38:58 CST 2023 aarch64 aarch64 aarch64 GNU/Linux
linaro@bm1684:/data/mongo$ dpkg --print-architecture
arm64
linaro@bm1684:/data/mongo$ arch
aarch64
linaro@bm1684:/data/mongo$ cat /proc/cpuinfo
processor : 0
BogoMIPS : 100.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
model name : bm1684
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
processor : 1
BogoMIPS : 100.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
model name : bm1684
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
processor : 2
BogoMIPS : 100.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
model name : bm1684
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
processor : 3
BogoMIPS : 100.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
model name : bm1684
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
processor : 4
BogoMIPS : 100.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
model name : bm1684
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
processor : 5
BogoMIPS : 100.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
model name : bm1684
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
processor : 6
BogoMIPS : 100.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
model name : bm1684
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
processor : 7
BogoMIPS : 100.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
model name : bm1684
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
linaro@bm1684:/data/mongo$ lscpu
Architecture: aarch64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 2
Vendor ID: ARM
Model: 4
Model name: Cortex-A53
Stepping: r0p4
CPU max MHz: 2300.0000
CPU min MHz: 1150.0000
BogoMIPS: 100.00
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Retbleed: Not affected
Vulnerability Spec store bypass: Not affected
Vulnerability Spectre v1: Mitigation; __user pointer sanitization
Vulnerability Spectre v2: Not affected
Vulnerability Srbds: Not affected
Vulnerability Tsx async abort: Not affected
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
2.选择交叉编译链
2.1.GCC旧版本下载(GCC8之前)
https://releases.linaro.org/components/toolchain/binaries/
博主选择的是6.3版本的交叉编译链
选择aarch64-linux-gun
选择gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
2.2.GCC新版本下载(GCC8之后)
https://developer.arm.com/downloads/-/gnu-a
3.安装docker(已经安装可跳过)
3.1.官方安装教程
https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository
3.2.操作系统要求
要安装Docker Engine,您需要以下Ubuntu版本之一的64位版本:
Ubuntu Mantic 23.10
Ubuntu Jammy 22.04 (LTS)
Ubuntu Focal 20.04 (LTS)
适用于Ubuntu的Docker Engine与x86_64(或amd64)、armhf、arm64、s390x和ppc64le(ppc64el)架构兼容。
3.3.卸载旧版本
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
3.4.使用apt存储库安装
- 设置Docker的apt存储库。
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
- 安装Docker软件包。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 通过运行 hello-world 镜像来验证 Docker Engine 安装是否成功。
sudo docker run hello-world
4.配置docker环境
# 拉取docker Ubuntu 20.04
sudo docker pull ubuntu:20.04
# 设置容器持久化存储(my-ubuntu-data文件自动同步到docker文件/data,反之亦然)
mkdir -p ~/my-ubuntu-data
sudo docker run -it -v ~/my-ubuntu-data:/data ubuntu:20.04 /bin/bash
# 以下命令可参考
# 管理容器。列出当前正在运行的容器
sudo docker ps
# 或者。列出所有的容器,包括正在运行的、已经停止的以及未运行的容器。
sudo docker ps -a
# 重新连接到容器的 shell。5d429110f4fb 为<container_id>
sudo docker exec -it 5d429110f4fb /bin/bash
# 停止容器
sudo docker stop <container_id>
# 启动容器
sudo docker start <container_id>
# 删除容器
sudo docker rm <container_id>
# 退出容器
exit 或者按 Ctrl+D
# 后台运行容器
sudo docker run 的 -d 参数,并配置端口转发
5.安装python2和pip2
apt-get install python2.7
python2.7 --version
ln -s /usr/bin/python2.7 /usr/bin/python2
python2 --version
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
python2.7 get-pip.py
pip2 --version
python2 -m pip --version
6.交叉编译openssl-1.1.1f
6.1.配置环境
# 交叉编译openssl生成lib库和include
wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/openssl/1.1.1f-1ubuntu2/openssl_1.1.1f.orig.tar.gz
tar -zxvf openssl_1.1.1f.orig.tar.gz
cd openssl-1.1.1f
# 配置
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl \
--libdir=lib \
no-asm shared \
--cross-compile-prefix=/data/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- \
-fPIC
6.2.修改Makefile文件
vi Makefie
找到PLATFORM定义行,修改为: PLATFORM=linux-aarch64
找到CNF_CFLAGS定义行,去掉-m64。修改为: CNF_CFLAGS=-pthread
找到CNF_CXXFLAGS定义行,去掉-m64。修改为: CNF_CXXFLAGS=-std=c++11 -pthread
保存修改后的Makefile
6.3.编译
make
6.4.安装
make install
6.5.可选。清理之前的编译产物:
make clean
7.准备lzma和curl头文件和共享库
7.1.配置lzma共享库。从SE5盒子上查找so库移植到docker上
在AI计算盒子SE5上运行
/bin/ld.gold -llzma --verbose
一般情况下在/lib/aarch64-linux-gnu
下面
/lib/aarch64-linux-gnu/liblzma.so
移植到docker上,路径/data/lzma-aarch64/lib
即(my-ubuntu-data文件自动同步到docker文件/data):
~/my-ubuntu-data/lzma-aarch64/lib
在CentOS7 x86系统非docker内
mkdir -p ~/my-ubuntu-data/lzma-aarch64/lib
在SE5的ARM64盒子上(注意修改user_name和host_name)
scp -r /lib/aarch64-linux-gnu/liblzma.so user_name@host_name:~/my-ubuntu-data/lzma-aarch64/lib
在CentOS7 x86系统的docker内
chmod -R +x /data/lzma-aarch64/
7.2.配置curl头文件和共享库。从SE5盒子上查找头文件和so库移植到docker上
7.2.1.查找头文件路径
头文件通常安装在 /usr/include
或 /usr/local/include
下,具体取决于库的安装方式和版本。对于 libcurl4-openssl-dev
,可以使用以下命令来查找其安装的头文件:
dpkg -L libcurl4-openssl-dev | grep include
输出结果
/usr/include
/usr/include/aarch64-linux-gnu
/usr/include/aarch64-linux-gnu/curl
/usr/include/aarch64-linux-gnu/curl/curl.h
/usr/include/aarch64-linux-gnu/curl/curlver.h
/usr/include/aarch64-linux-gnu/curl/easy.h
/usr/include/aarch64-linux-gnu/curl/mprintf.h
/usr/include/aarch64-linux-gnu/curl/multi.h
/usr/include/aarch64-linux-gnu/curl/stdcheaders.h
/usr/include/aarch64-linux-gnu/curl/system.h
/usr/include/aarch64-linux-gnu/curl/typecheck-gcc.h
/usr/include/aarch64-linux-gnu/curl/urlapi.h
头文件安装在
/usr/include/aarch64-linux-gnu/curl
7.2.2.查找库文件路径
库文件(.so
或 .a
文件)通常安装在 /usr/lib
或 /usr/local/lib
下,或者在特定于架构的目录中,如 /usr/lib/arm-linux-gnueabihf/
(对于 armhf)或 /usr/lib/aarch64-linux-gnu/
(对于 arm64)。对于 libcurl4-openssl-dev
,可以使用以下命令来查找其安装的库文件:
dpkg -L libcurl4-openssl-dev | grep lib
输出结果
/usr/lib
/usr/lib/aarch64-linux-gnu
/usr/lib/aarch64-linux-gnu/libcurl.a
/usr/lib/aarch64-linux-gnu/libcurl.la
/usr/lib/aarch64-linux-gnu/pkgconfig
/usr/lib/aarch64-linux-gnu/pkgconfig/libcurl.pc
/usr/share/aclocal/libcurl.m4
/usr/share/doc/libcurl4-openssl-dev
/usr/share/doc/libcurl4-openssl-dev/copyright
/usr/lib/aarch64-linux-gnu/libcurl.so
/usr/share/doc/libcurl4-openssl-dev/NEWS.Debian.gz
/usr/share/doc/libcurl4-openssl-dev/changelog.Debian.gz
库文件安装在
/usr/lib/aarch64-linux-gnu
主要文件是 libcurl.so
在CentOS7 x86的非docker内(my-ubuntu-data文件自动同步到docker文件/data)
mkdir -p ~/my-ubuntu-data/aarch64-curl/include
mkdir -p ~/my-ubuntu-data/aarch64-curl/lib
在SE5的ARM64盒子上(注意修改user_name和host_name)
scp -r /usr/include/aarch64-linux-gnu/curl user_name@host_name:~/my-ubuntu-data/aarch64-curl/include
scp -r /usr/lib/aarch64-linux-gnu/libcurl.so user_name@host_name:~/my-ubuntu-data/aarch64-curl/lib
在CentOS7 x86系统的docker内
chmod -R +x /data/aarch64-curl/
8.源码交叉编译MongoDB数据库
8.1.python2编译MongDB 4.0版本
主要环境:python2,MongoDB v4.0版本,docker ubuntu:20.04,gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu,openssl 1.1.1f头文件和共享库,liblzma.so共享库,curl头文件和共享库
apt update
apt install libcurl-dev
apt install libcurl4-openssl-dev
apt install scons
apt install python-dev
git clone https://github.com/mongodb/mongo.git
cd mongo
git checkout v4.0
python2 -m pip install pyyaml typing
python2.7 -m pip install -r buildscripts/requirements.txt
chmod -R +x /data/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/
# 编译目标
SCons Targets
--------------
* mongod
* mongos
* mongo
* core (includes mongod, mongos, mongo)
* all
# 编译指令。编译mongod
python2 buildscripts/scons.py \
CCFLAGS="-march=armv8-a+crc -mtune=cortex-a53" \
CC=/data/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \
CXX=/data/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ \
--ssl \
CPPPATH="/data/aarch64-curl/include /usr/local/ssl/include" \
LIBPATH="/data/aarch64-curl/lib /usr/local/ssl/lib /data/lzma-aarch64/lib" \
mongod --disable-warnings-as-errors
# 编译指令。编译mongo
python2 buildscripts/scons.py \
CCFLAGS="-march=armv8-a+crc -mtune=cortex-a53" \
CC=/data/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \
CXX=/data/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ \
--ssl \
CPPPATH="/data/aarch64-curl/include /usr/local/ssl/include" \
LIBPATH="/data/aarch64-curl/lib /usr/local/ssl/lib /data/lzma-aarch64/lib" \
mongo
8.2.编译输出保存结果
build/opt/mongo/mongod
build/opt/mongo/mongo
8.3.把交叉编译好的mongod和mongo二进制可执行文件移动到AI计算盒子SE5上
在docker内
mkdir -p /data/mongodb_build_4_0
cp -r build/opt/mongo /data/mongodb_build_4_0
在CentOS7 非docker内,复制交叉编译好的MongoDB到AI计算盒子SE5上。
scp -r ~/my-ubuntu-data/mongodb_build_4_0 user_name@host_name:/data
8.4.可选。python3编译MongDB v4.4版本
apt update
apt upgrade
apt install build-essential
apt-get install libcurl4-openssl-dev
apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev wget curl llvm liblzma-dev python-openssl
wget https://www.python.org/ftp/python/3.7.10/Python-3.7.10.tgz
tar xvf Python-3.7.10.tgz
cd Python-3.7.10
./configure --enable-optimizations
make -j$(nproc)
make install
# mv /usr/bin/python3 /usr/bin/python3.6-backup
# mv /usr/bin/pip3 /usr/bin/pip3.6-backup
# ln -s /usr/local/bin/python3.7 /usr/bin/python3
# ln -s /usr/local/bin/pip3.7 /usr/bin/pip3
python3 --version
pip3 --version
apt install curl
apt install git
apt install vim
apt install python3.7-dev
apt install libssl-dev
git clone https://github.com/mongodb/mongo.git
cd mongo
git checkout v4.4
python3 -m pip install -r etc/pip/compile-requirements.txt
# 编译目标目录
The following targets can be named on the scons command line to build
only certain components:
* `install-mongod`
* `install-mongos`
* `install-mongo` or `install-shell`
* `install-servers` (includes `mongod` and `mongos`)
* `install-core` (includes `mongod`, `mongos`, `mongo`)
* `install-devcore` (includes `mongod`, `mongos`, and `mongo`; the name is forward-compatible with 6.0+ branches)
* `install-all`
# X86系统:python3 buildscripts/scons.py install-mongod --disable-warnings-as-errors
# 交叉编译openssl生成lib库和include
wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/openssl/1.1.1f-1ubuntu2/openssl_1.1.1f.orig.tar.gz
tar -zxvf openssl_1.1.1f.orig.tar.gz
cd openssl-1.1.1f
# 配置
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl \
--libdir=lib \
no-asm shared \
--cross-compile-prefix=/data/gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu- \
-fPIC
# 修改Makefile文件
vi Makefiel
# 找到PLATFORM定义行,修改为: PLATFORM=linux-aarch64
# 找到CNF_CFLAGS定义行,修改为: CNF_CFLAGS=-pthread
# 找到CNF_CXXFLAGS定义行,修改为: CNF_CXXFLAGS=-std=c++11 -pthread
# 保存修改后的Makefile
# 编译
make
# 安装
make install
# 清理之前的编译产物:
make clean
# 交叉编译mongod
# LIBPATH参数可以通过空格添加多个lib库。/data/lzma-aarch64/lib下面的lzma so库是从SE5盒子找来的。使用/bin/ld.gold -llzma --verbose查找路径。
python3 buildscripts/scons.py \
CCFLAGS="-march=armv8-a+crc -mtune=cortex-a53" \
CC=/data/gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \
CXX=/data/gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ \
--ssl \
CPPPATH=/usr/local/ssl/include \
LIBPATH="/usr/local/ssl/lib /data/lzma-aarch64/lib" \
install-mongod --disable-warnings-as-errors
# 编译结果路径
/data/mongo/build
# mongod服务器可执行文件
/data/mongo/build/install/bin/mongod
9.创建MongDB配置文件
要创建mongod.conf
配置文件并添加内容,包括数据目录和日志文件,按照以下步骤进行:
9.1.创建配置文件:
首先,在MongoDB 安装目录下的 etc
子目录中创建一个新的配置文件,命名为 mongod.conf
。例如,如果 MongoDB 安装目录是 /data/mongo
,则可以在 /data/mongo/etc
中创建此文件。
使用文本编辑器(如 vim
, nano
, 或 gedit
)来创建和编辑文件:
vim /etc/mongod.conf
9.2.添加内容到配置文件:
在 mongod.conf
文件中,添加各种配置选项。设置数据目录和日志文件:
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
#storage:
# dbPath: /data/db
# journal:
# enabled: true
storage:
dbPath: /var/lib/mongo
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
# process management security
processManagement:
# fork: true # fork and run in background
fork: false # fork and run in background
#security:
# authorization: enabled
在这个配置中:
storage.dbPath
指定了 MongoDB 存储其数据文件的目录。systemLog.destination
和systemLog.path
设置了日志文件的输出位置。net.port
指定了 MongoDB 监听的端口号。processManagement.fork
设置为true
,这样mongod
会在后台作为守护进程运行。
请注意,确保指定的日志目录(在这个例子中是 /var/log/mongodb/
)和数据目录(/data/db
)存在并且 MongoDB 进程有权限写入这些目录。
9.3.创建数据目录和日志目录并设置适当的权限:
groupadd mongodb
useradd -r -g mongodb -s /usr/sbin/nologin mongodb
usermod -aG mongodb linaro
mkdir -p /var/log/mongodb
chown -R mongodb:mongodb /var/log/mongodb
sudo chmod 755 /var/log/mongodb
mkdir -p /var/lib/mongo
chown -R mongodb:mongodb /var/lib/mongo
sudo chmod 755 /var/lib/mongo
sudo touch /var/log/mongodb/mongod.log
sudo chown mongodb:mongodb /var/log/mongodb/mongod.log
在这个命令中,mongodb
是运行 MongoDB 服务的用户,linaro
用户也可以执行。
9.4.使用配置文件启动 mongod
:
一旦创建了配置文件并设置了所需的选项,就可以使用 --config
参数启动 mongod
了:
cd /data/mongodb_build_4_0/mongo
./mongod --config /etc/mongod.conf
现在,当启动 mongod
时,它将使用在 mongod.conf
文件中指定的配置选项。如果一切正常,应该能够在指定的日志文件中看到 MongoDB 的日志输出,并且数据将被存储在指定的数据目录中。
如果没有遇到任何错误消息,并且希望确认 MongoDB 是否正在运行,可以尝试使用以下命令:
ps aux | grep mongod
另外,还可以尝试连接到 MongoDB 服务器来验证其是否正在监听端口:
mongo --host localhost --port 27017
退出mongo
exit
可选。为了避免必须指定MongoDB二进制文件的路径,可以将这些二进制文件复制到一个列在PATH变量中的目录,例如/usr/local/bin:
sudo cp /data/mongodb_build_4_0/mongo/mongod /usr/local/bin/
sudo cp /data/mongodb_build_4_0/mongo/mongo /usr/local/bin/
查看MongoDB数据库版本
mongod --version
输出结果
db version v4.0.28-7-g274f2fd
git version: 274f2fddd6a0f975a678e8a953e704f7be6dda14
OpenSSL version: OpenSSL 1.1.1f 31 Mar 2020
allocator: tcmalloc
modules: none
build environment:
distarch: aarch64
target_arch: aarch64
10.交叉编译可能遇到的问题
10.1.Couldn’t find OpenSSL crypto.h header and library
Couldn't find OpenSSL crypto.h header and library
See /data/mongo/build/scons/config.log for details
缺失aarch64平台的openssl文件和指定参数。
在进行交叉编译时,编译器无法找到与目标平台(aarch64)相匹配的 OpenSSL 头文件和库文件,这就导致了编译失败。交叉编译openssl aarch64版本即可。
参考交叉编译openssl-1.1.1f章节
10.2.Cannot find system library ‘lzma’ required for use with libunwin
Checking for C library lzma… no
Cannot find system library ‘lzma’ required for use with libunwin
# 配置lzma动态库。从SE5盒子上查找so库移植到docker上
/bin/ld.gold -llzma --verbose
移植SE5盒子路径:
/data/lzma-aarch64/lib
参考准备lzma和curl头文件和共享库
10.3.Could not find <curl/curl.h> and curl lib
Checking for curl_global_init(0) in C library curl… no
Could not find <curl/curl.h> and curl lib
Compiling build/scons/opt/sconf_temp/conftest_61.o
build/scons/opt/sconf_temp/conftest_61.c:3:23: fatal error: curl/curl.h: No such file or directory
#include “curl/curl.h”
^
compilation terminated.
scons: Configure: no
直接将 arm64 系统上已安装的 libcurl 库文件复制到 x86 编译主机上,然后在编译时指定这个路径,就可以成功链接到 curl 库了
查找头文件路径:
头文件通常安装在 /usr/include
或 /usr/local/include
下,具体取决于库的安装方式和版本。对于 libcurl4-openssl-dev
,使用以下命令来查找其安装的头文件:
dpkg -L libcurl4-openssl-dev | grep include
输出结果
/usr/include
/usr/include/aarch64-linux-gnu
/usr/include/aarch64-linux-gnu/curl
/usr/include/aarch64-linux-gnu/curl/curl.h
/usr/include/aarch64-linux-gnu/curl/curlver.h
/usr/include/aarch64-linux-gnu/curl/easy.h
/usr/include/aarch64-linux-gnu/curl/mprintf.h
/usr/include/aarch64-linux-gnu/curl/multi.h
/usr/include/aarch64-linux-gnu/curl/stdcheaders.h
/usr/include/aarch64-linux-gnu/curl/system.h
/usr/include/aarch64-linux-gnu/curl/typecheck-gcc.h
/usr/include/aarch64-linux-gnu/curl/urlapi.h
头文件安装在 /usr/include/aarch64-linux-gnu/curl
查找库文件路径:
库文件(.so
或 .a
文件)通常安装在 /usr/lib
或 /usr/local/lib
下,或者在特定于架构的目录中,如 /usr/lib/arm-linux-gnueabihf/
(对于 armhf)或 /usr/lib/aarch64-linux-gnu/
(对于 arm64)。对于 libcurl4-openssl-dev
,使用以下命令来查找其安装的库文件:
dpkg -L libcurl4-openssl-dev | grep lib
输出结果
/usr/lib
/usr/lib/aarch64-linux-gnu
/usr/lib/aarch64-linux-gnu/libcurl.a
/usr/lib/aarch64-linux-gnu/libcurl.la
/usr/lib/aarch64-linux-gnu/pkgconfig
/usr/lib/aarch64-linux-gnu/pkgconfig/libcurl.pc
/usr/share/aclocal/libcurl.m4
/usr/share/doc/libcurl4-openssl-dev
/usr/share/doc/libcurl4-openssl-dev/copyright
/usr/lib/aarch64-linux-gnu/libcurl.so
/usr/share/doc/libcurl4-openssl-dev/NEWS.Debian.gz
/usr/share/doc/libcurl4-openssl-dev/changelog.Debian.gz
库文件安装在 /usr/lib/aarch64-linux-gnu
目录下,主要文件是 libcurl.so
将这些文件复制到 x86 编译主机的某个路径,比如 /data/aarch64-curl
# 在x86的docker上
mkdir -p ~/my-ubuntu-data/aarch64-curl/include
mkdir -p ~/my-ubuntu-data/aarch64-curl/lib
# 在SE5的ARM64盒子上
scp -r /usr/include/aarch64-linux-gnu/curl user_name@host_name:~/my-ubuntu-data/aarch64-curl/include
scp -r /usr/lib/aarch64-linux-gnu/libcurl.so user_name@host_name:~/my-ubuntu-data/aarch64-curl/lib
10.4.非法指令 Illegal instruction
降低MongoDB数据库版本4.4到数据库4.0和降低编译器版本gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu到低版本gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu编译即可。
Illegal instruction
10.5.权限问题 Failed to open “/var/log/mongodb/mongod.log”
2024-04-02T15:38:30.049+0800 F CONTROL [main] Failed global initialization: FileNotOpen: Failed to open "/var/log/mongodb/mongod.log"
- 修改
/var/log/mongodb/
和/var/lib/mongo/
目录的权限:
sudo chown -R linaro:mongodb /var/log/mongodb
sudo chown -R linaro:mongodb /var/lib/mongo
- 设置目录和文件的权限,以便
linaro
用户具有所有权限:
sudo chmod -R 777 /var/log/mongodb
sudo chmod -R 777 /var/lib/mongo
11.Java安装
- 从Windows系统上传Java jdk文件。或者官方下载jdk文件
scp .\jdk-8u401-linux-aarch64.tar.gz linaro@192.168.96.50:/data
- 将下载的压缩包上传到服务器上,并解压:
tar -xvzf jdk-8u401-linux-aarch64.tar.gz
- 将解压后的文件夹移动到合适的目录,比如
/usr/local/
:
sudo mv jdk1.8.0_401 /usr/local/
- 设置 JAVA_HOME 环境变量:
sudo nano /etc/profile.d/javaenv.sh
在打开的文件中添加:
export JAVA_HOME=/usr/local/jdk1.8.0_401
export PATH=$PATH:$JAVA_HOME/bin
- 使环境变量生效:
source /etc/profile.d/javaenv.sh
- 验证安装:
java -version
javac -version
12.Nginx安装
- 安装所需依赖:
sudo apt update
sudo apt install nginx
- 启动 Nginx 服务:
sudo systemctl start nginx
- 验证 Nginx 安装并查看状态:
sudo systemctl status nginx
- 如果防火墙已启用,需要允许 HTTP 和 HTTPS 流量:
sudo ufw allow 'Nginx HTTP'
sudo ufw allow 'Nginx HTTPS'
13.可选。配置libprotobuf环境变量
sudo vi /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/iristar/boxApp/dll:/system/lib:/system/usr/lib/aarch64-linux-gnu
export LD_LIBRARY_PATH=/usr/local/aarch64-linux-gnu:$LD_LIBRARY_PATH
source /etc/profile
-
在Linux中配置环境变量,有多种方法可以实现,其中包括但不限于以下几种方式:
- 临时配置:使用
export
命令可以直接在当前终端会话中设置环境变量。例如,要设置LD_LIBRARY_PATH
,可以执行:
- 临时配置:使用
export LD_LIBRARY_PATH="/usr/local/aarch64-linux-gnu:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH=/usr/local/aarch64-linux-gnu:$LD_LIBRARY_PATH
这种方式设置的环境变量只会在当前终端会话中有效,当关闭终端或启动新的终端会话时,这些设置将会失效。
- 永久配置(对所有用户生效):编辑全局的环境变量配置文件,如
/etc/profile
或/etc/environment
,将环境变量设置添加到其中。例如,在/etc/profile
文件的末尾添加:
export LD_LIBRARY_PATH="/usr/local/aarch64-linux-gnu:$LD_LIBRARY_PATH"
source /etc/profile
修改完成后,需要运行source /etc/profile
命令,使新的配置立即生效。这种方式的设置会对所有用户都有效,并且会在每次用户登录时自动应用。
- 永久配置(对单一用户生效):对于单个用户,也可以选择编辑其个人目录下的
.bashrc
、.bash_profile
或.profile
文件,将环境变量设置添加到其中。同样,在文件的末尾添加:
export LD_LIBRARY_PATH="/usr/local/aarch64-linux-gnu:$LD_LIBRARY_PATH"
source ~/.bashrc
然后,运行source ~/.bashrc
(或相应的配置文件)使新的配置立即生效。这种方式的设置仅对当前用户有效。
注意,当修改配置文件来设置环境变量时,需要确保使用正确的文本编辑器,如vi
、nano
等,并且要注意语法正确,避免因为误操作导致系统配置出错。
此外,LD_LIBRARY_PATH
环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。在配置这个环境变量时,需要确保路径的正确性,并且注意不同路径之间使用冒号(:
)分隔。