玩树莓派需要什么基础_树莓派怎么使用

DevOps (58) 2023-09-18 17:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说玩树莓派需要什么基础_树莓派怎么使用,希望能够帮助你!!!。

Raspberry Pi搭建开发基础设施

Debian一般同时存在三个版本,稳定版、测试版、不稳定版,2019年7月前稳定版名字为stretch,测试版名字为buster。
在Debian官网,我们可以看到对应的支持ARM硬件的版本分为armel、armhf、arm64,其分别对应不支持FPU的旧32位ARM、实现了ARMv7的32位架构、ARMv8 64位架构。
Raspbian基于Debian稳定版。

lscpu命令可以看到cpu架构为armv7l,ARM官网显示ARMv7架构都是32位,ARMv8除M系列支持32位外,都为64位。

手动升级stretch至buster

sudo sed -i 's/stretch/buster/g' /etc/apt/sources.list /etc/apt/sources.list.d/raspi.list
sudo apt update
sudo apt dist-upgrade
#如果安装postgres,需重新构建索引
#sudo -u postgres reindexdb --all

SSH配置

  • 基础设置
#禁用/添加端口 
sudo vi /etc/ssh/sshd_config 
#Port 22 
Port 1046 
#禁用密码登入 
PasswordAuthentication no 
#允许公钥登入 
PubkeyAuthentication yes 
#生成公钥 
#比如利用XShell的XAgent生成公钥并导出成id_rsa.pub。或直接使用命令 ssh-keygen -f id_rsa 
#添加公钥 
cat id_rsa.pub>>~/.ssh/authorized_keys2 
#重启ssh服务 
sudo systemctl restart ssh
  • 内网穿透

文明上网、科学上网。

#将本地端口与公网关联,公网子域名在连接成功后显示 
ssh -R 80:localhost:80 serveo.net 
# 使用自定义域名,需要将所拥有的域名添加一条A RECORD,ip指向serveo.net的ip;同时添加一条TXT RECORD,形式为authfp={sha256} 
# 公钥摘要通过以下命令获取(输出可能以密钥长度开头,中间是摘要,结尾是注释) 
ssh-keygen -l 
# 配置好后,输入如下命令即可 
ssh -R iamwhatiam.ml:80:localhost:80 serveo.net

基础软件

  • JDK
sudo apt-get install oracle-java8-jdk 
java -version
  • Git
sudo apt-get install git-core 
#验证安装是否成功 
git --version
  • Nginx
    • 安装
sudo apt-get install nginx 
#开机自启动 
sudo systemctl enable nginx
    • Let's Encrypt
      ACME协议要求域名所有者以以下两种方式提供所有者证明:
      • 1. 域名下存在特定的TXT RECORD。
      • 2. 域名下对请求'/.well-known/acme-challenge/$TOKEN'响应正确。
# acme或certbot都可以,但需要域名与IP绑定 
#sudo vi /etc/nginx/site-available/default,将server_name修改成自己的域名(比如iamwhatiam.ml) 
#sudo link /etc/nginx/sites-available/iamwhatiam.ml /etc/nginx/sites-enabled/iamwhatiam.ml 
#cd ~ 
curl https://get.acme.sh | sh 
sudo apt-get install socat 
# 1. dns-01(不能自动续期,不支持设置TXT Record的,可以将域名转到其它域名服务器,如dns.he.net) 
# 根据提示完成以下三步: 
#     a. 执行预签发命令,标准输出能看到TXT VALUE 
acme.sh --issue --dns -d '*.iamwhatiam.ml' --yes-I-know-dns-manual-mode-enough-go-ahead-please 
#     b. 添加一条TXT Record(某有些DNS服务商要求text必须有双引号) 
name: _acme-challenge, text: $TXT 
#     c. 验证 
acme.sh --renew -d '*.iamwhatiam.ml' --yes-I-know-dns-manual-mode-enough-go-ahead-please 
# 域名别名验证: 
#     i. 添加一条CNAME Record 
# source: _acme-challenge, destination: _acme-challenge.unimportant.domain 
#     ii. 预签发 
# # acme.sh --issue --dns -d '*.iamwhatiam.ml' --challenge-alias unimporttant.domain --yes-I-know-dns-manual-mode-enough-go-ahead-please 
#     iii. 验证 
# acme.sh --renew -d '*.iamwhatiam.ml' --challenge-alias unimporttant.domain --yes-I-know-dns-manual-mode-enough-go-ahead-please 
# # 2. http-01 
# nginx和Let's Encryptt客户端在同一台服务器 
# ./.acme.sh/acme.sh --issue -d iamwhatiam.ml --nginx 
# Let's Encryptt客户端和网站不在同一台服务器: 
# log查找keyauthorization,"."将其分成token和thumbprint,公钥指纹通常不变 
# 注册heroku,clone https://github.com/iMinusMinus/acme.git 并部署 
# 请求{domain}/lock?thumbprint=?,绑定thumbprint(拥有外网访问权限的主机跳过此步骤) 
# acme.sh --issue --standalone --httpport 8080 --log -d iamwhatiam.ml 
# # 启用nginx HTTPS,修改配置文件(假设为/etc/nginx/site-available/iamwhatiam.ml) 
# 修改server部分 
# listen 443; #添加监听端口 
# ssl on; #启用SSL 
# ssl_certificate ~/.acme.sh/acme.sh/*.iamwhatiam.ml/*.iamwhatiam.ml.cer; 
# ssl_certificate_key ~/.acme.sh/acme.sh/*.iamwhatiam.ml/*.iamwhatiam.ml.key;
  • PostgreSQL
    • 安装
