科技爱好者博客 http://blog.lxx1.com 开源知识分享博客,讨论树莓派、Arduino、Linux、服务器使用配置教程 Sun, 14 Oct 2018 15:02:37 +0000 zh-CN hourly 1 https://wordpress.org/?v=4.9.8 树莓派安装 OpenWrt 打造超级路由器 http://blog.lxx1.com/3294 http://blog.lxx1.com/3294#respond Sun, 14 Oct 2018 05:58:15 +0000 http://blog.lxx1.com/?p=3294 树莓派安装 OpenWrt 打造超级路由器,首发于科技爱好者博客

一直在树莓派上安装Pi-hole当作DNS服务器来使用,最近发现了 OpenWrt 这一项目,可以把树莓派变成 […]

树莓派安装 OpenWrt 打造超级路由器,首发于科技爱好者博客

]]>
树莓派安装 OpenWrt 打造超级路由器,首发于科技爱好者博客

一直在树莓派上安装Pi-hole当作DNS服务器来使用,最近发现了 OpenWrt 这一项目,可以把树莓派变成一个超级路由器,可以安装上千的插件,实现非常多的功能,例如将树莓派变成无线路由器,实现Nas 、网站服务器、远程监控甚至智能家居,同时还可以让所有设备快速上网(你懂的),同时它又基于Linux系统,可以在做路由器的同时当作一个服务器来使用,扩展性非常强。

本文教大家如何在树莓派上安装 OpenWrt 打造超级路由器。

OpenWrt官方介绍:

OpenWrt项目是针对嵌入式设备的Linux操作系统。OpenWrt不是一个单一且不可更改的固件,而是提供了一个完全可写的文件系统及软件包管理。这使您可以不使用供应商提供的应用程序选择和配置,而是通过使用软件包来定制设备以适应任何应用程序。对于开发人员来说,OpenWrt是一个构建应用程序的框架,无需在其周围构建完整的固件; 对于普通用户来说,这意味着拥有了完全定制的能力,能以意想不到的方式使用该设备。


OpenWrt/LEDE是一个为嵌入式设备(通常是无线路由器)开发的高扩展度的GNU/Linux发行版。与许多其他路由器的发行版不同,OpenWrt/LEDE是一个完全为嵌入式设备构建的功能全面、易于修改的由现代Linux内核驱动的操作系统。在实践中,这意味着您可以得到您需要的所有功能,却仍能避免臃肿。

〇、设备信息

所用到的设备:

Raspberry Pi 2B

无线网卡: EDUP EP-N8508GS

成品就是这货,树莓派无线路由器:

一、安装 OpenWrt

(一)支持的设备

OpenWrt 支持的设备比较多,可以从 OpenWrt 支持的设备列表查看,同时要求设备内至少大于4M,在内存小于4M或内存小于32M的设备在可用性、扩展性及操作的稳定性上将有所局限。

OpenWrt 支持的设备列表来看,各版本的树莓派都可以安装最新版本的OpenWrt,截止到2018年10月14日,最新版本是 18.06.1

OpenWrt 支持的树莓派版本
OpenWrt 支持的树莓派版本

Raspberry Pi 2B18.06.1raspberry_piView/Edit data
Raspberry Pi 3B18.06.1raspberry_piView/Edit data
Raspberry Pi 3B+18.06.1raspberry_piView/Edit data
Raspberry PiA18.06.1raspberry_piView/Edit data
Raspberry PiB18.06.1raspberry_piView/Edit data
Raspberry PiB+18.06.1raspberry_piView/Edit data
Raspberry Pi Zero W18.06.1raspberry_piView/Edit data

(二)下载 OpenWrt 镜像

在设备上面的表格中选择自己的树莓派型号,点击 View/Edit data ,然后进入 详情页面,选择“ Firmware OpenWrt Install URL ”,这个就是要下载的镜像,我们把它保存到本地。

树莓派2的下载下载地址:http://downloads.openwrt.org/releases/18.06.1/targets/brcm2708/bcm2709/openwrt-18.06.1-brcm2708-bcm2709-rpi-2-ext4-factory.img.gz

国内中科大的镜像地址:
http://mirrors.ustc.edu.cn/lede/releases/18.06.1/targets/brcm2708/bcm2709/openwrt-18.06.1-brcm2708-bcm2709-rpi-2-ext4-factory.img.gz

从科技爱好者博客的CDN下载:

http://cdn.lxx1.com/openwrt-18.06.1-brcm2708-bcm2709-rpi-2-ext4-factory.img.gz

(三)烧录镜像

将 OpenWrt 镜像烧录到树莓派中,windows下可以使用 Etcher 软件烧录。同样
OpenWrt 镜像支持树莓派从U盘启动,详见U盘安装树莓派系统,利用U盘启动Raspberry

(四)启动树莓派

这样 OpenWrt 就已经在树莓派上运行起来了。

二、树莓派上的 OpenWrt 配置

我打算将树莓派连接到已经在家中工作的无线路由器上,计划用树莓派自带的网卡通过网线连接到家中的路由器,用树莓派的无线网卡发射WIFI,然后其他设备通过树莓派的无线接入。

以下是我的树莓派无线路由器配置过程。

(一)登陆 OpenWrt

用网线将树莓派和电脑相连接,然后在浏览器中输入192.168.1.1,即可打开登陆页面。

OpenWrt 登陆页面
OpenWrt 登陆页面

自己设置一个密码,点击login登陆

(二)配置 OpenWrt 联网

下一步就是要配置树莓派OpenWrt的网络连接设置,使得 树莓派OpenWrt 连接到互联网,选择 network/Interfaces 选项卡。

