[关闭]
@mritd 2015-11-29T12:23:50.000000Z 字数 9884 阅读 2433

树莓派2 玩耍

Linux Raspberry


开启Root用户

初次使用pi用户登录后,首先应该搞开Root用户,和Debian系列一样(我特么只用过基于Debian的,如Ubuntu,还没玩过纯血统Debian),默认树莓派Root用户是未启用的,密码每次开机都变,执行以下命令开启Root用户,并更改密码:

  1. sudo passwd root
  2. # 然后输两次密码,可以su过去了,不过这时你会发现
  3. # 仍然无法远程以root登录,修改如下配置中的 PermitRootLogin 参数即可
  4. vi /etc/ssh/sshd_config
  5. # 该参数码值如下
  6. # 允许root用户以任何认证方式登录
  7. PermitRootLogin yes
  8. # 只允许root用public key认证方式登录
  9. PermitRootLogin without-password
  10. # 不允许root远程登录
  11. PermitRootLogin no

以下相关设置大部分在root权限下进行


解决vi方向/删除失灵

  1. # 直接编辑vim配置文件,注意先调整到要改的位置,再编辑
  2. # 因为一旦进入Insert模式 方向键是不好使的
  3. vi /ect/vim/vimrc.tiny
  4. # 修改后如下
  5. set nocompatible
  6. set backspace=2

less语法高亮

  1. 执行命令 apt-get install source-highlight
  2. 加入环境变量(更详细参考 这里)
  1. export LESSOPEN='| /usr/share/source-highlight/src-hilite-lesspipe.sh %s'
  2. export LESS=' -R -N '

设置自动连接Wifi

一般只有一个无线网卡的话默认为 wlan0,修改 iface wlan0 inet manualiface wlan0 inet dhcp,因为考虑到网络环境,频繁切换网络不适合设置静态IP,所以使用 DHCP 分配,样例配置文件如下:

  1. # Please note that this file is written to be used with dhcpcd.
  2. # For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'.
  3. auto lo
  4. iface lo inet loopback
  5. # 自动连接有线网卡
  6. auto eth0
  7. allow-hotplug eth0
  8. iface eth0 inet manual
  9. # 自动连接 无线网卡
  10. auto wlan0
  11. # 允许热插拔
  12. allow-hotplug wlan0
  13. # IP采用 DHCP 分配
  14. iface wlan0 inet dhcp
  15. # SSID 等相关设置(wifi密码啥的)
  16. wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
  17. auto wlan1
  18. allow-hotplug wlan1
  19. iface wlan1 inet dhcp
  20. wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

该文件主要存储无线网络连接的相关设置,包括SSID、密码、加密方式等,配置样例如下

  1. ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
  2. update_config=1
  3. network={
  4. # Wifi SSID
  5. ssid="mritd"
  6. # Wifi Password
  7. psk="12345678"
  8. # 网络优先级, network块可以有多个,也就是可以设置多个无线链接及密码,
  9. # 当有多个Wifi都存在时,根据这个值选择优先链接,越大优先级越高,不可为负数
  10. priority=5
  11. }

执行 ifup wlan0 启动 wlan0 并连接,执行 ifdown wlan0 关闭并断开链接,如下图:
ifup_wlan0

链接成功后可执行 ifconfigiwconfig查看网络连接状况,如下图:
iwconfig

ifconfig

设置命令提示符风格

Linxu命令提示符由 PS1变量控制,所以更改命令提示符样式也就是更改PS1变量,以下为相关码值:

  1. \d :#代表日期,格式为weekday month date,例如:"Mon Aug 1"
  2. \H :#完整的主机名称。
  3. \h :#仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
  4. \t :#显示时间为24小时格式,如:HHMMSS
  5. \T :#显示时间为12小时格式
  6. \A :#显示时间为24小时格式:HHMM
  7. \u :#当前用户的账号名称
  8. \v :#BASH的版本信息
  9. \w :#完整的工作目录名称。家目录会以 ~代替
  10. \W :#利用basename取得工作目录名称,所以只会列出最后一个目录
  11. \# :#下达的第几个命令
  12. \$ :#提示字符,如果是root时,提示符为:# ,普通用户则为:$