sudo apt-get install postgresql 
sudo -u postgres psql postgres 
#设置数据库系统用户名密码 
\password postgres 
#创建数据库 
CREATE DATABASE gogs WITH OWNER postgres; 
#退出 
\q
    • 修改数据目录
#针对没有在安装前设置PGDATA环境变量,即
export PGDATA=/srv/pg 
sudo systemctl stop postgresql 
#mkdir -p /mnt/nas/data/postgresql/11/main 
sudo vi /etc/postgresql/11/main/postgresql.conf 
#data_directory = '/mnt/nas/data/postgresql/11/man' 
#复制目录,并保持原先的权限 
sudo rsync -av /var/lib/postgresql /mnt/nas/data 
sudo systemctl start postgresql 
ps -aux|grep postgres 
#确认启动成功后可删除原数据目录 
sudo rm -rf /var/lib/postgresql/11/main

源代码管理

  • Gitlab

Gitlab启动时需要postgres、Redis、NodeJS、非常占用内存,不要随意开启!(官方内存要求4G,推荐8G)

#为GitLab创建git用户 
sudo adduser --disabled-login --gecos 'GitLab' git 
wget --content-disposition https://packages.gitlab.com/gitlab/raspberry-pi2/packages/raspbian/stretch/gitlab-ce_11.7.0-ce.0_armhf.deb/download.deb 
#如果下载失败,建议安装aria2再尝试 
sudo dpkg -i /home/pi/Downloads/gitlab-ce_11.7.0-ce.0_armhf.deb 
sudo gitlab-ctl reconfigure 
#停止gitlab 
#sudo gitlab-ctl service-list 
#sudo gitlab-ctl stop service 
sudo gitlab-ctl stop 
#停止开机自启动 
sudo systemctl disable gitlab-runsvdir
  • Gogs

Gitlab功能完善,但对于小小的树莓派来说,要求太高。经常会发生假死。所以有必要使用一个更轻量的解决方案。

    • 安装
aria2c https://dl.gogs.io/0.11.86/gogs_0.11.86_raspi2_armv6.zip -d /home/pi 
unzip gogs_0.11.86_raspi2_armv6.zip -d /home/pi 
gogs/gogs web 
#启动正常后用浏览器配置,或直接修改配置文件 
mkdir -p ~/gogs/custom/conf 
touch ~/gogs/custom/conf/app.ini 
chmod 646 ~/gogs/custom/conf/app.ini 
vi gogs/custom/conf/app.ini 
#RUN_USER = pi 
[repository] 
#ROOT=/home/pi/gogs/git-repository 
[server] 
#DOMAIN=vcs.iamwhatiam.ml 
#HTTP_PORT=3000 
#ROOT_URL=http://vcs.iamwhatiam.ml/ 
#SSH_PORT=1046 
#使用pi用户并安装成服务 
sudo cp ~/gogs/scripts/systemd/gogs.service /etc/systemd/system 
sudo vi /etc/systemd/system/gogs.service 
#User=pi 
#Group=pi 
#WorkingDirectory=/home/pi/gogs 
#ExecStart=/home/pi/gogs/gogs web --config /home/pi/gogs/custom/conf/app.ini 
#Environment=USER=pi HOME=/home/pi 
sudo systemctl enable gogs 
sudo systemctl start gogs
    • 设置虚拟主机