1.新建 WAN 口

这里新建WAN口的原因是 Wide Area Network代表广域网,即路由器上接到互联网中的网口称为WAN口,为了方便使用新建了这个WAN 口,其实不新建直接在LAN口中配置也行,只是不符合规范。

点击 “Add new Interface”

点击 “Add new Interface”
点击 “Add new Interface”

2.在“ Name of the new interface”中输入WAN,其他保持不动,点击”submit”(提交)

3.配置WAN口。

配置WAN口为静态IP地址,因为我家中的路由器IP地址是192.168.0.1,掩码为255.255.255.255.0,故我的WAN 口配置成IP为
192.168.0.3, 掩码同样为255.255.255.255.0 ,DNS地址手动填写即可。如下图所示。

树莓派OpenWrt WAN口配置
树莓派OpenWrt WAN口配置

这里要注意的是,配置完成后,OpenWrt会验证接口配置中的IP是否能获取到,如果在点击保存后的30S内,该接口没有获取拿到预期的IP地址,则OpenWrt会取消这项配置,所以在要保证点击配置后,立即将树莓派和家中的路由器用网线连接起来,然后连接家中路由器上,访问http://192.168.0.3/,如果成功打开OpenWrt配置页面,则说明配置成功了,如果不行的话,将树莓派重新连接到电脑中,在30结束后选择强制保存。

4.将树莓派连接到家中的路由器上。

WAN口成功配置后,将树莓派与家中的路由器相连接,同时电脑也连接到家中的路由器,打开页面http://192.168.0.3/,就可以看到树莓派OpenWrt的配置页面了

这样树莓派 OpenWrt就已经成功连接到互联网了。

下面继续配置无线路由。

三、配置树莓派 OpenWrt 无线路由功能

(一)安装无线驱动

1.进入OpenWrt的“system/Software”选项卡,选择“Configuration”

进入OpenWrt的“system/Software”选项卡,选择“Configuration”
进入OpenWrt的“system/Software”选项卡,选择“Configuration”

2.更换镜像源

将“Distribution feeds”中的源全部换成中科大的 OpenWrt 镜像源,加快更新及安装软件的速度,否则会有错误。这里再次感谢中科大的 OpenWrt 镜像源,速度快了很多,好像只有他才有OpenWrt 镜像源。

全部换成如下:

src/gz openwrt_core http://mirrors.ustc.edu.cn/lede/releases/18.06.1/targets/brcm2708/bcm2709/packages
src/gz openwrt_base http://mirrors.ustc.edu.cn/lede/releases/18.06.1/packages/arm_cortex-a7_neon-vfpv4/base
src/gz openwrt_luci http://mirrors.ustc.edu.cn/lede/releases/18.06.1/packages/arm_cortex-a7_neon-vfpv4/luci
src/gz openwrt_packages http://mirrors.ustc.edu.cn/lede/releases/18.06.1/packages/arm_cortex-a7_neon-vfpv4/packages src/gz openwrt_routing http://mirrors.ustc.edu.cn/lede/releases/18.06.1/packages/arm_cortex-a7_neon-vfpv4/routing src/gz openwrt_telephony http://mirrors.ustc.edu.cn/lede/releases/18.06.1/packages/arm_cortex-a7_neon-vfpv4/telephony
更换 OpenWrt 镜像源
更换 OpenWrt 镜像源

3.更新OpenWrt软件包

点击“Update List”

更新OpenWrt软件包
更新OpenWrt软件包

4.安装无线驱动

我的树莓派USB网卡是 EDUP EP-N8508GS 的,亲测其支持的驱动是 kmod-rtl8192cu ,然后再安装无线工具 wireless-tools ,完成后重启树莓派。

5、重启

重启树莓派后就能看到“NetWorks/Wireless”选项了,点击“Enable”就可以启用无线了,这时手机上就可以搜到名为OpenaWrt的无线了,连上之后就可以上网了。

树莓派 成为OpenaWrt无线路由器
手机连接OpenWrt即可上网了

6.无线配置

点击“Edit”即可配置OpenWrt无线路由器,包括设置无线的名称、密码、是否隐藏、MAC地址过滤等等。

终于完成了!

四、相关故障及解决办法

OpenWrt的绝大部分故障都是由于源速度太慢导致的错误,这是由于众所周知的原因,我们可以通过更换中科大的镜像源来解决,有能力的还可以搭建反代来解决。

以下是常见的故障

(一)更新中提示 “Could not lock /var/lock/opkg.lock”

  • opkg_conf_load: Could not lock /var/lock/opkg.lock: Resource temporarily unavailable.

解决办法:

rm -f /var/lock/opkg.lock
opkg update

(二)更新速度慢或者有以下提示

Failed to establish connection
Collected errors:
 * opkg_download: Failed to download http://downloads.openwrt.org/releases/18.06.1/targets/brcm2708/bcm2709/packages/Packages.gz, wget returned 4.
 * opkg_download: Check your network settings and connectivity.

 * opkg_download: Failed to download http://downloads.openwrt.org/releases/18.06.1/packages/arm_cortex-a7_neon-vfpv4/base/Packages.gz, wget returned 4.
 * opkg_download: Check your network settings and connectivity.

 * opkg_download: Failed to download http://downloads.openwrt.org/releases/18.06.1/packages/arm_cortex-a7_neon-vfpv4/luci/Packages.gz, wget returned 4.
 * opkg_download: Check your network settings and connectivity.

这是由于源站速度太慢造成的

解决办法:用中科大的镜像替换,将源地址更换为以下地址:

