Tag Archives: ubuntu

无用功

最近工作压力有点大,不开心,记一点笔记。

有个朋友经常问如何在 Windows 下安装 Nginx ,查了一下,还是不难。

首先去 Nginx 官网下载最新版 Nginx(当前版本是1.9.6) 然后解压,为方便起见最好放在磁盘根目录下比如 C:\.

接着打开 CMD 或者是 Powershell,执行如下命令:

cd c:\nginx-1.9.6
start nginx

然后可以用浏览器打开localhost,显示 “Welcome to Nginx!” 时就说明运行成功了.
若运行失败,可以进 logs 目录找到 Errors.log 查看问题所在.
网站配置文件那些也跟 Linux 下差不多,放在 conf 目录下,注意一下写的目录路径就可以.

上个月因为受不了放在卧室书桌的笔电 WiFi 渣信号,去淘宝买了块 USB 无线网卡。为了得到信号保证,选了大功率的 RTL8187 芯片,结果在 ubuntu 下驱动起来不如人意,基本上是10分钟一断。后来东搞西搞得到修复(算是修复吧).

想了一下,可能是这两个操作使然:

  • 给网卡手动指定一个静态IP(看起来并没有什么关系)
  • 限制 Interface 的 Speed

具体记录下.
设置静态IP:

sudo vim /etc/network/interfaces
# 编辑这个文件,修改对应的wlanX介面部分,比如我的wlan1
iface wlan1 inet static
address 192.168.1.125
gateway 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
dns-nameservers 192.168.1.1

限制网卡传输速率:

sudo iwconfig wlan1 rate 36M auto
36M是慢慢试出来的临界值,54M又会频繁断线
这个命令即时生效,重启失效.想开机生效可以添加到开机启动脚本

sudo vim /etc/rc.local
# 编辑这个文件,在 exit 0 这行之前添加一行,如下
/sbin/iwconfig wlan1 rate 36M auto

最近要用远程调用重写程序,需要多看看 Ice。

重映射 Caps Lock

经常将Caps Lock键错按成TabShift,于是把它换成Ctrl

from askubuntu.com

sudo vim /etc/default/keyboard

then find the line that starts with XKBOPTIONS, and add ctrl:nocaps to make Caps Lock an additional Control key.
For example,

XKBOPTIONS="lv3:ralt_alt,compose:menu,ctrl:nocaps"

then run

sudo dpkg-reconfigure keyboard-configuration

Grub rescue with dual boot win10

最初安装 win7&xubuntu 双系统将 grub 装在 mbr 上,不爽 7 便换到了 10,安装过程中发现 10 的开机动画跟 8 一样,忍不住想到以前 grub 无论如何也不能引导 8 启动。不知道这次是否又会折腾, unhappy。

不过还是想着先把 grub 恢复到 mbr 试试看,万一 10 跟 8 启动机制不一样呢。

# insert ubuntu livecd,then click 'trial'
sudo su
mount /dev/sda3 /mnt    //临时挂载老系统/boot分区到/mnt(这里我没有分/boot,因此就是/所在分区)
grub-install --root-directory=/mnt /dev/sda //此时弱没有报告错误便是成功
reboot  //重启后会看到熟悉的grub
sudo upgrade-grub   //进入老系统后将grub更新以便识别10
sudo reboot //可以看到10

看到 windows loader recovery mode 其实还是跟 win8 的一模一样,然而回车之后居然神奇般进入 win10 了,惊喜满满。

折騰OpenWrt之記錄

从 JD 上趁着 618 活动搞了台 Netgear WNDR4300 路由器,以为便宜了几十块钱,然而后来搜了搜它以前的价格再对照一看真是想呵呵了,商人真是精。
我常常有这样的想法,买的不是物有所值的东西就想尽可能提高它的价值,当然也跟我最近越来越不嫌折腾的状态有关。于是到手第二天就开始想要刷 OpenWrt (原计划是用一段时间不爽再说,其实原厂固件里已经有了 BT 下载和 USB 共享以及访客网络等功能,够用),接着参考着网上的资料完成了刷机和一些功能配置,毕竟首次接触,耗时大半天。这里温故一下这个过程,顺便也给可能被我安利购买的旁友们做个记录。

