撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>>
本文永久地址:https://my.oschina.net/bysu/blog/1560594
安装过程请参考:https://my.oschina.net/bysu/blog/1557801
树莓派3安装archlinux配置web、samba和aria2请参考
买了个树莓派3主要是想用来当家用NAS和学习编程。由于树莓派性能有限,故此分两种环境配置。现在先配置通用环境部分。
强插入:虚拟内存分区(该节点未验证,网上看到,记录为日后不时之需)
创建交换文件
交换文件可以在物理内存不足的时候将部分内存暂存到交换文件中,避免系统由于内存不足而完全停止工作。
之前我们通常采用单独一个分区的方式作为交换分区,现在更推荐采用交换文件的方式,更便于我们的管理。
分配一块空间用于交换文件,执行:
fallocate -l 512M /swapfile (请将512M换成需要的大小,只能以M或G为单位)
更改权限,执行:交换文件的大小可以自己决定,推荐4G以下的物理内存,交换文件与物理内存一致,4G以上的物理内存,交换文件4-8G。
chmod 600 /swapfile
mkswap /swapfile
设置交换文件,执行:
启用交换文件,执行:
swapon /swapfile
vim /etc/fstab
最后我们需要编辑/etc/fstab
为交换文件设置一个入口,使用vim
打开文件:
注意编辑fstab
文件的时候要格外注意不要修改之前的内容,直接在最后新起一行加入以下内容:
/swapfile none swap defaults 0 0
1.更换源;
编辑 /etc/pacman.d/mirrorlist
在文件头部添加:
清华软件源:
Server = http://mirrors.tuna.tsinghua.edu.cn/archlinuxarm/$arch/$repo
中科大软件源:
Server = http://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo
更新软件源:
pacman -Syyu
2.新增用户,安装sudo
新增用户及其相应的家目录
#新增用户
useradd -d /home/bysu -m bysu #使用root用户
#设置密码
passwd bysu #使用root用户
如果出现使用新增用户登录提示该用户的家目录拒绝访问,可以使用一下命令试一下。
chown -R bysu:root /home/bysu/
安装sudo:
# pacman -S sudo
输入 vi /etc/sudoers
root ALL=(ALL) ALL #找到这一行,加入下面内容 bysu为你新增的用户
bysu ALL=(ALL) NOPASSWD:ALL
或者
去掉 #%wheel ALL=(ALL) ALL 此行注释,使wheel用户组可以临时使用sudo 提高权限。
这里插一个配置
在Archlinux里,经常 使用ls等相关命令,但是Archlinux默认是黑白界面,超级丑,为此对其修改,使得其结果带有颜色
修改/etc/profile文件,在文件尾部增加
export LS_OPTIONS="--color=auto -N -T 0"
alias ls="ls $LS_OPTIONS"
#也可以通过alias命名命令别名
3.设置WiFi
如果之前systemctl enable dhcpcd.service
systemctl stop dhcpcd.service #停住服务
systemctl disable dhcpcd.service #取消开机启动
systemctl status dhcpcd.service #查看状态
# 然后
cd /etc/netctl
cp examples/wireless-wpa . # 后面有一个i点,表示当前目录 A simple WPA encrypted wireless connection
vi wireless-wpa # Modify
Interface=wlan0 # iw dev查看, 或ip link 或ifconfig
Connection=wireless
Security=wpa
IP=dhcp
ESSID='wifi-name' #这个是你需要连接WiFi的名字
Key='wifi-passwd' #WiFi密码
注意,必须先完成以上才能进行一下,否则有一系列问题
netctl enable wireless-wpa
netctl start wireless-wpa
reboot
4.设置支持中文显示(该节点设置貌似还有点问题,中文显示为Unicode编码)
要显示中文,需要生成中文语言包和安装中文字体
1、生成中文语言包
archlinux使用locale-gen脚本生产相应的语言包,locale-gen路径 /usr/bin/locale-gen,使用less打开该脚本。
less /usr/bin/locale-gen
找到下面代码
LOCALEGEN=/etc/locale.gen
LOCALES=/usr/share/i18n/locales
上面第一行是语言包的配置路径;第二行是一些本地化(区域)习惯的配置文件路径,例如货币符号,时间格式,日期格式等等。
按照上面代码,找到 /etc/locale.gen,打开编辑,选择相应的语言(取消行首的注释)。推荐使用UTF-8的那个,兼容性强。
en_us.UTF-8 UTF8
zh_CN.GB18030 GB18030
zh_CN.UTF-8 UTF8
执行命令,生成语言包
locale-gen
设置系统语言为 zh_CN.UTF-8
,编辑 /etc/locale.conf
,写入以下内容
LANG="zh_CN.UTF-8"
(以上方法只能解决ssh中文显示问题,本机直接字符界面启动,中文还是方块)
安装中文字体,推荐使用文泉驿。(最新系统非必要,2017年11月1日)
pacman -S wqy-zenhei
#或者
pacman -S wqy-microhei ttf-dejavu
5.安装vim
pacman -S vim
6.更改时区
设置时区为 Shanghai
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
7.支持NTFS格式的读写权限
pacman -S ntfs-3g
8.设置自动挂载
先通过命令查看卷标名
[bysu@alarm ~]$ sudo blkid -s LABEL
/dev/sda1: LABEL="guest"
/dev/sda2: LABEL="share-rw"
/dev/sda3: LABEL="lifuli"
/dev/sda5: LABEL="bysu"
然后创建挂载点
sudo mkdir -p /media/samba/{guest,share-rw,lifuli,bysu}
挂载点创建好之后,对各个分区进行挂载
[bysu@alarm ~]$ sudo mount /dev/sda1 /media/samba/guest/
[bysu@alarm ~]$ sudo mount /dev/sda2 /media/samba/share-rw/
[bysu@alarm ~]$ sudo mount /dev/sda3 /media/samba/lifuli/
[bysu@alarm ~]$ sudo mount /dev/sda5 /media/samba/bysu/
挂载好之后,设置开机自动挂载
[bysu@alarm ~]$ sudo vi /etc/fstab
# 看最后4行就是我添加的内容
# /etc/fstab: static file system information
#
#
/dev/mmcblk0p1 /boot vfat defaults 0 0
/dev/sda1 /media/samba/guest/ ntfs-3g defaults 0 0
/dev/sda2 /media/samba/share-rw/ ntfs-3g defaults 0 0
/dev/sda3 /media/samba/lifuli/ ntfs-3g defaults 0 0
/dev/sda5 /media/samba/bysu/ ntfs-3g defaults 0 0
保存退出后,记得先运行一遍 mount -a,否则报错的话,系统启动不了.之前在raspberry上面栽过一次.
此处针对archlinux系统(2017年11月5日此时最新版本)还有一个巨坑。被坑了无数次,系统重装了N遍。就是自动挂载移动硬盘后,如果这个时候没有连接需要挂载的硬盘,或者如果硬盘需要额外供电,但是没有开启电源,那么系统启动后,将无法通过ssh连接。想爆粗口了,妈了个鸡...
Linux版本信息
[bysu@alarm mdisk.sh]$ cat /proc/version
Linux version 4.13.11-1-ARCH (builduser@leming) (gcc version 7.2.0 (GCC)) #1 SMP Thu Nov 2 19:01:07 MDT 2017
为此,我在/home/bysu/tools/mdisk.sh写了挂载的脚本
sudo mount /dev/sda1 /media/samba/guest/
sudo mount /dev/sda2 /media/samba/share-rw/
sudo mount /dev/sda3 /media/samba/lifuli/
sudo mount /dev/sda5 /media/samba/bysu/
#卸载umdisk.sh
sudo umount /media/samba/guest/
sudo umount /media/samba/share-rw/
sudo umount /media/samba/lifuli/
sudo umount /media/samba/bysu/
把它写成开机自启动脚本(参考自I、II)。
通过vi 创建/etc/mdisk.d
#!/bin/bash
for loop in 1 2 3 4 5
do
sleep 1s
done
is_sshd=`ps -ef | grep -c ssh`
is_mount=`fdisk -l | grep -c sda`
if [ $is_sshd -gt 1 ] && [ $is_mount -gt 2 ]
then
mount /dev/sda1 /media/samba/guest/
mount /dev/sda2 /media/samba/share-rw/
mount /dev/sda3 /media/samba/lifuli/
mount /dev/sda5 /media/samba/bysu/
fi
###############经过优化,以上面这段为准,本人不懂shell脚本,胡乱拼凑,请勿拍砖########################3
#!/bin/bash
is_sshd = `ps -ef | grep -c ssh`
is_mount = `fdisk -l | grep -c sda`
while true
do
if [($is_sshd -gt 1) -a ($is_mount -gt 2)]
then
sudo mount /dev/sda1 /media/samba/guest/
sudo mount /dev/sda2 /media/samba/share-rw/
sudo mount /dev/sda3 /media/samba/lifuli/
sudo mount /dev/sda5 /media/samba/bysu/
break
else
echo "not connect sh, wait..." > /var/log/mdisk.log
sleep 1s
fi
done
或者
#!/bin/bash
is_ssh = `netstat -tl|grep ssh|sed -n '1p'|awk '{print $4}'|awk -F . '{print $4}'|awk -F : '{print $2}'`
while true
do
if [ $(ps -ef | grep -c "ssh") -gt 1 ]
if[$is_ssh="ssh"]
then
sudo mount /dev/sda1 /media/samba/guest/
sudo mount /dev/sda2 /media/samba/share-rw/
sudo mount /dev/sda3 /media/samba/lifuli/
sudo mount /dev/sda5 /media/samba/bysu/
给/etc/mdisk.d加可执行权限
chmod +x /etc/mdisk.d
通过vi,创建/usr/lib/systemd/system/mdisk.service文件
[Unit]
Description="/etc/mdisk.d Compatibility"
ConditionPathExists=/etc/mdisk.d
[Service]
Type=forking
ExecStart=/etc/mdisk.d
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
#######分割线########
以上注意相关文件路径即可
设为开机启动
systemctl enable mdisk
启动服务
systemctl start mdisk
查看启动状态
sytemctl status mdisk
9..安装java、python
java安装(参考自)
jdk下载:http://download.csdn.net/download/gdzjsubaoya/10103442
在usr下面创建tool文件夹,解压jdk-8u152-linux-arm64-vfp-hflt.tar.gz到tool文件夹
编辑 /etc/profile 加入下面内容,注意/usr/tool/jdk1.8是和当前解压的jdk对应的
vi /etc/profile
按住Shift+g,调到文末,然后按小写英文字母o
添加以下5行内容
JAVA_HOME=/usr/tool/jdk1.8
JRE_HOME=/usr/tool/jdk1.8/jre
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
#然后按Esc键,冒号:
#接在输入wq 回车就可以了
添加后,整个文件的内容如下:
# /etc/profile
#Set our umask
umask 022
# Set our default path
PATH="/usr/local/sbin:/usr/local/bin:/usr/bin"
export PATH
# Load profiles from /etc/profile.d
if test -d /etc/profile.d/; then
for profile in /etc/profile.d/*.sh; do
test -r "$profile" && . "$profile"
done
unset profile
fi
# Source global bash config
if test "$PS1" && test "$BASH" && test -z ${POSIXLY_CORRECT+x} && test -r /etc/bash.bashrc; then
. /etc/bash.bashrc
fi
# Termcap is outdated, old, and crusty, kill it.
unset TERMCAP
# Man is much better than us at figuring this out
unset MANPATH
JAVA_HOME=/usr/tool/jdk1.8
JRE_HOME=/usr/tool/jdk1.8/jre
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
使环境变量立即生效,输入命令
source /etc/profile
测试
vi Test.java
public class Test{
public static void main(String[] args){
System.out.println("Hello,archlinux");
}
}
保存退出。然后输入javac Test.java进行编译。输入java Test 运行。
[root@alarm java]# java Test
Hello,archlinux
安装python
安装python3
pacman -S python
安装python2
pacman -S python2
默认是python3.如果需要更改默认为python2.参考我从wiki中摘录过来的。
Python 2 可以和 Python 3 同时运行,需要指定成python2
才会运行此版本。
默认的/usr/bin/python
是链接到 python 3 的,所以所有要求使用 python 2 的软件包应该用 /usr/bin/python2
替换 /usr/bin/python
.
用文本编辑器打开程序或脚本,将第一行:
#!/usr/bin/env python
或
#!/usr/bin/python
中的 python
替换为 python2
。
另一种强制使用 python2 而不修改脚本的方法是明确地使用 python2 调用它,即
python2 myScript.py
最后,你可能无法控制脚本调用哪一个,但还有一种方法。它仅在脚本使用 #!/usr/bin/env python
时有效,在用 #!/usr/bin/python
时无效。这种手法依赖于 env
在 PATH 变量中搜索第一个对应的条目。 首先创建一个目录。
$ mkdir ~/bin
然后添加一个名为 'python' 的链接指向 python2 以及一个名为 'python-config' 的链接指向 python2-config 。
$ ln -s /usr/bin/python2 ~/bin/python $ ln -s /usr/bin/python2-config ~/bin/python-config
最后把新的目录添加到你的 PATH 变量的 最前面。
$ export PATH=~/bin:$PATH
注意到这个修改不是永久的,仅在当前终端会话中有效。 要检查 env
使用的是哪个 python 解释器,使用以下命令:
$ which python
另一个解决这个问题的方法是通过 Python/Virtualenv (简体中文) 来伪造一个脚本的运行环境。
安装pip
#如果需要安装pip2
sudo pacman -S python2-pip
#安装pip3
sudo pacman -S pip
使用pip进行python库管理
sudo pip install 包名
#使用pip2
sudo pip2 install 包名 #如果只安装pip2,只需pip即可
#查看pip安装路径
sudo whereis pip
10.ip地址改变后,自动发送邮件
安装mutt和msmtp
pacman -S msmtp
pacman -S mutt
配置msmtp。在你用户的根目录下创建文件 .msmtprc,内容如下:
account default
host smtp.163.com
port 25
from [email protected]
auth plain
user [email protected]
password your_password
tls off
tls_starttls off
logfile /var/log/msmtp.log
其中,smtp.163.com是我使用的邮箱的SMTP服务器地址,[email protected]是我用于发送邮件的邮箱,your_password是邮箱的授权码(譬如我在163申请了一串授权码,就是该授权码,很多教程说是邮箱密码,具体请另行测试),你要根据你的情况修改。
然后配置mutt。在你用户的根目录下创建文件 .muttrc,内容如下:
set realname='shumeipai3' #这个在邮箱中显示为发件人
set sendmail="/usr/bin/msmtp"
set edit_headers=yes
set folder=~/mail
set mbox=+mbox
set spoolfile=+inbox
set record="/home/bysu/sent" #set record=+sent,这样子会报Couldn't lock /mail/sent的错误
set postponed=+drafts
set mbox_type=Maildir
mailboxes +inbox +lovey-dovey +happy-kangaroos
新增一个sent文件
touch /home/bysu/sent
以上的文件都需要注意权限
sudo chmod 600 /home/bysu/{.muttrc,.msmtprc,sent} #这个命令随手写的,没有试过,反正就是这3个文件需要改成600权限
配置完后,可以采用如下的命令进行邮件发送功能的验证,具体如下:其中,realname是发件人的名字,接收到的邮件中会显示出来。
echo “helloworld” | mutt –s “test mutt sent mail” [email protected]
-------------以下是安装配置过程中的各种报错-----------------------------------------------
报错
sions
Error sending message, child exited 78 ().
Could not send the message.
查看文件权限
[bysu@alarm ~]$ ls -la /home/bysu/.msmtprc
-rw-r--r-- 1 bysu root 134 Nov 7 20:37 /home/bysu/.msmtprc
修改权限
sudo chmod 600 /home/bysu/.msmtprc
#查看该文件权限,改编为
[bysu@alarm ~]$ ls -la /home/bysu/.msmtprc
-rw------- 1 bysu root 134 Nov 7 20:37 /home/bysu/.msmtprc
继续测试
echo “helloworld” | mutt –s “test subject” [email protected]
报错如下:
msmtp: authentication failed (method PLAIN)
msmtp: server message: 530 Error: A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bin/help?id=28
msmtp: could not send mail (account default from /home/bysu/.msmtprc)
msmtp: cannot log to /var/log/msmtp.log: cannot open: Permission denied
msmtp: log info was: host=smtp.qq.com tls=off auth=on [email protected] [email protected] recipients=���s@alarm,���test@alarm,subject���@alarm,[email protected] smtpstatus=530 smtpmsg='530 Error: A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bin/help?id=28' errormsg='authentication failed (method PLAIN)' exitcode=EX_NOPERM
Error sending message, child exited 77 (Insufficient permission.).
Could not send the message.
不知道什么鬼,据说是服务器拒绝了。改配置,转163继续。又报错,
/home/bysu/mail you account is not a mailbox
原因是我创建了一个mail 的文件夹,删掉,通过touch创建一个mail空白文件,付600权限。
继续测试,继续报错。
Couldn't lock /home/bysu/sent
文件存在,权限没问题。百度了各种解决方法,别人的方法,不适用。搞了一个晚上没搞好,终于无奈地睡觉去了。早上上班继续鼓捣,终于看到有一个人的配置是绝对路径,鬼使神差地改成绝对路径,问题得以解决。
----------------------------------------邮件发送设置完毕-----------------------------------------
开机自动发送邮件,不知道怎么总是启动不成功。只能退一步,通过用户登录后,发送ip。可能有人会想,如果我能登录了,干嘛还有发送ip?有道理,我开始一瞬间也是这么想的。继续一想,我可以让它开机自动登录,不就会发送ip邮件了吗?嗯,可是有一个弊端,就是每连接一个ssh上来,都会发送一份关于ip的邮件给你,让你不得不怀疑自己的智商。姑且算了,没那么多精力纠结这个问题,后续再优化。
那就先来一个开机自动登录用户(bysu)吧
创建文件
sudo vi /etc/systemd/system/[email protected]/override.conf
写入如下内容,下面的username替换成你需要的登录名即可。
[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin username --noclear %I $TERM
自动登录搞定。那么就在/etc/profile.d/目录下创建一个发送ip邮件的脚本sendip.sh
#!/bin/bash
# check network availability
echo `date` > /home/bysu/profile.sendip
while true
do
TIMEOUT=5
SITE_TO_CHECK="www.163.com"
RET_CODE=`curl -I -s --connect-timeout $TIMEOUT $SITE_TO_CHECK -w %{http_code} | tail -n1`
if [ $RET_CODE==200 ]; then
echo "Network OK, will send mail..."
break
else
echo "Network not ready, wait..."
sleep 1s
fi
done
# get the IP address of eth0, e.g. "192.168.16.5"
ETH0_IP_ADDR=`curl ifconfig.me`
# send the Email
echo "Current time: `date '+%F %T'`. Enjoy it" | mutt -s "IP Address of Raspberry Pi: $ETH0_IP_ADDR" [email protected]
获取本机公网ip
编写实现如下功能的脚本:
1.获取公网ip;
curl ifconfig.me
2.联网后,发送邮件;
#!/bin/bash
# check network availability
while true
do
TIMEOUT=5
SITE_TO_CHECK="www.163.com"
RET_CODE=`curl -I -s --connect-timeout $TIMEOUT $SITE_TO_CHECK -w %{http_code} | tail -n1`
if [ $RET_CODE==200 ]; then
echo "Network OK, will send mail..."
break
else
echo "Network not ready, wait..."
sleep 1s
fi
done
# get the IP address of eth0, e.g. "192.168.16.5"
ETH0_IP_ADDR=`curl ifconfig.me`
# send the Email
echo "Current time: `date '+%F %T'`. Enjoy it" | mutt -s "IP Address of Raspberry Pi: $ETH0_IP_ADDR" [email protected]
3.10分钟之后,不能联网,自动重启电脑。
4.开机后,自动执行以上脚本
========请忽略后面内容=====桌面安装=====请忽略后面内容=====================
https://wiki.archlinux.org/index.php/Desktop_environment#List_of_desktop_environments
https://wiki.archlinux.org/index.php/Enlightenment_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
http://www.viseator.com/2017/05/19/arch_setup/
安装X窗口系统,QT编程环境(九)
项目展示中,ArchLinux系统的字符界面,有点寒碜,安装图像界面也是必不可少的。
ArchLinux中安装X窗口系统比较简单:
[root@alarmpi ~]# pacman -S xorg-server xorg-xinit xorg-utils xorg-server-utils
安装显示卡驱动
[root@alarmpi ~]# pacman -S xf86-video-fbdev
这样你可以在终端用startx启动X窗口系统了:
[root@alarmpi ~]# startx
启动以后发现一片空白,只有一个光标,这是因为还没有安装桌面系统,我们可以安装openbox 等软件。
我们的项目中不需要这些,就不安装了。
我们还需要一个图形界面的软件环境,现在QT比较流行,就使用它了:
[root@alarmpi ~]# pacman -S qt
有了QT我们可以开发项目需要的图形界面了!
vnc:
https://wiki.archlinux.org/index.php/TigerVNC
package sendEmail;
/**
* @author 苏宝伢 E-mail:[email protected]
* @version 创建时间: 2017年11月3日 上午10:52:49
*/
public class Mail {
public static final String ENCODEING = "UTF-8";
private String host = "smtp.163.com"; // 服务器地址
private String sender = "[email protected]"; // 发件人的邮箱
private String receiver = "[email protected]"; // 收件人的邮箱
private String name = "达达软件团队"; // 发件人昵称
private String username = "[email protected]"; // 账号
private String password = "客户端授权码"; // 客户端授权码密码
private String subject = "[达达软件]找回您的帐户密码"; // 主题
private String message = "你的验证码是:8988"; // 信息(支持HTML)
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public String getReceiver() {
return receiver;
}
public void setReceiver(String receiver) {
this.receiver = receiver;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
package sendEmail;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
/**
* @author 苏宝伢 E-mail:[email protected]
* @version 创建时间: 2017年11月3日 上午10:53:44
*/
public class MailUtil {
public boolean send(Mail mail) {
// 发送email
HtmlEmail email = new HtmlEmail();
try {
// 这里是SMTP发送服务器的名字:163的如下:"smtp.163.com"
email.setHostName(mail.getHost());
// 字符编码集的设置
email.setCharset(Mail.ENCODEING);
// 收件人的邮箱
email.addTo(mail.getReceiver());
// 发送人的邮箱
email.setFrom(mail.getSender(), mail.getName());
// 如果需要认证信息的话,设置认证:用户名-密码。分别为发件人在邮件服务器上的注册名称和密码
email.setAuthentication(mail.getUsername(), mail.getPassword());
// 要发送的邮件主题
email.setSubject(mail.getSubject());
// 要发送的信息,由于使用了HtmlEmail,可以在邮件内容中使用HTML标签
email.setMsg(mail.getMessage());
// 发送
email.send();
return true;
} catch (EmailException e) {
e.printStackTrace();
return false;
}
}
public static void main(String[] args) {
Mail mail = new Mail();
new MailUtil().send(mail);
}
}
http://download.oracle.com/otn-pub/java/javamail/1.4.7/javamail1_4_7.zip?AuthParam=1509692636_d575cf8989d8b2505af4928cf5fca06d
http://mirror.bit.edu.cn/apache//commons/email/binaries/commons-email-1.5-bin.tar.gz
http://mirror.bit.edu.cn/apache//commons/email/source/commons-email-1.5-src.tar.gz
需要用到的Linux知识:
开机自启动
树莓派开机自启动程序(Arch Linux 版本)
如何让树莓派开机后自动启动用户的程序或者执行脚本?
不同的Linux发行版有不同的自启动机制,如RedHat有 /etc/rc.local 文件,在里面写上要执行的命令就可以开机执行。 Arch Linux 采用的是守护进程的机制(daemon)。 在Arch Linux中, 守护进程是用systemd管理的. 用户用systemctl命令来管理. systemctl读取.service文件中包含怎么和什么时候启动相关的进程. Service的文件保存在/{etc,usr/lib,run}/systemd/system中. 看看systemd#Using units 有关怎么使用systemctl管理守护进程的完整信息.
开机时自动启动
在启动的时候添加,删除服务使用 systemctl enable|disable service_name命令
手动启动
在系统运行时启动,停止服务, 使用 systemctl start|stop service_name命令.
重启服务
为了重启服务, 使用 systemctl restart service_name命令.
查看运行状态
查看当前服务的运行状态, 使用 systemctl status service_name命令.
检查服务是否开机启动
检查服务是否开机启动,使用 systemctl is-enabled service_name; echo $?命令.
手动添加开机运行的服务
ln -sf /lib/systemd/system/ /etc/systemd/system/
demo:
1 将脚本写入/etc/rc.local
++++++++++++++++++++++++++++++++++++++++++++++++++++
#!/bin/bash
# this file defines the commands that will be executed at system startup
echo "exect the application /home/pi/hello" > /dev/ttyAMA0
./home/hello
++++++++++++++++++++++++++++++++++++++++
2 添加可执行权限
chmod +x /etc/rc.local
3 创建服务文件 /usr/lib/systemd/system/rc-local.service
++++++++++++++++++
[Unit] Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
+++++++++++++++++++++++++
4 添加软链接
cd /etc/systemd/system/multi-user.target.wants
ln -s /usr/lib/systemd/system/rc-local.service rc-local.service
5 启用服务
systemctl enable rc-local.service
6测试效果
重启
reboot
或者 直接启动服务
systemctl start rc-local.service
如果系统启动后,程序确实执行了,则表示自启动设置成功
http://www.linuxidc.com/Linux/2013-05/84748.htm