src/gz openwrt_core http://mirrors.ustc.edu.cn/lede/releases/18.06.1/targets/brcm2708/bcm2709/packages
src/gz openwrt_base http://mirrors.ustc.edu.cn/lede/releases/18.06.1/packages/arm_cortex-a7_neon-vfpv4/base
src/gz openwrt_luci http://mirrors.ustc.edu.cn/lede/releases/18.06.1/packages/arm_cortex-a7_neon-vfpv4/luci
src/gz openwrt_packages http://mirrors.ustc.edu.cn/lede/releases/18.06.1/packages/arm_cortex-a7_neon-vfpv4/packages
src/gz openwrt_routing http://mirrors.ustc.edu.cn/lede/releases/18.06.1/packages/arm_cortex-a7_neon-vfpv4/routing
src/gz openwrt_telephony http://mirrors.ustc.edu.cn/lede/releases/18.06.1/packages/arm_cortex-a7_neon-vfpv4/telephony

这就是树莓派安装OpenWrt搭建无线路由器的全过程,如果你在安装的时候有问题,可以在文章下面的讨论部分和我交流。

原创文章,转载请注明: 转载自科技爱好者博客

本文链接地址: 树莓派安装 OpenWrt 打造超级路由器 (http://blog.lxx1.com/3294)

如果博客对您有帮助,请给我 打赏


树莓派安装 OpenWrt 打造超级路由器,首发于科技爱好者博客

]]>
http://blog.lxx1.com/3294/feed 0
修改树莓派交换分区 SWAP 的大小 http://blog.lxx1.com/3289 http://blog.lxx1.com/3289#respond Sat, 13 Oct 2018 14:28:22 +0000 http://blog.lxx1.com/?p=3289 修改树莓派交换分区 SWAP 的大小,首发于科技爱好者博客

如果觉得树莓派的内存不够用了,可以修改交换分区的大小。以下是方法:

修改树莓派交换分区 SWAP 的大小,首发于科技爱好者博客

]]>
修改树莓派交换分区 SWAP 的大小,首发于科技爱好者博客

SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用.它和Windows系统的交换文件作用类似,但是它是一段连续的磁盘空间,并且对用户不可见。如果觉得树莓派的内存不够用了,可以修改交换分区的大小。以下是方法

一、修改配置文件 dphys-swapfile

sudo nano /etc/dphys-swapfile 

二、设置交换分区大小

将 CONF_SWAPSIZE 的值修改成你想要的大小,如1024,其他信息不用改。

三、 重启 dphys-swapfile 文件服务并且重启树莓派:

sudo/etc/init.d/dphys-swapfile restart
sudo reboot

四、使用free -h查看大小:

free-h

原创文章,转载请注明: 转载自科技爱好者博客

本文链接地址: 修改树莓派交换分区 SWAP 的大小 (http://blog.lxx1.com/3289)

如果博客对您有帮助,请给我 打赏


修改树莓派交换分区 SWAP 的大小,首发于科技爱好者博客

]]>
http://blog.lxx1.com/3289/feed 0
解决树莓派“Sub-process /usr/bin/dpkg returned an error code (1)”故障 http://blog.lxx1.com/3262 http://blog.lxx1.com/3262#respond Sat, 13 Oct 2018 10:00:08 +0000 http://blog.lxx1.com/?p=3262 解决树莓派“Sub-process /usr/bin/dpkg returned an error code (1)”故障,首发于科技爱好者博客

在树莓派上安装python-imaging软件时出现了以下错误: Errors were encountere […]

解决树莓派“Sub-process /usr/bin/dpkg returned an error code (1)”故障,首发于科技爱好者博客

]]>
解决树莓派“Sub-process /usr/bin/dpkg returned an error code (1)”故障,首发于科技爱好者博客

在树莓派上安装python-imaging软件时出现了以下错误:

Errors were encountered while processing:
 python-imaging
E: Sub-process /usr/bin/dpkg returned an error code (1)

最后经过比较长时间的摸索,终于解决了这个问题,解决过程如下:

一、故障代码

我将详细的故障代码放在这儿:

pi@raspberrypi:/var/lib/dpkg $ sudo apt-get install python-imaging --reinstall
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 12 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
E: Internal Error, No file name for python-imaging:armhf

pi@raspberrypi:/var/lib/dpkg $ sudo apt-get install python-imaging
Reading package lists... Done
Building dependency tree       
Reading state information... Done
python-imaging is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 12 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Traceback (most recent call last):
  File "/usr/bin/apt-listchanges", line 28, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Setting up python-imaging (2.6.1-2+deb8u3) ...

二、解决办法

cd /var/lib/dpkg 
sudo mv info info.bak #做备份 
sudo mkdir info
sudo apt-get install python-imaging --reinstall #重新安装cmake包
sudo rm -rf info
sudo mv info.bak info #还原info
然后再sudo apt-get install python-imaging就不会出现上面的错误了

三、故障解决



故障终于解决,树莓派系统也可以正常升级了。



pi@raspberrypi:/var/lib/dpkg $ sudo apt-get upgrade
Reading package lists… Done
Building dependency tree
Reading state information… Done
Calculating upgrade… Done
The following packages have been kept back:
gstreamer1.0-plugins-bad libgl1-mesa-dri libgstreamer-plugins-bad1.0-0 lxpanel lxpanel-data
plymouth python-gpiozero python-openssl python3-gpiozero raspberrypi-ui-mods sonic-pi
xserver-xorg-input-all
0 upgraded, 0 newly installed, 0 to remove and 12 not upgraded.

原创文章,转载请注明: 转载自科技爱好者博客

