Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说玩树莓派需要什么基础_树莓派怎么使用,希望能够帮助你!!!。
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位。
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
#禁用/添加端口
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
sudo apt-get install oracle-java8-jdk
java -version
sudo apt-get install git-core
#验证安装是否成功
git --version
sudo apt-get install nginx
#开机自启动
sudo systemctl enable nginx
# 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;
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启动时需要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
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
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端口即可。
#设置虚拟主机
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
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的角色。
添加server节点,以及节点下配置正确的仓库、用户名和密码。同时,修改mirror节点,用于代理maven central。
在profile下配置repository、pluginRepository,默认激活我们自己的仓库所在profile。
添加distributionManagement节点,id信息需要和setting.xml的server节点id信息一致。
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-6.7.7.zip
unzip sonarqube-6.7.7.zip -d /home/pi
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
#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
sudo apt-get install -y maven
#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
#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
如图:
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容器运行应用。
```sh
sudo curl -sSL https://get.docker.com | sh
#安装过程较慢,请耐心等待
#将当前用户加入docker组
sudo usermod -aG docker pi
```
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。