我暂时的刷机需求是

  • 所有电影、无损音乐放进换下来的机械硬盘上,通过路由器支持流媒体播放,一方面可以废物利用,节约本子的 SSD 空间,一方面可以让家里的其他设备(Ipad/Android 手机/WP 手机)流畅播放路由里的电影
  • 远程下载,想要晚上看电影的时候,想下什么东西的时候,白天在公司电脑上或者手机上添加一条任务,路由器便开始远程下载,晚上就可以回去看电影啦
  • 智能翻墙,手里拿着 Android 机我其实是无所谓的,本子上墙也挡不了我,不过住一起的朋友是有个 Ipad 并且还没有越狱,于是也来折腾一下(尽管他根本没有翻墙的需求)。在路由器里装个 shadowsocks ,智能分流国内国外线路,连接路由器的设备就可以直接翻墙了
  • 目前就想到这些需求,听说 OpenWrt 的扩展性很强,有了新需求再说

关于 OpenWrt 的介绍,官网有很详尽的百科

刷入固件

WNDR4300 的 Openwrt 固件是官方支持的,因此可以从官网直接下载,

较详尽的步骤:

  • 目前的最新发行版是 Barrier Breaker 14.07,
    系统下载链接为

http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/nand/openwrt-ar71xx-nand-wndr4300-ubi-factory.img

升级包链接为

http://downloads.openwrt.org/barrier_breaker/14.07/ar71xx/nand/openwrt-ar71xx-nand-wndr4300-squashfs-sysupgrade.tar

  • 进到路由器的管理界面,找到『固件升级』然后上传下载的 .img 文件,再确定,路由器便会自动开始刷机之后会自动重启连接到路由器就已经刷机成功了
  • 接着进入路由器管理界面找到 System/Backup/Flash Firmware/Backup/Restore,在 Restore backup 处选择下载得到的 .tar 文件,并 Upload archive 完成升级

基本设置

  • 刚刚刷入的 OpenWrt 默认是关闭 wifi 的,因此要用网线连接路由器设置。输入用户名 root ,密码为空,进入路由器管理页面,这时会提示创建密码,按照提示即可,并勾上远程 ssh 连接
  • 然后进到 Network/Interface ,设置 wan 口,点击 wan 对应的 Edit ,拨号上网的话 Protocol 处选择 PPPoE ,再输入宽带帐号跟密码再应用即可。等待拨号完成便可上网了
  • 接着需要开启 wifi ,进到 Network/Wifi, 对两个无线进行设置,加密选择 AES , HT mode 选择 40MHz ,并且勾上 Forece 40MHz mode , Country Code 可以选择 TW (貌似大家都这么选的…),最后再两个频段 enable 即可,若 5G 频段无效则重启路由器就好

进阶设置

现在是时候给路由器添加功能了

流媒体共享

我选择的方案是 Samba + Minidlna
首先为 OpenWrt 添加 USB 支持

  • 先准备一个空硬盘,格式化为 ext4 文件系统
mkfs -t ext4 /dev/(空硬盘分区号)
  • 再为 OpenWrt 添加 USB 支持,资料可参考官方Wiki,简单来说就是 ssh 连接到路由器后执行
opkg update
opkg install kmod-usb-storage block-mount kmod-fs-ext4

这时 USB 插上硬盘应该就能在/dev目录下看到sda1了,便可创建挂载点挂载硬盘

mkdir -p /mnt/share
mount -t ext4 /dev/sda1 /mnt/share

现在执行df -h应该可以看到新挂载的硬盘了

(不知不觉发现已经很久没继续写下去了)

当初是直接照着 wiki 敲的,直接贴地址了

安装 Samba

设置 Samba

也有图形界面设置 Samba

还有图形设置相关 youtube 视频,顺带也含有 minidlna

关于 minidlna 我是按照最后的那个 youtube 视频设置的,暂不赘述

远程下载

可供选择的方案有迅雷远程下载,和 aria2c(Linux 下不错的高速下载工具,支持 BT/磁力下载)