本文链接地址: 解决树莓派“Sub-process /usr/bin/dpkg returned an error code (1)”故障 (http://blog.lxx1.com/3262)

如果博客对您有帮助,请给我 打赏


解决树莓派“Sub-process /usr/bin/dpkg returned an error code (1)”故障,首发于科技爱好者博客

]]>
http://blog.lxx1.com/3262/feed 0
树莓派(raspberry)启用root账户 http://blog.lxx1.com/3264 http://blog.lxx1.com/3264#respond Sat, 13 Oct 2018 08:32:47 +0000 http://blog.lxx1.com/?p=3264 树莓派(raspberry)启用root账户,首发于科技爱好者博客

树莓派使用的linux是debian系统,所以树莓派启用root和debian是相同的。debian里root […]

树莓派(raspberry)启用root账户,首发于科技爱好者博客

]]>
树莓派(raspberry)启用root账户,首发于科技爱好者博客

树莓派使用的linux是debian系统,所以树莓派启用root和debian是相同的。debian里root账户默认没有密码,但账户锁定,如果要切换到root用户,必须先解锁root账户。

当需要root权限时,由默认账户经由sudo执行,Raspberry pi 系统中的Raspbian,默认用户是pi 密码为raspberry

开启root账号,可以pi用户登录后,执行以下命令:

sudo passwd root

执行此命令后系统会提示输入两遍的root密码,输入你想设的密码即可。

这样就可以解锁root账户了,可以在树莓派上使用su root命令切换到root用户。

原创文章,转载请注明: 转载自科技爱好者博客

本文链接地址: 树莓派(raspberry)启用root账户 (http://blog.lxx1.com/3264)

如果博客对您有帮助,请给我 打赏


树莓派(raspberry)启用root账户,首发于科技爱好者博客

]]>
http://blog.lxx1.com/3264/feed 0
树莓派安装Gitlab打造私人Git服务 http://blog.lxx1.com/3266 http://blog.lxx1.com/3266#respond Sat, 13 Oct 2018 07:03:03 +0000 http://blog.lxx1.com/?p=3266 树莓派安装Gitlab打造私人Git服务,首发于科技爱好者博客

Gitlab是一款开源的Git版本管理系统,可以通过WEB界面访问公开或者私人的Git项目。gitlab的we […]

树莓派安装Gitlab打造私人Git服务,首发于科技爱好者博客

]]>
树莓派安装Gitlab打造私人Git服务,首发于科技爱好者博客

Gitlab是一款开源的Git版本管理系统,可以通过WEB界面访问公开或者私人的Git项目。gitlab的web框架使用了Ruby on Rails,可以轻松的浏览版本以及查看提交过的文件。具有一个代码片段收集功能,可以实现零散代码的收集、复用,还具有wiki、聊天、进度管理等功能。科技爱好者博客曾经介绍过如何 在ubuntu上快速安装Gitlib开源Git版本管理系统 ,本文章使用了价格低廉应用广泛的树莓派,来安装最新版本的gilab-ce,以下是安装过程以及遇到的各种问题。

gitlab安装指示页面,有官方的树莓派2上安装Gitlab的指示,说明在树莓派2上可以放心的安装了。选择”Raspberry 2″,打开安装步骤,一步一步来。

支持多个操作系统的gitlab安装包
支持多个操作系统的gitlab安装包
选择树莓派2的安装方法
选择树莓派2的安装方法

一、安装配置必要的依赖

sudo apt-get install curl openssh-server ca-certificates apt-transport-https
curl https://packages.gitlab.com/gpg.key | sudo apt-key add -

接下来如果想配置 Postfix 软件,以在树莓派上发邮件的话,可以安装,当然也可以跳过,在配置完gitlab后选择SMTP服务发送邮件。

sudo apt-get install -y postfix

二、添加Gitlab源并安装

(一)添加软件包:

sudo curl -sS https://packages.gitlab.com/install/repositories/gitlab/raspberry-pi2/script.deb.sh | sudo bash

结果这一步发生了错误,显示错误信息如下:

pi@raspberrypi:~ $ sudo curl -sS https://packages.gitlab.com/install/repositories/gitlab/raspberry-pi2/script.deb.sh |sudo bash
Traceback (most recent call last):
File "/usr/bin/lsb_release", line 28, in
import lsb_release
ModuleNotFoundError: No module named 'lsb_release'
Unfortunately, your operating system distribution and version are not supported by this script.
You can override the OS detection by setting os= and dist= prior to running this script.
You can find a list of supported OSes and distributions on our website: https://packages.gitlab.com/docs#os_distro_version
For example, to force Ubuntu Trusty: os=ubuntu dist=trusty ./script.sh
Please email support@packagecloud.io and let us know if you run into any issues.

根据错误信息提示,是找不到lsb_release了,果然在树莓派上执行 lsb_release 命令也都提示错误。

pi@raspberrypi:~ lsb_release -v
Traceback (most recent call last):
File "/usr/bin/lsb_release", line 28, in
import lsb_release
ModuleNotFoundError: No module named 'lsb_release'

root@raspberrypi:/home/pi# lsb_release -a
Traceback (most recent call last):
File "/usr/bin/lsb_release", line 28, in
import lsb_release
ModuleNotFoundError: No module named 'lsb_release'

想到我原来把树莓派上的python版本升级到3.6了,可能是因为这个发生了错误,果然,将python版本换回原来的pyton2.7后恢复正常

pi@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 8.0 (jessie)
Release: 8.0
Codename: jessie
lsb_release -a
lsb_release -a

终于解决了lsb_relea的故障

(二)继续安装Gitlab:

