1.树莓派3安装archlinux通用配置部分

撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>> hot3.png

本文永久地址: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

你可能感兴趣的:(1.树莓派3安装archlinux通用配置部分)