文章目录
- 1.安装JDK
- 2.mysql注意事项
- 3.redis注意事项
- 4.nginx注意事项
- 5.开机自启
1.安装JDK
使用tar -zxvf解压不支持↓
用zip来解压↓
whichgzipgzip-djdk-15.0.2_linux-aarch64_bin.tar.gztar-xvfjdk-15.0.2_linux-aarch64_bin.tar2.mysql注意事项
mysql安装也一样,但是因为没有groupadd命令,不能执行groupadd mysql和useradd -r -g mysql -s /bin/false mysql,执行以下命令,注意要先检查下UID 和 GID是否存在↓
cat/etc/groupecho"mysql:x:20:">>/etc/groupcat/etc/passwdecho"mysql:x:20:20:MySQL user:/nonexistent:/bin/false">>/etc/passwdchown-Rmysql:mysql /userdata/local/mysql注意要下载或从其它arm架构系统获取这两个文件放入/usr/lib目录再执行./mysqld --initialize --console
因为是精简的系统,没有libaio文件,执行初始化会报错./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory↓
启动服务↓
/userdata/local/mysql/support-files/mysql.server startchmod-R777你的mysql目录同样也要复制libtinfo.so到/usr/lib目录再执行./mysql -u root -p,否则会报错↓
别忘了my.cnf配置文件↓
完成后执行systemctl enable mysqld也不行的,Buildroot 默认没有 systemd↓
执行vi etc/my.cnf修改配置↓
[mysqld]# 设置3306端口port=3306# 设置mysql的安装目录basedir=/userdata/local/mysql# 设置mysql数据库的数据的存放目录datadir=/userdata/local/mysql/mysqldb# 允许最大连接数max_connections=10000# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统max_connect_errors=10# 服务端使用的字符集默认为utf8mb4character-set-server=utf8mb4# 创建新表时将使用的默认存储引擎default-storage-engine=INNODB# 默认使用“mysql_native_password”插件认证default_authentication_plugin=mysql_native_password# 分组拼接长度group_concat_max_len=10240000[mysql]# 设置mysql客户端默认字符集default-character-set=utf8[client]# 设置mysql客户端连接服务端时默认使用的端口port=3306default-character-set=utf8执行vi /etc/init.d/mysql进行配置↓
#!/bin/shMYSQLD=/userdata/local/mysql/bin/mysqldMYSQL_CONF=/etc/my.cnfMYSQL_PID=/var/run/mysqld.pidauthentication_policy=mysql_native_passwordcase"$1"instart)echo"Starting MySQL..."$MYSQLD--defaults-file=$MYSQL_CONF--user=root&;;stop)echo"Stopping MySQL..."if[-f$MYSQL_PID];thenkill$(cat$MYSQL_PID)rm-f$MYSQL_PIDelsepkillmysqldfi;;restart)$0stopsleep1$0start;;*)echo"Usage:$0{start|stop|restart}"exit1;;esacexit0保存后执行↓
chmod+x /etc/init.d/mysql#如果目录不存在则先新建此目录mkdir-p/etc/rc3.dln-s/etc/init.d/mysql /etc/rc3.d/S98mysql /etc/init.d/mysql start /etc/init.d/mysql stop /etc/init.d/mysql restart3.redis注意事项
因为嵌入式系统没有GCC,安装redis会报错。可以在其它系统交叉编译后拷贝过来。我这里采用的是在一台centos8虚拟机编译。进入官网搜索GCC查看相关文章↓
下载地址https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/
如图,解压gcc和redis压缩包到当前目录,分别命名为gcc和reids↓
#设置 PATH 环境变量exportPATH=$PATH:/home/temp/gcc/bin# 验证 GCC 是否可用,正常输出:aarch64-linux-gnu-gcc (Linaro GCC 7.5-2019.12) 7.5.0aarch64-linux-gnu-gcc--versioncd/home/temp/redis#单线程编译以减少内存占用make-j1#安装到cross-redis目录makePREFIX=/home/temp/cross-redisinstall#检查生成的二进制文件是否为 AArch64 架构,正常输出:/home/temp/cross-redis/bin/redis-server: ELF 64-bit LSB executable, ARM aarch64, ...file/home/temp/cross-redis/bin/redis-server编译好后传输至飞凌↓
不要忘了配置文件
执行vi etc/redis.conf修改↓
daemonizeyesdir/userdata/redis-data logfile /userdata/redis-data/redis.log保存后执行vi /etc/init.d/redis加入以下配置↓
#!/bin/shREDIS_SERVER=/userdata/local/redis/bin/redis-serverREDIS_CONF=/etc/redis.confREDIS_PID=/var/run/redis.pidcase"$1"instart)echo"Starting Redis..."$REDIS_SERVER$REDIS_CONF;;stop)echo"Stopping Redis..."if[-f$REDIS_PID];thenkill$(cat$REDIS_PID)rm-f$REDIS_PIDelsepkillredis-serverfi;;restart)$0stopsleep1$0start;;*)echo"Usage:$0{start|stop|restart}"exit1;;esacexit0保存后↓
chmod+x /etc/init.d/redisln-s/etc/init.d/redis /etc/rc3.d/S99redis /etc/init.d/redis start /etc/init.d/redis stop /etc/init.d/redis restartpsaux|grepredis-server4.nginx注意事项
接下来还是在centos编译nginx。nginx需要zlib和pcre支持,先下载压缩包解压。我这里不仅有源码,还有带-aarch64的目录,代表是已经独立 编译过的
我采用的是动态编译↓
# 设置过临时变量的可以不用设置,但是如果是新启用会话得重新设置,包括export PATH=$PATH:/home/temp/gcc/binexportTOOLCHAIN=/home/temp/gccexportPATH=$TOOLCHAIN/bin:$PATHexportCC=$TOOLCHAIN/bin/aarch64-linux-gnu-gccexportLD=$TOOLCHAIN/bin/aarch64-linux-gnu-ldexportAR=$TOOLCHAIN/bin/aarch64-linux-gnu-arexportAS=$TOOLCHAIN/bin/aarch64-linux-gnu-asexportCXX=aarch64-linux-gnu-g++ ./configure--prefix=/home/temp/nginx-aarch64 --with-ld-opt='-static-libgcc -static-libstdc++'--with-pcre=/home/temp/pcre-8.45 --with-zlib=/home/temp/zlibmake-j1&&makeinstall这时候编译会出错↓
编译完后执行/home/temp/nginx-aarch64/sbin/nginx -v验证↓
如果是静态编译,先独立编译zlib和pcre↓
#编译zlib,pcre照着来重复遍就行,注意目录cdzlib/ ./configure--prefix=/home/temp/zlib-aarch64make-j1makeinstall然后再编译nginx↓
exportLD=/home/temp/gcc/bin/aarch64-linux-gnu-ldexportAR=/home/temp/gcc/bin/aarch64-linux-gnu-arexportAS=/home/temp/gcc/bin/aarch64-linux-gnu-asexportCXX=aarch64-linux-gnu-g++exportCFLAGS="-O2 -I/home/temp/pcre-aarch64/include -I/home/temp/zlib-aarch64/include"exportLDFLAGS="-static -L/home/temp/pcre-aarch64/lib -L/home/temp/zlib-aarch64/lib -static-libgcc -static-libstdc++"./configure\--prefix=/home/temp/nginx-aarch64\--with-cc="$CC"\--with-cc-opt="$CFLAGS"\--with-ld-opt="$LDFLAGS"\--without-pcre\--without-zlib\make-j1&&makeinstall如果是编译opentesty,必须有openssl的源码文件↓
编译openresty↓
cd/home/temp/openresty ./configure--prefix=/home/temp/openresty-aarch64 --with-ld-opt='-static-libgcc -static-libstdc++'--with-pcre=/home/temp/pcre-8.45 --with-zlib=/home/temp/zlib --with-openssl=/home/temp/openssl --with-http_gunzip_module --with-http_gzip_static_modulemake-j1&&makeinstall/home/temp/openresty-aarch64/nginx/sbin/nginx-v
解压到飞凌,添加用户和组并授权
echo"nginx:x:22:">>/etc/groupecho"nginx:x:22:22:Nginx user:/nonexistent:/bin/false">>/etc/passwdchown-Rnginx:nginx /userdata/local/nginx-aarch64chmod-R755/userdata/local/nginx-aarch64执行vi /etc/init.d/nginx创建启动脚本
#!/bin/shNGINX_BIN=/userdata/local/nginx-aarch64/sbin/nginxNGINX_CONF=/userdata/local/nginx-aarch64/conf/nginx.confNGINX_PID=/userdata/local/nginx-aarch64/logs/nginx.pidcase"$1"instart)echo"Starting nginx..."$NGINX_BIN-c$NGINX_CONFif[$?-eq0];thenecho"Nginx started."elseecho"Failed to start nginx."exit1fi;;stop)echo"Stopping nginx..."if[-f$NGINX_PID];thenkill-QUIT`cat$NGINX_PID`echo"Nginx stopped."elseecho"Nginx is not running."fi;;restart)$0stopsleep1$0start;;reload)echo"Reloading nginx..."if[-f$NGINX_PID];thenkill-HUP`cat$NGINX_PID`echo"Nginx reloaded."elseecho"Nginx is not running."exit1fi;;*)echo"Usage:$0{start|stop|restart|reload}"exit1;;esacexit0创建保存后授权可执行chmod +x /etc/init.d/nginx,然后vi /etc/rc.local↓
/etc/init.d/nginx start保存后chmod +x /etc/rc.local
如果编译时的路径与现在的安装路径不致,执行
mkdir-p/home/makeln-s/userdata/local/nginx-aarch64 /home/make/nginx-aarch64测试
/etc/init.d/nginx start /etc/init.d/nginx stop /etc/init.d/nginx restart /etc/init.d/nginx reload5.开机自启
最后的rc.local配置如下↓
#!/bin/sh -e# 启动 redis/etc/init.d/redis start# 启动 mysql/etc/init.d/mysql start# 启动 nginx/etc/init.d/nginx startexit0设置了rc.local并不一定会开机自启。使用cat /etc/inittab查看 /etc/inittab 是否调用了 rc.local↓
你应该看到类似这一行↓
::sysinit:/etc/rc.local如果没有,你需要手动添加,一定要放在启动程序的最后一个↓
如果像这样随便放一个地方,会出现问题,因为系统环境还没初始化好↓
如果想查看日志,可以这样写↓
#!/bin/sh -eecho"rc.local begin">>/tmp/rc.local.log# 启动 redis/etc/init.d/redis start>>/tmp/rc.local.log2>&1# 启动 mysql/etc/init.d/mysql start>>/tmp/rc.local.log2>&1# 启动 nginx/etc/init.d/nginx start>>/tmp/rc.local.log2>&1exit0