pi@raspberrypi:~ $ sudo curl -sS https://packages.gitlab.com/install/repositories/gitlab/raspberry-pi2/script.deb.sh | sudo bash
Detected operating system as raspbian/jessie.
Checking for curl…
Detected curl…
Checking for gpg…
Detected gpg…
Running apt-get update… done.
Installing apt-transport-https… done.
Installing /etc/apt/sources.list.d/gitlab_raspberry-pi2.list…done.
Importing packagecloud gpg key… done.
Running apt-get update… done.
The repository is setup! You can now install packages.

好,没有报错,终于提示可以继续安装了。

按照官网上的说明,进行下一步,安装gitlab-ce程序,这里要把EXTERNAL_URL=”http://gitos.net”中的http://gitos.net改成你自己的域名 :

sudo EXTERNAL_URL="http://gitos.net" apt-get install gitlab-ce

好家伙,这速度感人啊, 显示得近10小时才能下载完:

让树莓派下载了一晚上,第二天早上起来一看,竟然下载失败

Get:1 https://packages.gitlab.com/gitlab/raspberry-pi2/raspbian/ jessie/main gitlab-ce armhf 11.4.0-rc3.ce.0 [410 MB]
10% [1 gitlab-ce 39.6 MB/410 MB 10%] 16.Err https://packages.gitlab.com/gitlab/raspberry-pi2/raspbian/ jessie/main gitlab-ce armhf 11.4.0-rc3.ce.0
transfer closed with 362319539 bytes remaining to read
E: Failed to fetch https://packages.gitlab.com/gitlab/raspberry-pi2/raspbian/pool/jessie/main/g/gitlab-ce/gitlab-ce_11.4.0-rc3.ce.0_armhf.deb transfer closed with 362319539 bytes remaining to read
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

再次选择下载,发现速度快了很多,基本在400KB/s,估计是晚上时间镜像源在同步,造成速度比较慢。

(三)另一种方法安装

当然可以选择直接下载安装包,然后再安装,这样速度快了很多。

这个页面选择最新的gitlab镜像,并选择合适的版本,如我的操作系统是jessie,通 lsb_release -a 命令可以查看。之后在镜像页面选择 “Download the package”,复制到树莓派中下载即可,速度非常快。

如下载gitlab-ce_11.4.0-rc3版本:

pi@raspberrypi:~ $  wget --content-disposition https://packages.gitlab.com/gitlab/raspberry-pi2/packages/raspbian/jessie/gitlab-ce_11.4.0-rc3.ce.0_armhf.deb/download.deb
gitlab镜像
gitlab镜像
直接下载安装包的速度很快
直接下载安装包的速度很快

离线安装包下载完成后,使用dkpg命令安装:

sudo dpkg -i gitlab-ce_8.13.0-ce.0_armhf.deb

gitlab-ce这个软件包有12000多个文件,所以在树莓派上安装时间很长,下载这个软件包大约用了半小时,安装大约用了,,经过漫长的等待,终于安装成功。

三、进入gitlab登陆页面

在浏览器中输入树莓派的域名,即可打开gitlab登陆页面,使用root用户名登陆,密码在安装结束后有提示。

四、安装成功

root是管理员用户,只用它来添加普通用户,在普通用户里新建仓库来托管代码。

这样树莓派上就成功安装了Gitlab服务,可以打造自己的代码托管服务了。

树莓派上成功安装Gitlab
树莓派上成功安装Gitlab

五、gitlab实用命令附录

  1. 修改任何配置文件后都要输入如下命令使配置生效:
    sudo gitlab-ctl reconfigure
  2. 页面缓存清除:
    sudo gitlab-rake cache:clear RAILS_ENV=production
  3. Gitlab各组件启动:sudo gitlab-ctl star
  4. Gitlab各组件停止:
    sudo gitlab-ctl stop
  5. Gitlab各组件重启:
    sudo gitlab-ctl restart
  6. 禁用Gitlab开机自启动:
    sudo systemctl disable gitlab-runsvdir
  7. 启用Gitlab开机自启动:
    sudo systemctl enable gitlab-runsvdir

原创文章,转载请注明: 转载自科技爱好者博客

本文链接地址: 树莓派安装Gitlab打造私人Git服务 (http://blog.lxx1.com/3266)

如果博客对您有帮助,请给我 打赏


树莓派安装Gitlab打造私人Git服务,首发于科技爱好者博客

]]>
http://blog.lxx1.com/3266/feed 0
编写豆瓣相册下载器(python爬虫) http://blog.lxx1.com/3243 http://blog.lxx1.com/3243#respond Wed, 10 Oct 2018 10:01:17 +0000 http://blog.lxx1.com/?p=3243 编写豆瓣相册下载器(python爬虫),首发于科技爱好者博客

最近在慕课网上学习了一门python爬虫课程《Python开发简单爬虫》,并利用课程中学到的知识自己编写了一个 […]

编写豆瓣相册下载器(python爬虫),首发于科技爱好者博客

]]>
编写豆瓣相册下载器(python爬虫),首发于科技爱好者博客

最近在慕课网上学习了一门python爬虫课程《Python开发简单爬虫》,并利用课程中学到的知识自己编写了一个豆瓣相册爬虫,可以一键快速下载豆瓣相册中的图片,并且会自动下载大图。

在这里将这个爬虫分享出来,因为网络上的豆瓣相册下载器基本上都不能使用了,所以才想到自己开发一个,方便大家使用。

一、程序代码

github: https://github.com/xinxingli/douban_spider

本地下载:

二、爬虫运行截图

程序运行结果
程序运行结果

三、主要程序代码

调度程序 spider_main.py

from douban_spider import url_manger
from douban_spider import html_downloader
from douban_spider import html_parser
from douban_spider import html_outputer

