引言
树莓派入手很久了,一直搁置在那也没怎么用,最近突发奇想就拿来重新刷了系统,遇到了很多问题,故简单地记录一下。
安装系统
本次选择了官方系统的Lite版,基于Debian,我使用的版本是2018年4月18日更新的,其他版本其实应该都大同小异,但据了解Lite版和Desktop版差别挺大的。还是给个传送门吧。刷入系统我选择的是官方推荐的ETCher,界面十分简约,功能也十分简约,就是专门用来干这个的,当然其他的刷入工具也是可以的。
开启ssh
其实这个系统默认就是有安装好ssh,只是默认没有开启而已。
启动ssh1
sudo /etc/init.d/ssh start
或者配置开机自启后再启动1
2sudo systemctl enable ssh
sudo systemctl start ssh
然后就可以用电脑通过ssh访问了
顺便记录一下,官方系统默认帐号是pi,默认密码是raspberry
ssh连接之前记得查看一下树莓派的ip地址1
ifconfig
我用路由器给我的树莓派绑定了固定ip地址,或者可以在树莓派里配置静态ip,具体方法不再赘述。
禁止密码登陆ssh
首先修改默认用户密码,以免被别人趁虚而入。1
passwd
然后建立.ssh目录上传公钥1
2
3
4cd ~
mkdir .ssh
cd .ssh
nano authorized_keys
然后粘贴公钥,Ctrl+O 保存,Ctrl+X 退出nano(使用其他编辑器比如vi也可以,我习惯用nano,后面的编辑都会用这个编辑器),然后退出shell尝试使用密钥登陆,如果能登陆成功,就可以禁止密码登陆了1
sudo nano /etc/ssh/sshd_config
找到PasswordAuthentication这一项1
#PasswordAuthentication yes
取消注释并改成no1
PasswordAuthentication no
然后保存退出,重启ssh服务1
sudo systemctl restart ssh
然后退出shell,再登陆时就只能用密钥登陆了
换源 or 代理?
树莓派的官方源在境外,国内访问会比较慢,网上的说法比较倾向于换源,这也确实是一个很不错的方法。但是在实际的使用中,一定要确认使用的源是否正确。我开始换了阿里的源,速度确实非常快,但是很多包安装不了,大部分报情况下显示,可能请求了一个不稳定版的软件并且缺少一些依赖,这种情况下无法自动安装依赖(正常情况下安装一个软件缺少依赖时会自动安装),网上可以通过列出所有的依赖然后依次安装的方法解决这个问题,但是我发现只要换回了官方源就不会有这个问题。同时国内的源跟官方源不匹配也是一个问题,有时候国内会更新的慢很多,所以在换源的时候一定要小心了。最后我还是决定使用代理的方式来解决速度慢的问题(理论上使用代理网络请求,请求同样是要出境,但经过实际测试使用代理就是会比正常访问快很多,我也没有具体研究原因)。
使用 shadowsocks-libev + privoxy 实现自由命令行代理
安装 shadowsocks-libev
1 | sudo apt install shadowsocks-libev |
配置文件在 /etc/shadowsocks-libev/config.json,填写好服务器的配置
配置登陆时自动启动
在 /etc/rc.local 后面 exit 0 前面添加一行:(会把日志文件输出到pi用户的用户根目录的ss.log)1
su pi -c "nohup ss-local > /home/pi/ss.log 2>&1 &"
安装 privoxy
现在虽然shadowsocks已经能够自动启动了,但是ss-local使用的是socks5代理,http协议是不能用它来代理的,所以需要一个名为privoxy的软件:1
sudo apt install privoxy
配置 privoxy 全局代理
1 | sudo nano /etc/privoxy/whitelist.action |
写入以下内容:1
2
3
4
5
6
7
8
9
10
11
12
13{{alias}}
# 代理(socks5)
socks5 = +forward-override{forward-socks5 127.0.0.1:1080 .}
# 直连
direct = +forward-override{forward .}
# 所有网站走代理
{socks5}
/
# 以下网站走直连
{direct}
.ip.cn
.chinaz.com
其中端口号要与ss-local一致,这里我使用了1080端口
然后把 actionsfile whitelist.action 添加到 /etc/privoxy/config 的末尾就完成了配置
最后重启privoxy并设置开机自启,看一下是否启动成功:1
2
3sudo systemctl enable privoxy
sudo systemctl start privoxy
sudo systemctl status privoxy
目前,只要配置了 http_proxy 和 https_proxy 环境变量就能使用代理了,但是一旦配置了这个环境变量,所有的请求都会代理,如果希望选择性的代理,可以使用 gfwlist 实现 pac 模式,关于这点,我并没有过多的了解。
编写 proxy 脚本实现自由代理
所谓自由代理就是希望代理的时候通过在命令前加上 proxy 关键字进行代理访问,不需要代理的请求不加这个关键字就行了,无需其他配置。建议把脚本放在 /usr/local/bin/proxy1
sudo nano /usr/local/bin/proxy
写入以下内容:1
2#!/bin/bash
http_proxy=http://127.0.0.1:8118 https_proxy=http://127.0.0.1:8118 $*
其中端口号要与 privoxy 的配置一致,默认是8118
然后赋予可执行权限:1
sudo chmod +x /usr/local/bin/proxy
至此,所有配置完成,重启后,需要代理的命令使用proxy前缀,比如:1
sudo proxy apt install git
修改默认交换文件的大小
1 | sudo nano /etc/dphys-swapfile |
修改其中的1
CONF_SWAPSIZE=100
为1
CONF_SWAPSIZE=2048
就有2G的虚拟内存,应该够用了,最后执行:1
2sudo dphys-swapfile setup
sudo dphys-swapfile swapon
重新加载一下配置文件,然后就可以用 free 命令查看到 2G 虚拟内存了
让 shell 界面有颜色
pi用户的shell界面默认是有颜色的,但是root用户默认没有,只要把pi用户的.bashrc文件中对应的部分复制到root用户的.bashrc中就可以达到目的1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac
force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w \$\[\033[00m\] '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
alias ll='ls -al'
最后一句 alias 是把 ll 变成 ls -al 的别名,方便查看文件
安装 apache2 + php7 + mysql + phpmyadmin
1 | sudo apt install apache2 |
mysql创建最高权限用户
1 | GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY 'password' WITH GRANT OPTION; |
安装phpmyadmin
以phpMyAdmin-4.8.0.1为例(我修改了apache2的默认配置,网站根目录在 /var/www)1
2
3
4
5
6
7
8
9sudo mkdir /opt/phpmyadmin
cd /opt/phpmyadmin
sudo curl -O https://files.phpmyadmin.net/phpMyAdmin/4.8.0.1/phpMyAdmin-4.8.0.1-all-languages.zip
sudo unzip phpMyAdmin-4.8.0.1-all-languages.zip
sudo ln -s /opt/phpmyadmin/phpMyAdmin-4.8.0.1-all-languages /var/www/phpmyadmin
sudo cp /var/www/phpmyadmin/config.sample.inc.php /var/www/phpmyadmin/config.inc.php
sudo mkdir /var/www/phpmyadmin/tmp
sudo chown www-data -R /var/www/phpmyadmin/tmp
sudo chgrp www-data -R /var/www/phpmyadmin/tmp
安装tomcat
创建tomcat用户和组
1 | sudo groupadd tomcat |
以9.0.7版本为例下载源码并配置
1 | sudo mkdir /opt/tomcat |
配置开机启动
1 | sudo update-java-alternatives -l |
记下jdk路径(RASPBIAN系统+openjdk的sdk位置默认是 /usr/lib/jvm/java-1.8.0-openjdk-armhf)1
sudo nano /etc/systemd/system/tomcat.service
写入以下内容1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-armhf/jre
Environment=CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat/latest
Environment=CATALINA_BASE=/opt/tomcat/latest
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
注意替换jdk位置,以及其后的jre不能遗漏,内存配置按需修改
重新加载systemctl、配置开机启动、启动tomcat以及查看是否成功启动:1
2
3
4sudo systemctl daemon-reload
sudo systemctl enable tomcat
sudo systemctl start tomcat
sudo systemctl status tomcat
配置tomcat web管理接口
修改:1
sudo nano /opt/tomcat/latest/conf/tomcat-users.xml
在tomcat-users中添加一行1
<user username="tomcat" password="password" roles="manager-gui,admin-gui"/>
修改META-INF权限配置,需要修改以下两个文件,允许局域网访问1
2sudo nano /opt/tomcat/latest/webapps/manager/META-INF/context.xml
sudo nano /opt/tomcat/latest/webapps/host-manager/META-INF/context.xml
两个文件中1
2
3
4
5<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
都需要把1
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"
修改为1
allow="127\.\d+\.\d+\.\d+|192\.168\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"
即允许来自192.168.开头的IP的访问,这样就可以通过局域网管理web应用了
最终文件长这个样子:1
2
3
4
5<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|192\.168\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>