颜色及效果控制码值

  1. 前景 背景 颜色
  2. ------------------------
  3. 30 40 黑色
  4. 31 41 红色
  5.  32 42 绿色
  6.  33 43 黄色
  7.  34 44 蓝色
  8.  35 45 紫红色
  9.  36 46 青蓝色
  10.  37 47 白色
  11.  
  12. 代码 意义
  13. -------------------------
  14. 0 OFF
  15. 1 高亮显示
  16. 4 underline
  17. 5 闪烁
  18. 7 反白显示
  19. 8 不可见

设置PS1变量时,\[\e[F;Bm] 代表颜色开始,F为前景色,B为背景色,\e[m] 为颜色结束符,不写的话会造成整个命令行都是最后一种颜色,以下为我的PS1样式

  1. PS1='\[\e[1;32m\][\u@\h\[\e[m\] \[\e[1;34m\]\W\[\e[m\]\[\e[1;32m\]]$\[\e[m\] '

设置开机自动同步时间

众所周知树莓派不加扩展板的情况下 没有硬件RTC时钟,也就意味着每次开机都要设置时钟,这特么可万万不能够啊,以下为设置开机自动同步时间的方法:

  1. apt-get install ntpdate
  1. # 执行如下命令
  2. dpkg-reconfigure tzdata
  3. # 选择 Asia(亚洲) 然后选择 ShanHai(上海)
  1. # 一般上面设置完市区就应该已经自动同步时间了
  2. # 执行以下命令可能会报socket占用,可忽略
  3. # 210.72.145.44 国家授时中心服务器IP
  4. ntpdate 210.72.145.44

编辑 /ect/rc.local 文件 执行 vim /etc/rc.local,加入 htpdate -t -s 210.72.145.44 这条命令,注意要放在 exit 0 前面,样例配置如下:

  1. #!/bin/sh -e
  2. # 此处省略1000行注释.....
  3. # Sync Time
  4. htpdate -t -s 210.72.145.44
  5. # Print the IP address
  6. _IP=$(hostname -I) || true
  7. if [ "$_IP" ]; then
  8. printf "My IP address is %s\n" "$_IP"
  9. fi
  10. exit 0

合并剩余分区空间

默认树莓派安装系统后并不会占用所有SD卡空间,一般只会使用4G左右,对于大内存卡来说剩下的空间属于未分配状态,即未分区无法使用,我们可以使用 fdisk 来合并后面的分区加以利用

  1. # 进入fdisk
  2. fdisk /dev/mmcblk0
  3. # 按 P 显示分区信息,并记录 Type 为Linux的分区起始柱面(122880),打印如下:
  4. Device Boot Start End Sectors Size Id Type
  5. /dev/mmcblk0p1 8192 122879 114688 56M c W95 FAT32 (LBA)
  6. /dev/mmcblk0p2 122880 8447999 8325120 4G 83 Linux
  1. # 按D 并选择删除分区2,再按P 查看分区信息,打印如下:
  2. Command (m for help): d
  3. Partition number (1,2, default 2): 2
  4. Partition 2 has been deleted.
  5. Command (m for help): p
  6. Disk /dev/mmcblk0: 28.8 GiB, 30908350464 bytes, 60367872 sectors
  7. Units: sectors of 1 * 512 = 512 bytes
  8. Sector size (logical/physical): 512 bytes / 512 bytes
  9. I/O size (minimum/optimal): 512 bytes / 512 bytes
  10. Disklabel type: dos
  11. Disk identifier: 0xba2edfb9
  12. Device Boot Start End Sectors Size Id Type
  13. /dev/mmcblk0p1 8192 122879 114688 56M c W95 FAT32 (LBA)
  1. # 按N 执行新建分区,再按P 选择增加主分区,并输入起始柱面(122880),打印如下:
  2. Command (m for help): n
  3. Partition type
  4. p primary (1 primary, 0 extended, 3 free)
  5. e extended (container for logical partitions)
  6. Select (default p): p
  7. Partition number (2-4, default 2): 2
  8. First sector (2048-60367871, default 2048): 122880
  9. Last sector, +sectors or +size{K,M,G,T,P} (122880-60367871, default 60367871):
  10. Created a new partition 2 of type 'Linux' and of size 28.7 GiB.
  1. # 首先按P 查看一下,确认分区增加无误,然后按W 执行分区操作,打印如下:
  2. Command (m for help): p
  3. Disk /dev/mmcblk0: 28.8 GiB, 30908350464 bytes, 60367872 sectors
  4. Units: sectors of 1 * 512 = 512 bytes
  5. Sector size (logical/physical): 512 bytes / 512 bytes
  6. I/O size (minimum/optimal): 512 bytes / 512 bytes
  7. Disklabel type: dos
  8. Disk identifier: 0xba2edfb9
  9. Device Boot Start End Sectors Size Id Type
  10. /dev/mmcblk0p1 8192 122879 114688 56M c W95 FAT32 (LBA)
  11. /dev/mmcblk0p2 122880 60367871 60244992 28.7G 83 Linux
  12. Command (m for help): w
  13. The partition table has been altered.
  14. # 此处说明 设备忙碌,新的分区表将在下次重启生效
  15. Calling ioctl() to re-read partition table.
  16. Re-reading the partition table failed.: Device or resource busy
  17. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
  1. # 由于上面已经提示了重启生效,所以执行重启命令
  2. reboot
  3. # 重启后需要进行一次分区修复,否则df查看磁盘占用是不变的,执行如下命令修复分区
  4. resize2fs /dev/mmcblk0p2
  5. # 执行成功后使用df查看分区占用情况,打印如下:
  6. [root@raspberrypi ~]# df
  7. Filesystem 1K-blocks Used Available Use% Mounted on
  8. /dev/root 29586708 3255252 25069844 12% /
  9. devtmpfs 469756 0 469756 0% /dev
  10. tmpfs 474060 0 474060 0% /dev/shm
  11. tmpfs 474060 6412 467648 2% /run
  12. tmpfs 5120 4 5116 1% /run/lock
  13. tmpfs 474060 0 474060 0% /sys/fs/cgroup
  14. /dev/mmcblk0p1 57288 20232 37056 36% /boot
  15. tmpfs 94812 0 94812 0% /run/user/1000

安装lrzsz(快捷上传下载)

操作简单,但大有用处,执行一条命令 apt-get install lrzsz 就安装成功了;作用就是在使用xShell通过ssh连接到树莓派后,上传文件只需要敲 rz 命令就会弹出文件选择对话框,选择文件后就直接上传到当前shell显示的目录下了,也可以直接将文件拖向命令行,也会直接将文件上传到当前目录;下载的话直接敲 sz FILENAME 就会马上弹出下载选择框,选择到哪就会下载到那个目录,奏是这么吊!

编译并安装Nginx

由于做J2EE开发,想搞个Nginx,so 鼓捣吧......

Nginx 编译安装需要 如下支持
gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
默认gcc树莓派已经自带了,剩下的 pcre、zlib、openssl 需要自己下载,下载地址: pcrezlibopensslNginx

  1. # 下载下来想办法搞到树莓派上,然后解压
  2. tar -zxvf openssl-1.0.2d.tar.gz
  3. tar -zxvf pcre-8.37.tar.gz
  4. tar -zxvf zlib-1.2.8.tar.gz
  5. tar -zxvf nginx-1.8.0.tar.gz
  1. # 首先进入到 nginx目录
  2. cd nginx-1.8.0
  3. # 执行编译,编译参数如下:
  4. ./configure
  5. --sbin-path=/usr/local/nginx/nginx
  6. --conf-path=/usr/local/nginx/nginx.conf
  7. --pid-path=/usr/local/nginx/nginx.pid
  8. --with-http_ssl_module
  9. --with-pcre=../pcre-8.37
  10. --with-zlib=../zlib-1.2.8
  11. --with-openssl=../openssl-1.0.2d
  12. # 最后安装(时间有点长......)
  13. make && make install

安装花生壳(内网穿透)

作为一名 Java Web狗,Nginx、Tomcat已经搞起了,只能内网访问怎么可以;所以必须搞一个 花生壳做内网映射,使之通过域名可直接从外网访问到内网下的树莓派中部署的项目。

花生壳树莓派版下载地址: 点击下载
下载后上传到树莓派,执行 tar -zxvf phddns_raspberry.tgz 解压文件

解压后会生成 phddns2 目录,cd 进去,执行 ./oraynewph start 命令进行安装,安装完成后屏幕上会显示几行信息,其中一个是 SN码,记录下这个 SN码,一般是一串复杂的类似于md5的字符串
然后进入 b.oray.com ,选择使用 SN码 登录,默认密码是admin,注意:此时树莓派必须成功连接外网,否则无法登陆,登录如下图所示:

登录

登陆后首先选择 动态域名解析 ,然后 注册一个壳域名 ,再回到首页选择 内网映射 ,配置一个域名内网映射即可,映射配置如下图:

内网映射配置

其他关于更详细的花生壳使用教程请谷歌,安装教程参考 这里,最后附上一张装好逼的截图:

动态域名访问树莓派Nginx

编译安装Nexus

由于现在项目都使用Maven,所以也想搞一个私服Nexus,无奈Nexus官方二进制包中并不提供 arm平台支持,主要是wrapper 没有arm平台的可执行文件和动态链接库,故需要自己编译wrapper,所以有了 "编译安装Nexus" 这一说法。

登录 Nexus官网 选择 TGZ 格式下载,上传到 树莓派并解压,然后 mv 到你想要放置的目录。配置一个环境变量,样例如下 : export NEXUS_HOME='/usr/local/java/nexus/nexus-2.11.4-01',并将 $NEXUS_HOME/bin 加入到 PATH 中。

为何需要下载 wrapper : nexus 本身确实自带了 wrapper,但 wrapper 这玩意是跟平台结合的,目前 Nexus 不支持 arm 平台,所以需要我们手动编译一个替换 Nexu 中的 wrapper


  1. 目前下载的最新版 Nexus-2.11.4-01 依赖的是 wrapper3.2.3,下载地址 点这里 (注意我们下载的事3.5.9版本)
  2. 下载完 src 源码包后上传到树莓派并解压,在开始编译前,需要正确的配置JAVA_HOMEPATH,这里有个小问题,树莓派2自带了JDK8,但 JAVA_HOME 啥的没配置,所以会有问题;但直接卸载的话 apt-get 会自动给你安装 open-jdk7,可执行 apt-cache rdepends oracle-java8-jdk 查看依赖 jdk 的相关软件包,并执行 apt-get purge xxxxx 卸载他们,基本这些软件包都是教学用的,可以删掉;然后自己下载 arm 平台的 jdk7 (感觉8太新了怕不稳定) 安装、配置环境。
  1. 配置完 JAVA_HOMEPATH 变量以后还需要下载一个 Ant,因为 wrapper 是基于 Ant 构建的,基本步骤也是。 下载Ant 然后解压到指定目录,配置一下 ANT_HOME,方法自查。
  2. 在正式编译前需要 cp src/c/Makefile-linux-x86-32.make to src/c/Makefile-linux-arm-32.make (老外的原文,说来了就是 copy 一份到当前目录并重命名一下)。
  3. 进入到 wrapper 解压后的目录执行 ./build32.sh 进行编译,如果 JAVA_HOMEPATHAnt.make 文件 没问题的话编译一般不会出错。
  4. 编译完成后在 nexus-2.11.4-01/bin/jsw 下新建一个 linux-armv7l-32 文件夹,复制编译好的 wrapper_3.5.9_src/bin/wrapper 文件到 刚刚新建的 linux-armv7l-32 目录下,由于使用了高版本 wrapperwrapper.jar 复制过去后需要先删掉原来的 wrapper-3.2.3.jar 并将 wrapper.jar 重命名为 wrapper-3.2.3.jar
  • 新建用户 nexus : adduser nexus (别用 useradd 我一直以为这两个命令一样,但你在树莓派2下可以试试)
  • 改密码 : passwd nexus
  • 改两个配置文件 : nexus-2.11.4-01/bin/nexusnexus-2.11.4-01/bin/jsw/conf/wrapper.conf,两个配置要改的地方贴出来如下 (更详细的参见 Nexus 2.11 CentOS搭建教程) :
  1. ###############################
  2. ## nexus-2.11.4-01/bin/nexus ##
  3. ###############################
  4. #
  5. # Set the JVM executable
  6. # (modify this to absolute path if you need a Java that is not on the OS path)
  7. # 配置 jdk中 java 可执行文件的位置(其实我感觉jre就可以,没测试,有兴趣的测试一下)
  8. wrapper.java.command=/usr/local/java/jdk1.7.0_79/bin/java
  1. ##############################################
  2. ## nexus-2.11.4-01/bin/jsw/conf/wrapper.con ##
  3. ##############################################
  4. #
  5. # Set this to the root of the Nexus installation
  6. # 设置 nexus 主目录,就是解压后的那个 nexus目录绝对路径
  7. NEXUS_HOME="/usr/local/java/nexus-2.11.4-01"
  • 先切换到 nexus 用户,因为官方不推荐以 root 用户运行,执行 : su - nexus,然后启动 nexus,执行 nexus start 启动,时间比较长,大约2分钟,使用 tail -f nexus-2.11.4-01/logs/wrapper.log 查看进度,启动成功后访问 IP:8081/nexus 即可,默认用户 admin,密码 admin123;到此结束。

编译安装MySQL

执行 apt-get install screen 安装screen,用于后台运行编译任务,防止断网等原因造成的编译失败。

可去官网下载,百度云分享 点击这里 密码: g2ab
下载完成后上传到树莓派并解压

编译前需要做以下操作:

  1. # 新建mysql用户
  2. adduser mysql
  3. # 创建MySQL安装目录
  4. cd /usr/local
  5. mkdir mysql
  6. cd /usr/local/mysql
  7. mkdir data
  1. # 首先升级软件源(如果改过非官方源必须改回来)
  2. apt-get update
  3. # 升级已安装软件包
  4. apt-get upgrade
  5. # 安装mysql编译时依赖
  6. apt-get isntall cmake make bison bzr libncurses5-dev g++ libtinfo5 ncurses-bin libncurses5 libtinfo-dev
  1. # 进入源码目录
  2. cd mysql-5.6.27/
  3. # 开启screen session 防止断网等造成的免疫中断
  4. screen -S mysqlinstall
  5. # 执行 cmake 预编译(最少一小时)
  6. cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_USER=mysql -DWITH_DEBUG=0

关于cmake预编译参数设置参考 这里

  1. make && make install
  1. # 更改所有者
  2. cd /usr/local/
  3. chown -R mysql.mysql mysql
  4. # 创建配置文件
  5. cd /usr/local/mysql/support-files
  6. cp my-default.cnf /etc/my.cnf
  7. # 初始化数据库
  8. cd /usr/local/mysql
  9. ./scripts/mysql_install_db --user=mysql
  10. # 安全启动(后台)
  11. /usr/local/mysql/bin/mysqld_safe --user=mysql --port=3306 --sock=/usr/local/mysql/data/mysql.sock &
  12. # 开机自启动
  13. cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
  14. chkconfig --add mysql

mysql5.6的默认参数设置问题,更改my.cnf,调整以下参数
performance_schema_max_table_instances=600
table_definition_cache=400
table_open_cache=256
这时mysql启动后内存就只占用40--60M内存了

安装 xrdp远程桌面

其实树莓派感觉没必要买显示器,因为直接可以安装远程桌面,执行 apt-get install xrdp 安装,在 Windows 下可直接使用远程桌面连接,按 Win+R 键输入 mstsc,再输入树莓派地址和用户名密码 就可以,截图如下:
远程桌面

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注