这里我选择的是迅雷远程下载,有个迅雷会员帐号这个选择还不错

当初我参照的设置

简单说就是用下载迅雷出的客户端,目前使用的是mips_be_mips32_linux2_6_36_uClibc0_9_33_eabio32_140507.rar,若是将来上面的链接失效应该是可以搜到迅雷官网的教程的。

不过这个貌似不能自动更新了,因此去论坛下载了一个

这个远程下载是用在 linux 系统上的,因此完全可以当作一个 linux 上的迅雷下载客户端。

实践了一下(Linux Mint),确实是可以,不过中间需要挂载个目录到/media,以便用作离线下载目录.

如果是用 aria2c ,参考这篇设置,这是一个可以在 linux 上替代迅雷的软件,不过在路由器上使用的话,需要在内网远程下载(因此可以搞个 VPS 上 VPN 再采用此方案)

智能翻墙

好吧最近我已经取消这个功能了,只能说广电网伤不起。

当初参考的有这个

命令备忘之搜索

Linux 下有多种文件查找方式,这里仅记录一下两个工具: locate & find.

locate:

这应该是最简单的查找方式。

locate index.html
# 用法如上,输出是一个命名为index.html文件的位置列表,可以使用通配符
# 有一些可选参数如下
# -q: 忽略错误信息
# -n m: 显示前m个结果
# -i: 忽略大小写
# -l 0: 快速搜索

find:

这是查找文件最好的方式之一。

find / -name 'crawlportal.py' 2>/dev/null
find / -name 'crawlportal.py' 2>errors.txt
# 其中,/ 搜寻的起始目录
# -name 搜寻的文件属性为文件名
# 2 指定错误输出流
# /dev/null 往这个设备里发送的信息都会被丢弃,这里的目的就是为了不显示错误信息

find / -mount -name 'win*' -size -100k
# 其中,-mount 忽略已挂载的文件系统
# -size -100k 搜寻文件的大小在100k一下

find / -name '*blahblah*' -amin -10
find / -name '*[0-9]*' -mmin -10
# 分别是查找最近10分钟访问和最近10分钟修改过的文件

find /home/yw ! -name '*[0-9]*'
# 查找文件名中不包含数字的文件

#突然发现find参数好复杂,暂于此,用到再补充.

#Continued:
-type 表示指定一个文件类型,d代表目录,f代表普通文件 

远程连接

某不久前搞了个电脑桌,并把家里的电脑硬件升级了一番,看起来竟然还能让那台铁王八像模像样运行了起来。于是终于晚上不用像以前没事就待公司去,在家也能工作学习看电影。但毕竟工作才是正道,那么当然要把公司的电脑跟自己的笔记本联通咯。考虑了一下网络环境,便找到了这样一些手段:

  • ssh反向代理

这种方法就是通过ssh把端口号进行映射。由于家里是长城宽带,笔记本得到的ip是NAT路由给的,并不能得到公网ip啥的,同时公司的电脑又在防火墙后面,因此ssh反向代理是一个很好的解决方案。不过使用前需要拥有一台能合法访问的具有公网ip的服务器,对于这个可以买一个VPS解决:

  1. 在公司电脑上
$ ssh -NfR 2222:localhost:22 username@vps

上面的命令作用是,连接VPS并将公司电脑上的22端口远程转发到VPS的2222端口上。-R参数是远程转发,整个过程是这样:VPS收到发往2222端口上的数据会被ssh server将其加密转发到笔记本的ssh client上,然后笔记本上ssh client将收到的数据解密并转发到监听的22端口上,-f参数是让ssh连接后台运行,-N参数是使ssh连接不执行指令,也就是说仅仅是为了转发端口。上述指令执行结束后可登录VPS执行netstat -tnl | grep 127.0.0.1,若回显里包含2222端口则验证指令执行成功。

2. 在VPS上

$ ssh -g -N -f -L 2333:localhost:2222 localhost

上述指令作用是,将端口2222本地转发到2333上,并允许远程主机访问本地转发的端口。-g参数是允许远程连接本地转发的端口,-L参数是本地转发,在VPS上,本机发往2333的端口被ssh client接受并加密转发到本地(语义未描述清晰?),然后本地ssh server收到并解密数据并转发至本地的2222端口。上述指令执行结束后可执行netstat -tnl | grep 127.0.0.1,若回显里包含2333端口则验证了指令执行成功。