class SpiderMain(object):
def __init__(self):
self.urls = url_manger.UrlManager()
self.downloader = html_downloader.HtmlDownloader()
self.parser = html_parser.HtmlParser()
self.outputer = html_outputer.HtmlOutputer()

def craw(self, root_url):
count = 1
self.urls.add_new_url(root_url)
while self.urls.has_new_url():
try:
new_url = self.urls.get_new_url()
print('爬取第 %d : %s' %(count, new_url))
html_cont = self.downloader.download(new_url)
new_urls, new_data = self.parser.parse(new_url, html_cont)
self.urls.add_new_urls(new_urls)
self.outputer.collect_data(new_data)

if count == 10:
break
count = count + 1
except:
print('craw failed')
self.outputer.output_html()


if __name__ == '__main__':
str = input("请输入要下载的豆瓣相册ID(例如1639309626): ")
root_url = 'https://www.douban.com/photos/album/'+str+'/'
print('即将开始下载相册: %s ' % root_url)
obj_spider = SpiderMain()
obj_spider.craw(root_url)

网址管理程序 url_manger.py :

class UrlManager(object):
def __init__(self):
self.new_urls = set()
self.old_urls = set()

def add_new_url(self, url):
if url is None:
return
if url not in self.new_urls and url not in self.old_urls:
self.new_urls.add(url)

def add_new_urls(self, urls):
if urls is None or len(urls) == 0:
return
for url in urls:
self.add_new_url(url)

def has_new_url(self):
return len(self.new_urls) != 0

def get_new_url(self):
new_url = self.new_urls.pop()
self.old_urls.add(new_url)
return new_url

网页下载程序 html_downloader.py

#from urllib import request
import urllib.request

class HtmlDownloader(object):
def download(self,url):
if url is None:
return None
response = urllib.request.urlopen(url)

if response.getcode() != 200:
return None
return response.read()

解析程序html_parser.py

from bs4 import BeautifulSoup
import re
import urllib.parse
import urllib.request

class HtmlParser(object):
def _get_new_urls(self,page_url,soup):

new_urls = set()

links = soup.find_all('img',width="201")
for link in links:
photo_url = link['src']
photo_url_list = list(photo_url)
photo_url_list[37] = 'l'
photo_url = ''.join(photo_url_list)

photo_name = photo_url[46:57] #取出连接中的图片名称
print('正在下载图片:%s.jpg'% photo_name)

urllib.request.urlretrieve(photo_url, 'photo/%s.jpg' % photo_name)


pages = soup.find_all('a', href=re.compile(r'https://www.douban.com/photos/album/\w*/\?start'))
for link in pages:
new_url = link['href']
new_full_url = urllib.parse.urljoin(page_url, new_url)
new_urls.add(new_full_url)
return new_urls

def _get_new_data(self,page_url,soup):
res_data={}
res_data['url'] = page_url
return res_data

def parse(self,page_url,html_cont):
if page_url is None or len(html_cont)==0 :
return None
soup = BeautifulSoup(html_cont,'html.parser',from_encoding='iso-8859-1')
#from_encoding='iso-8859-1'
new_urls = self._get_new_urls(page_url,soup)
new_data = self._get_new_data(page_url,soup)
return new_urls,new_data

输出程序 html_outputer.py

class HtmlOutputer(object):
def __init__(self):
self.datas = []

def collect_data(self, data):
if data is None:
return
self.datas.append(data)

def output_html(self):
fout = open('output.html', 'w', encoding="utf-8")

fout.write("<html>")
fout.write("<head><meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\"></head>")
fout.write("<body>")
fout.write("<table>")

for data in self.datas:
fout.write("<tr>")
fout.write("<img ")
fout.write("width=\"201\" src=%s />"% data['url'] )
fout.write("</tr>")

fout.write("</table>")
fout.write("</body>")
fout.write("</html>")
fout.close()

原创文章,转载请注明: 转载自科技爱好者博客

本文链接地址: 编写豆瓣相册下载器(python爬虫) (http://blog.lxx1.com/3243)

如果博客对您有帮助,请给我 打赏


编写豆瓣相册下载器(python爬虫),首发于科技爱好者博客

]]>
http://blog.lxx1.com/3243/feed 0
树莓派+Homebriage+米家智能产品搭建Siri智能家居 http://blog.lxx1.com/3220 http://blog.lxx1.com/3220#respond Thu, 04 Oct 2018 15:23:43 +0000 http://blog.lxx1.com/?p=3220 树莓派+Homebriage+米家智能产品搭建Siri智能家居,首发于科技爱好者博客

近年来,智能家居的产品越来越多,相应的配套设施更加完善,使得现在可以一句话控制家中的一切设备,使得家庭变得前所 […]

树莓派+Homebriage+米家智能产品搭建Siri智能家居,首发于科技爱好者博客

]]>
树莓派+Homebriage+米家智能产品搭建Siri智能家居,首发于科技爱好者博客

近年来,智能家居的产品越来越多,相应的配套设施更加完善,使得现在可以一句话控制家中的一切设备,使得家庭变得前所未有的智能高效,例如,当你出门时,只需要说一句,我出门了,家中的网关或者其他中控设备就会自动关闭各类灯光,空调、空气净化器等自动关闭,摄像头自动打开,家庭进入警戒模式,当你回家时,同样的灯光就会自动打开,空调也自动打开,其他家用设备也只需要一句话即可,不得不说,大大方便了我们的生活。

各家的智能产品比较多,尤其是在智能音箱上,各巨头都发布了自己的产品,如小米AI音箱、小度智能音箱、腾讯听听智能音箱等等。