sudo sh -c 'echo "      server { 
    listen 80; 
    server_name vcs.iamwhatiam.ml; 
    client_max_body_size 10M; 
    location / { 
        proxy_pass http://127.0.0.1:3000/; 
        proxy_set_header Host \$host; 
        proxy_set_header X-Real-IP \$remote_addr; 
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; 
   } 
}">/etc/nginx/sites-available/vcs.iamwhatiam.ml' 
#路由器添加域名映射或访问机hosts添加映射 
#使配置生效 
sudo link /etc/nginx/sites-available/vcs.iamwhatiam.ml /etc/nginx/sites-enabled/vcs.iamwhatiam.ml 
sudo nginx -s reload

依赖管理——Nexus

  1. 安装 & 启动配置
aria2c https://download.sonatype.com/nexus/3/latest-unix.tar.gz -d /home/pi 
tar -zxvf nexus*.tar.gz --directory /home/pi 
mv /home/pi/nexus-3.15.1-01 /opt/nexus 
#修改JVM堆大小 
vi /opt/nexus/bin/nexus.vmoptions 
#默认-Xms1200M -Xmx1200M -XX:MaxDirectMemorySize=2G 
#树莓派本身只有1G内存,还要供系统及其它应用占用,调整成原值1/4。(可能发生OOM导致无法启动成功) 
/opt/nexus/bin/nexus start

安装目录默认为"nexus-"开头,带版本的目录,记为"$install-dir"。
数据目录默认为"$install-dir/../sonatype-work/nexus3",记为"$data-dir"。

sudo vi $install-dir/bin/nexus.vmoptions 
#修改以下配置 
-Dkaraf.data=/mnt/nas/data/nexus3 
-XX:LogFile=/var/log/nexus3/jvm.log

访问8081端口即可。

  1. 设置反向代理
#设置虚拟主机 
sudo sh -c 'echo "      server { 
    listen 80; 
    server_name repo.iamwhatiam.ml; 
    client_max_body_size 10M; 
    location / { 
        proxy_pass http://127.0.0.1:8081/;    
        proxy_set_header Host \$host; 
        proxy_set_header X-Real-IP \$remote_addr; 
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; 
    } 
}">/etc/nginx/sites-available/repo.iamwhatiam.ml' 
#使配置生效 
sudo link /etc/nginx/sites-available/repo.iamwhatiam.ml /etc/nginx/sites-enabled/repo.iamwhatiam.ml 
sudo nginx -s reload

向访问机器的hosts加一条记录(C:\Windows\System32\drivers\etc\hosts)

192.168.1.9 repo.iamwhatiam.ml

  1. 配置Nexus

Nexus OSS默认用户名为admin,默认密码为admin123。

Maven有三种版本策略:Release、SNAPSHOT、Mix,其中SNAPSHOT要求在pom.xml的版本必须以"-SNAPSHOT"结尾。
Nexus有三种仓库类型:proxy、hosted、group。Nexus有一个类型为proxy的默认仓库,即maven-central。 它类似于一个缓存,请求先抵达maven-central,如果jar存在,直接返回。 如果不存在,则请求远程的maven中心仓库,将jar保存到本地再返回。
Nexus有两个类型为hosted的默认仓库:maven-release、maven-snapshot,用于存放第三方非公开内容,或私有内容。
Nexus有一个类型为group的默认仓库:maven-public,它类似于一个组合,把maven-central、maven-release、maven-snapshot组合成一个虚拟仓库供使用。

我们先创建Blob Stores(或使用默认的)。然后可以创建hosted repository(或使用maven-release、maven-snapshot)。 接着创建角色,比如,一个dev角色,用于上传snapshot包,选择对应的repository的所有权限。 最后,创建用户,用于隔离权限。一个dev用户,用于上传snapshot,选择仅可上传snapshot的角色。一个ops用户,选择可上传release的角色。

  1. 配置Maven
    • setting.xml

添加server节点,以及节点下配置正确的仓库、用户名和密码。同时,修改mirror节点,用于代理maven central。
在profile下配置repository、pluginRepository,默认激活我们自己的仓库所在profile。

    • pom.xml

添加distributionManagement节点,id信息需要和setting.xml的server节点id信息一致。

质量管理——sonar

  1. 下载安装
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-6.7.7.zip 
unzip sonarqube-6.7.7.zip -d /home/pi
  1. 制作wrapper

SonarQube提供的启动命令只支持x86/x64架构,无法直接在树莓派启动!