3. Done!现在,在笔记本上执行

$ ssh 公司电脑username@vps -p2333

此时已经ssh登录了公司电脑,有了ssh再配合root便能天下我有:)。这个时候本来应该结束了,但是解决方案还不完善,若ssh连接碰到网络问题不能自动重连,若是执行reboot指令也会丢失ssh连接无法恢复(都是实际使用的泪啊)。还好有autossh可解决问题。

$ sudo apt-get install autossh

譬如将第1步换成autossh就是autossh -M 0 -NfR 2222:localhost:22 username@vps,对了,在这之前还要把root账户ssh的id_rsa.pub交给vps以便省密码登录,执行ssh-copy-id user@vps。最好试试是否可以拥root账户ssh连接到vps,如果不行便只有手动上传,

# ssh-keygen -t rsa -C "email"
# scp /root/.ssh/id_rsa.pub user@vps:/home/user
# ssh user@vps
# cat id_rsa.pub >> .ssh/authorized_keys

然后需要将autossh的那条命令写到/etc/rc.local文件中,具体是在exit(0)之前。这里的脚本因为是root执行的,所以之前需要用root账户的id_rsa.pub(试错了很久才找到原因)

  • OpenVPN

用了一段时间的ssh反向代理后发现又很多不足,比如,虽然有了root可以做任何事,但用笔记本访问公司电脑上临时调试搭建的服务器还是很麻烦的;有时候也需要用公司的电脑访问放在家里的笔记本,这时又要去反向代理建立一遍;我又多出一台电脑又要费事的走一遍,等等。最后还是觉得,把自己用的电脑都放在一个虚拟的子网里还是更方便,于是便开始折腾了OpenVPN..
搜了搜教程,还比较顺利,虽然过程看着多。对于服务器,当然需要一个公网id,至于用 DDNS 解析神马的在碰到长城宽带就只能呵呵了。用的是阿里云的服务器。先配服务器:

  1. 安装openvpn服务端,根据不同的linux发行版而异,具体可查文档。
  2. openvpn服务端配置
    下载easy-rsa,git clone https://github.com/OpenVPN/easy-rsa,然后进入项目目录
$ cd easyrsa3
$ mv vars.example vars
$ vim vars

然后修改如下需要修改的地方(改为自己的信息)

set_var EASYRSA_REQ_COUNTRY     "CN" 
set_var EASYRSA_REQ_PROVINCE    "Shanghai" 
set_var EASYRSA_REQ_CITY        "Shanghai" 
set_var EASYRSA_REQ_ORG         "Blahblah" 
set_var EASYRSA_REQ_EMAIL       "xxxxx@xxxx" 
set_var EASYRSA_REQ_OU          "blahblah"

3. 初始化配置

./easyrsa init-pki

如果成功的话,会在当前目录下创建pki目录,用于保存证书文件。
接下来是设置各种密码时间,注意记录

4. 创建根证书

./easyrsa build-ca

创建过程中需要输入根证书的密码以及 Common Name。如果创建成功,则会在 pki/private/ 目录下创建 ca.key 私钥文件以及 pki/ 目录下创建 ca.crt 证书文件。


5. 创建服务器证书

./easyrsa build-server-full server

创建过程和根证书创建类似,需要输入证书的密码以及上一个步骤创建根证书的密码。
如果创建成功,则会在 pki/private 目录创建 server.key 私钥文件。在 pki/issued 目录创建 server.crt 证书文件。

6. 创建dh证书

./easyrsa gen-dh

7. 创建客户端证书

./easyrsa build-client-full yourclientname

前面两次是输入你的用户密码,第三次是输入ca证书的密码