智能音箱
智能音箱

Apple有家庭应用,但是适配的智能产品价格比较高,而国内小米的智能产品,价格低廉,以及其自家的米家应用,相比而言,适合国内,可以实现智能家居梦。

米家应用
米家应用

在IOS上的米家应用,可以很好的实现智能家居联动,但是无法用Siri唤醒。

这篇文章便通过树莓派搭建Homebriage来实现Siri控制米家的智能产品。

一、所需器件

树莓派

米家智能家庭礼品套装( 网关+人体传感器+门窗传感器+智能插座zigbee版+无线开关 )

米家温湿度计

iPhone

笔记本(配置时需要用到)

我买的米家套件和温湿度传感器:

米家智能家居礼品套装
米家智能家居礼品套装
米家智能家居礼品套装内部
米家智能家居礼品套装内部
所有的产品
所有的产品
米家温湿度传感器
米家温湿度传感器

二、安装Homebriage

有两种方法,一是直接安装相关的树莓派镜像,这类镜像已经安装好了Homebriage软件,更加方便使用,推荐使用;而是在树莓派官方的镜像 RASPBIAN JESSIE 上安装 Homebriage ,下面是步骤。

更新树莓派软件源:

sudo apt-get update
sudo apt-get upgrade

安装Node.js:

wget http://nodejs.org/dist/latest/node-v10.11.0-linux-armv6l.tar.gz
tar -xvf node-v10.11.0-linux-armv6l.tar.gz
cd node-v10.11.0-linux-armv6l
sudo cp -R * /usr/local/

安装完成后使用node –version命令查看,如果是这样的输出就说明安装成功:

pi@raspberrypi:~ $ node --version
v10.11.0

安装Avahi和相关依赖:

sudo apt-get install libavahi-compat-libdnssd-dev

安装HomeBridge和相关依赖软件包:

sudo npm install -g --unsafe-perm homebridge

安装homebridge 的小米插件homebridge-aqara:

sudo npm install -g homebridge-aqara

三、配置Homebriage

需要配置.homebridge目录下的config.json文件,将小米网关的MAC地址和password配置进去,使得连接在小米网关下的其他产品可以出现在iPhone的家庭应用中。

进入 .homebridge 目录,创建config.json文件,并复制以下内容:

nano config.json
{
"bridge": {
"name": "Homebridge",
"username": "CC:22:3D:E3:CE:30",
"port": 51826,
"pin": "031-45-154"
},
"platforms": [
{
"platform": "AqaraPlatform",
"sid": ["7c49eb17e9a7"], //改成自己网关的mac地址
"password": ["97DCB0D1FF60443F"]  //改成局域网通信协议的密码
}]
}

以上内容,其他信息不需要更改,只需要将 sidpassword 改成自己的。

获取米家多功能网关的 sid和 password,在网关的点开关于, 狂点屏幕下方空白处,开启开发者模式,就可以获取 sid和 password,视频教程如下。

将获取到的 sid和 password 填入到config.json配置文件中,注意sid要改成小写,但是 password 要保持原来的大小写不变,否则就不能通过家庭应用控制米家智能插座。

左边为sid,需改成小写
右边为password,保持大小写不变

四、启动Homebriage

homebridge

五、配置家庭应用

在家庭应用中点击添加配件

点击“没有代码或无法扫描”,添加Homebriage

然后将屏幕上显示的pin码输入

手机上的配置过程示例如下:

根据显示的传感器信息修改名称,添加到相应的房间即可,添加完之后的效果如下:

配置完成的家庭应用
配置完成的家庭应用

配置完之后就可以使用Siri来控制家庭了,示例如下:

查看客厅的湿度
查看客厅的湿度

查看客厅的温度
查看客厅的温度

打开客厅的插座
打开客厅的插座

原创文章,转载请注明: 转载自科技爱好者博客

本文链接地址: 树莓派+Homebriage+米家智能产品搭建Siri智能家居 (http://blog.lxx1.com/3220)

如果博客对您有帮助,请给我 打赏


树莓派+Homebriage+米家智能产品搭建Siri智能家居,首发于科技爱好者博客

]]>
http://blog.lxx1.com/3220/feed 0
树莓派升级(安装)Python3.6 http://blog.lxx1.com/3214 http://blog.lxx1.com/3214#respond Wed, 03 Oct 2018 09:13:53 +0000 http://blog.lxx1.com/?p=3214 树莓派升级(安装)Python3.6,首发于科技爱好者博客

如果你的树莓派或者其他Linux主机上安装的Python版本比较低,那么在安装Homeassisant等软件时 […]

树莓派升级(安装)Python3.6,首发于科技爱好者博客

]]>
树莓派升级(安装)Python3.6,首发于科技爱好者博客

如果你的树莓派或者其他Linux主机上安装的Python版本比较低,那么在安装Homeassisant等软件时,会出现一些故障导致无法安装,所以本文讲解如何在python版本比较低的树莓派上升级树莓派的版本。

一、安装Python3.6

更新树莓派系统

$ sudo  apt-get  update
$ sudo  apt-get  upgrade -y

安装python依赖环境

$ sudo apt-get install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev

下载python3.6版本源码并解压

$ wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
$ tar zxvf Python-3.6.1.tgz
$ cd Python-3.6.1

编译安装, 由于编译的过程比较长,我们可以将编译安装的几条命令合起来,这样你就可以去喝杯咖啡,等一段时间会提示安装成功的。

$ sudo ./configure && sudo make && sudo make install

二、建立软连接

安装python3.6后我们可以看一下python的版本