wget https://download.tanukisoftware.com/wrapper/3.5.40/wrapper-linux-armhf-32-3.5.40.tar.gz 
tar -zxvf wrapper-linux-armhf-32-3.5.40.tar.gz 
cp -r ~/sonarqube-6.7.7/bin/linux-x86-32/ ~/sonarqube-6.7.7/bin/linux-armhf 
cp ~/wrapper-linux-armhf-32-3.5.40/bin/wrapper ~/sonarqube-6.7.7/bin/linux-armhf/wrapper 
cp ~/wrapper-linux-armhf-32-3.5.40/lib/libwrapper.so ~/sonarqube-6.7.7/bin/linux-armhf/lib/libwrapper.so 
mv ~/sonarqube-6.7.7/lib/jsw/wrapper-3.2.3.jar ~/sonarqube-6.7.7/lib/jsw/wrapper-3.2.3.jar.bak 
cp ~/wrapper-linux-armhf-32-3.5.40/lib/wrapper.jar ~/sonarqube-6.7.7/lib/jsw/wrapper-3.5.40.jar
  1. 配置 & 启动
#SonarQube文档里提到需要2G内存,但树莓派本身不能提供,尝试修改启动参数 
sudo sh -c 'echo "sonar.web.javaOpts=-Xmx256m -Xms128m \
-XX:+HeapDumpOnOutOfMemoryError \
sonar.ce.javaOpts=-Xmx256m -Xms128m \
-XX:+HeapDumpOnOutOfMemoryError \
sonar.search.javaOpts=-Xms256m \ 
-Xmx256m \ 
-XX:+HeapDumpOnOutOfMemoryError">>sonarqube-6.7.7/conf/sonar.properties' 
#如果使用数据库,如pg,先执行创建用户、创建数据库 
#CREATE USER sonarqube WITH PASSWORD 'mypassword'; 
#CREATE DATABASE sonar; 
#GRANT ALL PRIVILEGES ON DATABASE sonar TO sonarqube; 
#ALTER USER sonarqube SET search_path to sonar 
#然后在sonar.properties添加如下参数 
#sonar.jdbc.username=sonarqube 
#sonar.jdbc.password=mypassword 
#sonar.jdbc.url=jdbc:postgresql://localhost/sonar 
sonarqube-6.7.7/bin/linux-armhf/sonar.sh console

CI/CD——Jenkins

  1. 安装Maven
sudo apt-get install -y maven
  1. 安装Jenkins
#http://pkg.jenkins-ci.org/debian/ 
#jenkins 2.54需要java8,jenkins 1.612需要java7 
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add - 
sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list' 
#或者直接下载war:https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.150.2/jenkins.war 
#java -jar jenkins.war --httpPort=8080
  1. 配置Jenkins
    • Unlock Jenkins
#Jenkins采用Let‘s Encrypt颁发的证书,默认不被jdk信任,会在启动时或更新插件时提示“unable to find valid certification path to requested target” 
#可以先用浏览器导出证书(base64格式)。 
sudo keytool -import -alias jenkins -keystore /usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/security/cacerts -file /home/pi/jenkins.cer 
#jdk默认密码:changeit 
keytool -list -keystore /usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/security/cacerts | grep jenkins 
#在http://localhost:8080输入如下命令的输出 
cat /home/pi/.jenkins/secrets/initialAdminPassword 
#然后创建用户并设置密码:hudson/jenkins
    • 全局配置
#Jenkins web界面设置JDK、Maven、Git、Sonar的名称和路径 
#获取java命令位置 
which java 
#如果是链接,一直跟踪下去 
ls -alh /usr/bin

如图:

玩树莓派需要什么基础_树莓派怎么使用_https://bianchenghao6.com/blog_DevOps_第1张

    • 安装插件

Maven Integration Plugin: 用于创建maven风格的项目
Timestamper:用于执行任务时在控制台显示时间
OWASP Dependency-Check Plugin: 用于扫描依赖的jar是否存在安全漏洞
SonarQube Scanner for Jenkins:SonarQube集成插件
Warnings Next Generation Plugin:显示静态分析报告(含checkstyle, pmd, findbugs/spotbugs),也可以修改构建结果状态
JaCoCo plugin:显示java代码覆盖率报告,也可以修改构建结果状态

容器化——Docker

Docker对于运维自动化以及环境搭建可谓是神器,但树莓派本身孱弱的性能不支持我们大量使用Docker容器运行应用。

```sh
sudo curl -sSL https://get.docker.com | sh
#安装过程较慢,请耐心等待
#将当前用户加入docker组
sudo usermod -aG docker pi
```

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

发表回复