8. 配置服务端
把上述步骤创建的 ca.crt, server.crt, server.key, dh.pem 拷贝到 openvpn 的 keys 目录,没有就创建一个,然后编辑或创建 server.conf 文件,主要的参数修改照着文档来就行了,主要关注的是那4个文件的路径,还有就是server 10.8.0.0 255.255.255.一行决定虚拟子网的范围,client-to-client取消注释以便让虚拟子网内的客户端互通,push "redirect-gateway def1 bypass-dhcp"注释此行可以仅让对虚拟子网的访问经过服务器而不使外网访问也通过,一般翻墙的时候搭的VPN可能会用的到。

9. 接下来是修改系统配置
打开服务器路由功能这一步也不知道需要不需要,按着教程来的直接开了没有考证

vim /etc/sysctl.conf

修改以下内容:net.ipv4.ip_forward = 1
然后使内核参数生效:sysctl -p
不过估计这个转发是跟翻墙需求有关吧

10. 启动OpenVPN

openvpn --daemon --config server.conf

server.conf的位置根据自己的写就省了,root权限启动

这样服务器端就完成配置了,接下来是客户端,那就很方便了,需要一个配置文件和easyrsa生成的ca.crt,yourclient.key以及yourclient.crt文件,如果要开机就启动的话配置文件后缀应为.conf,

client
dev tun
proto udp
remote 服务器IP 端口号
remote-cert-tls server
resolv-retry infinite
nobind
persist-key
persist-tun
# 这4个文件的绝对路径要正确,yourclient.pass里存放密码,可自行搜索加密方法
askpass yourclient.pass
ca ca.crt
cert yourclient.crt 
key yourclient.key 
comp-lzo 
verb 3

然后可以启动openvpn了,sudo service openvpn start(我测试的Linux Mint),traceroute一下其他客户端可以看出来虚拟子网工作了。

命令备查之tar/zip

一直没有记清楚 linux 下解压各种文件的命令,做个备查:

tar -xvzf tarfile.tar.gz

这个指令会将一个 tar.gz 归档文件解压到当前目录下,常用到的参数意义:
-x或者-t:-x解压文件-t列出文件
-v:显示详细输出
-z或者-j:-z指定一个gzip文件-j指定一个bzip文件
-f:读取指定的归档文件
-C:指定解压目录,目录必须存在

tar -czf tarfile.tar.gz *

这个指令会将当前目录下的所有文件打包成 tarfile.tar , 并且用 gzip 压缩,生成 gzip 压缩包 tarfile.tar.gz。参数同上所示。

Linux 下另一个压缩解压的命令 zip:

unzip -o -d /home/yw/ zipfile.zip

这个指令会把 zipfile.zip 解压到/home/yw/目录下,常用到的参数意义:
-o: 不提示直接覆盖文件
-d: 指定解压缩到目录

zip -r zipfile.zip /home/yw/ someOthers

压缩,-r参数用于递归目录中的文件.

Update:
tar 现在可自动识别解压文件格式,因此可直接执行解压而不用指定解压格式:

tar -xvf tarfile.tar.xz

rar格式的解压,用 unrar-nonfree

unrar-nonfree x rarfile.rar

记录一次ubuntu升级后黑屏的解决方法

睡觉之前手一抽把 xubuntu 升级了,看到里面有关于 video card 的更新不觉心头一紧,更完之后想确认一下就重启了下,结果就按剧本来了,开机黑屏了。赶紧重启多两次,问题照旧,瞬间睡意全无。用手机经过一番搜索,最终还是解决了问题。
开机后在 grub 处选择进入 recovery 模式,然后开启网络并用 root 登录,就能查看 /var/log/Xorg.0.log,搜索 EE(代表错误信息)就能找出进不去桌面的原因,一般是第一个 EE 就能知道,后来发现是 fglrx 的配置文件不正确,导致各种模块都找不到引发一大串的 EE,但我并不想去设置配置文件,就想把 fglrx 这个东西重装一遍。然后我找到一个移除这个显卡私有驱动并换回开源驱动的方法:

sudo apt-get purge 'fglrx*'
sudo update-alternatives --remove-all x86_64-linux-gnu_gl_conf
sudo apt-get install --reinstall libgl1-mesa-dri libgl1-mesa-glx

执行完指令之后重启便能恢复为开源驱动便能进入桌面系统,然后再到 additional drivers 安装私有显卡驱动。搞定。