pi@raspberrypi:~ $ python --version
Python 3.4.2
pi@raspberrypi:~ $ python3 --version
Python 3.6.1

接下来需要将Python 3.6.1软链接到python上,这样方便使用。

先看一下python3和python命令分别在那

pi@raspberrypi:~ $ which python
/usr/bin/python
pi@raspberrypi:~ $ which python3
/usr/local/bin/python3

然后建立软连接

pi@raspberrypi:~ $ sudo mv /usr/bin/python /usr/bin/python3.4.2 

pi@raspberrypi:~ $ sudo ln -s /usr/local/bin/python3 /usr/bin/python

好,这样就成功建立软连接了。

三、测试是否成功

pi@raspberrypi:~ $ python --version
Python 3.6.1

OK,可以看到树莓派上的python已经成功升级到Python3.6.1了。

原创文章,转载请注明: 转载自科技爱好者博客

本文链接地址: 树莓派升级(安装)Python3.6 (http://blog.lxx1.com/3214)

如果博客对您有帮助,请给我 打赏


树莓派升级(安装)Python3.6,首发于科技爱好者博客

]]>
http://blog.lxx1.com/3214/feed 0
佳能EOS 77D单反相机开箱 http://blog.lxx1.com/3188 http://blog.lxx1.com/3188#respond Mon, 01 Oct 2018 09:58:51 +0000 http://blog.lxx1.com/?p=3188 佳能EOS 77D单反相机开箱,首发于科技爱好者博客

最近想出去玩,但是没有一个好的相机拍照,在EOS80D和EOS77D之间犹豫,但最后因为价格的原因,以及佳能7 […]

佳能EOS 77D单反相机开箱,首发于科技爱好者博客

]]>
佳能EOS 77D单反相机开箱,首发于科技爱好者博客

最近想出去玩,但是没有一个好的相机拍照,在EOS80D和EOS77D之间犹豫,但最后因为价格的原因,以及佳能77D发布比较新,采用的是双核处理器,可以说和80D不相上下,遂购买了佳能新出的EOS 77D,下面是77D的开箱。

我是2018年8月23号购买的,在京东上入手,快递速度很快,从山东淄博发货的,隔天晚上我回去的时候,小弟已经把快递给我拿回来了哈哈,回到宿舍快递就已经在桌子上呐,还是比较大的一个箱子。

然后就是拆啊拆~

把箱子里的东西全部拿出来

除了购买的EOS 77D 单反套机外,店家还赠送了不少东西,如上图右边的袋子,这里把赠送的单反相机包放在旁边了。

好,我们仔细看下这次开箱的主角:EOS 77D 数码相机,买的是EF-S 18-235的套装。

看一下套装的正面,标注了相机的主要特性,像2420万有效像素,45点全自动对焦,支持短片拍摄、支持WIFI功能,以及可以将拍摄的照片上传到佳能的存储中心等。

我们把包装上的塑料膜撕掉

正式的开箱之前我们看看这个防伪码

需要揭开才能查看识别二维码

用手机扫一下,显示是正品,应该是的,这东西也不好造假吧~

接下来真的要开封啦,嘶……

好已经打开啦,最上面是产品合格证

然后是基本使用说明书,这个是比较简单的版本的,但已经包含了使用的基本说明,如果要看详细的产品说明书,可以去佳能的官方网站下下载电子版本的说明书。

当当当,打开啦~

把所有的东西先拿出来,在桌面上合个影

嗯,就是这些东西啦~

接下来再看看赠品都有哪些

打开来看看,主要的东西有一个UV镜,一个16Gb的存储卡,一本摄影教程,一个清洁套装以及腕带等等

好,开箱的话基本就这些东西,接下来说说使用几天的感受吧。

一是感觉功能提升比较大,45点对焦以及双核处理器的加入,使得照片很清晰,另外具有wifi功能,拍完照片,可以很方便的传到手机上,在手机上稍作编辑,就可以发朋友圈啦;肩屏的加入,在拍摄前可以更加直观的快速修改相机的设置;内部自带间隔拍摄功能,以后拍延时摄影再也不用买快门线了。

综上,佳能77D这次的改进比较大,再加上6000元左右的价格,我是非常推荐购买的。

原创文章,转载请注明: 转载自科技爱好者博客

本文链接地址: 佳能EOS 77D单反相机开箱 (http://blog.lxx1.com/3188)

如果博客对您有帮助,请给我 打赏


佳能EOS 77D单反相机开箱,首发于科技爱好者博客

]]>
http://blog.lxx1.com/3188/feed 0
这就是写博客的动力 http://blog.lxx1.com/3183 http://blog.lxx1.com/3183#respond Sat, 29 Sep 2018 11:16:15 +0000 http://blog.lxx1.com/?p=3183 这就是写博客的动力,首发于科技爱好者博客

在找资料时,发现别人通过科技爱好者博客学习到了所需的东西,这时是非常开心的,自己总结的东西也是挺有用的,努力没 […]

这就是写博客的动力,首发于科技爱好者博客

]]>
这就是写博客的动力,首发于科技爱好者博客

在找资料时,发现别人通过科技爱好者博客学习到了所需的东西,这时是非常开心的,自己总结的东西也是挺有用的,努力没有白费,这也是博主坚持更新的原因。

回答引用了科技爱好者博客
回答引用了科技爱好者博客

原创文章,转载请注明: 转载自科技爱好者博客

本文链接地址: 这就是写博客的动力 (http://blog.lxx1.com/3183)

如果博客对您有帮助,请给我 打赏


这就是写博客的动力,首发于科技爱好者博客

]]>
http://blog.lxx1.com/3183/feed 0