Tag linux

2019

Shadowsocks 配合 bestroutetb 实现智能分流

之前虽然在软路由上配好了 shadowsocks 的透明代理,本着生命不息折腾不止的心态,一直想尝试一下国内/国际流量的智能分流。 基于目的 IP 地址的智能分流目前有两个流派: chnroutes 的方案很简单直接,提取所有中国的 IP 地址段,只要不在范围内的一律走国际出口。优点是非常精准,配合 dnsmasq-china-list 解决掉 DNS 污染之后能够非常准确的对国内/国际流量进行分流。缺点也很明显,中国的 IP 地址段数量太庞大,我试着生成了一下,总共产生了8k条以上的路由表项,实在是多得有点可怕。 bestroutetb 项目则提出了一个新的思路,将全球的 IP 地址段分为三类: 一定走国内出口的 IP 段(中国 IP 段) 一定走国际出口的 IP 段(默认美国/英国/日本/香港 IP 段,可以自定义) …

#shadowsocks#bestroutetb#linux

HPE Microserver Gen10 安装 Debian 10 的一些问题

之前说到买了台 HPE Microserver Gen10 当作家用服务器和软路由使用,装的系统是最新的 Debian 10 buster,然而在安装和配置的过程中遇到了一些问题,在这里简单记录一下: 问题1:没有图形显示 原因:虽然 HPE Microserver Gen10 内置集成显卡,但是默认安装的 Debian 系统缺少相应的驱动 解决方案:在 GRUB 启动时在内核参数中加入nomodeset,一劳永逸的解决方案是启用 non-free 软件仓库并安装firmware-linux-nonfree包。 问题2:光驱位安装的磁盘可以识别,3.5寸硬盘位安装的磁盘无法识别 原因:Marvell 88SE9230 SATA 控制器有 bug,在开启 IOMMU 的情况下会无法识别磁盘,而 AMD …

#debian#linux#microserver

使用 Debian 服务器作为家庭网关

前一段时间买了台 HPE Microserver Gen10,考虑到这货有两块千兆网卡,总觉得不把它当成路由器/网关来用有点浪费,于是忍不住拆掉了原来的 EdgeRouter X,开始折腾软路由。 基础配置 连接 Microserver Gen10 有两块网卡,在 Debian 中分别对应 enp2s0f0 和 enp2s0f1,这里我将 enp2s0f0 作为LAN口,连接到家里的交换机,用于连接各种有线设备和无线AP;另一个 enp2s0f1 作为WAN口,连接到光猫。 系统 没什么好说的,习惯用 Debian,其他主流 Linux 发行版应该都可以用。不过在装 Debian 的过程中遇到了些 Microserver 特有的坑,回头再写篇文章详解。 PPPoE …

#debian#linux#router#gateway#network#microserver

2012

时间这件小事

今天因为一些原因换上了备用的一块硬盘,运行了一下Windows,晚上再开Linux时,发现系统时间变了,整整比原来晚了8个小时,很明显是时区的问题。 简单查了一下,没想到在时间的问题上Windows和Linux竟然有着截然不同的做法。 对于Linux来说,系统里有两个时钟:硬件时钟和系统时钟。硬件时钟是计算机主板所维护的时钟,而系统时钟则是Linux内核所维护的时钟,Linux系统启动时从硬件读取时间,然后二者就分道扬镳了。 通常硬件时钟设置为UTC时间(Coordinated Universal Time),数值上与GMT(Greenwich Mean Time)相等,Linux系统以硬件时钟的时间为基础,根据事先设置的时区,生成相应的系统时间。之后任何对系统时间做的改动都不会影响到硬件时钟。 而对于Windows来说,事情被「简化」了,系统时钟即硬件时钟,硬件时钟的时间也就是localtime,任何对系统时间做的改动都会写入硬件时钟。 这样就很好理解发生在我的电脑上的现象了,当我使用Windows时,Windows系统将我原本设置为UTC的硬件时钟时间作为当前的localtime并进行了NTP同步,也就是调快了8个小时(东八区),并写入了硬件时钟。 当我再次启动Linux时,Linux却将此时间当作UTC时间,在此基础上又调快了8个小时,这就造成显示的时间比实际时间快了8个小时的错误。

#linux#Windows#时间

使用tar安装Linux

前两天在给Toni童鞋安装ArchLinux时,深感虽然ArchLinux的安装过程已经相当简单,但是所有软件包都要重新安装一遍,所有系统设置都需要重新配置还是相当费事费力。尤其是需要批量安装系统时,就更显得效率低下了。 tar是Linux上常用的打包/解包工具,而tar也可以用来安装(克隆)Linux系统。我们可以使用tar先将一台机器上已经安装并配置完善的Linux系统打包,然后再到目标机器上解包,就达到了安装(克隆)Linux系统的目的。 对系统进行打包 在打包的过程中同时使用exclude参数排除掉不希望被打包的目录。 tar zcvpf /backup/full.tar.gz -C / \ --exclude=backup --exclude=lost+found/* \ --exclude=mnt/* --exclude=home/* \ --exclude=dev/* --exclude=proc/* \ --exclude=tmp/* --exclude=sys/* . 务必要加上tar的p参数,以保证打包之后的文件权限不被修改。 解包文件到目标分区 使用任何一张LiveCD光盘或者U盘启动,将目标分区挂载,比如挂载到/mnt/arch。 将之前打包的系统文件解包 tar zxvpf full.tar.gz -C …

#linux#ArchLinux#tar

基于Nginx+uWsgi的Django一键部署脚本

在Nginx上使用uWsgi代替FastCGI运行Django不仅性能可以提高数倍,而且还可以具有低内存占用,部署简便等诸多优点。 为了方便在服务器上部署Nginx+uWsgi,我写了个一键部署脚本,在CentOS 6.2上已经成功安装,其他平台目前尚未测试。 注意:在使用此脚本之前需要先安装Nginx,Nginx的安装方法可以自行Google,在此不再赘述。 Django+uWsgi一键安装脚本 下载脚本https://github.com/chon219/Code/blob/master/scripts/uwsgi-install.sh 执行 chmod +x uwsgi-install.sh 给该脚本赋予可执行权限 然后以root身份执行脚本 ./uwsgi-install.sh 根据提示输入网站的根目录路径,比如/home/wwwroot 即可开始安装。 安装完成后,uwsgi服务将会自动添加到系统启动项中,毋须手动添加 管理uWsgi服务 启动uWsgi: /etc/init.d/uwsgi start 停止uWsgi: /etc/init.d/uwsgi stop 重启uWsgi: /etc/init.d/uwsgi restart 注意:每次修改Django应用之后,都需要重启uWsgi服务使新的应用生效。 添加多个Django应用 下载uWsgi-app脚本https://github.com/chon219/Code/blob/master/scripts/uwsgi-app.sh 执行 …

#Django#linux#nginx#CentOS#uWsgi#脚本#web

2011

将Arch Linux安装到U盘

一直打算在U盘上安装一个系统,一方面可以用来救急,万一主系统出了问题不至于没有电脑可用;另一方面我的笔记本电池很不给力,而使用U盘系统时相对比较省电,在不得不使用电池的时候还可以维持较长的续航时间。 虽然有很多方法可以直接将LiveCD的镜像写入U盘做成LiveUSB,但是这样在U盘里构建的Live系统并没有办法保存系统的更改,而且软件和配置也不方便定制。更重要的是没有找到适合自己使用习惯(Arch Linux)的Live系统,在尝试过几个基于Arch的Live系统感觉均不太满意之后,决定还是直接在U盘中安装系统。 其实在U盘中安装Arch Linux的过程和在硬盘上安装也基本一样,无非是安装的目的载体不同罢了,有了以前安装Arch Linux的经验,倒也不是很困难。 我使用的是一块8G的U盘,全部格式化为ext3文件系统,并挂载到/,考虑到U盘的使用寿命,就没有另外分区给swap了,再说,以现在电脑的内存,也基本用不着swap是吧。 需要注意的几点: 在进行系统配置时,务必记得修改/etc/mkinitcpio.conf,然后在HOOKS中加入对USB的支持,否则开机会无法正常从USB启动。 HOOKS="base udev autodetect pata scsi sata usb filesystems" 如果在U盘中安装了GRUB,则一定要修改/boot/grub/menu.lst,将启动参数中的(hdx,0)改为(hd0,0),因为不管U盘的位置是什么,选择从U盘启动时GRUB总是会将其识别为hd0。 而且由于U盘位置的不确定性,不能再使用root=/dev/sdb2这样的启动参数,而必须改用UUID,比如root=/dev/disk/by-uuid/ef331508-87eb-4d6d-9427-ce4bcc7af812,其中的UUID可以通过blkid命令获得。 为了让系统有足够的时间加载完驱动再去寻找root,最好在参数里加入rootdelay=n,其中n是时间,单位为秒。 这是我的menu.lst文件,仅供参考: # (0) Arch Linux title Arch Linux root (hd0,0) …

#ArchLinux

在Arch Linux上运行Machinarium(机械迷城)

Machinarium(机械迷城)是我最喜欢的一个解密游戏,由于游戏是采用flash开发的,自然可以跨平台运行。之前用Ubuntu时曾经尝试过在Linux安装Machinarium,但是尝试了很多次一直没有成功,只好作罢。 昨天逛AUR的时候发现AUR里面竟然也有Machinarium,于是又萌生了在Linux上安装Machinarium的想法。 虽然AUR里有Machinarium的PKGBUILD文件,但是本身并不提供游戏文件,因此需要自己去网上下载游戏镜像,然后在Windows上安装, 安装完成后将C:\Program Files\Machinarium目录复制到Linux上,然后需要到官网下载两个Patch,解压缩后放到同一目录下面。此时如果操作正确的话,该目录下面应该会有00 01 10 11这几个子目录和一个名为Machinarium的可执行程序。 Patch 01 Patch 02 接下来,用tar将Machinarium目录打包,操作: tar -zcvf Machinarium_full_en.tar.gz Machinarium 然后就可以使用yaourt -S machinarium命令安装游戏啦,安装过程中会提示找不到游戏文件,这时候这需要输入先前打包的Machinarium_full_en.tar.gz的路径即可,剩下的操作即可自动完成。 安装完成后可以直接输入machinarium命令或者在程序菜单里点击machinarium的图标即可开始游戏,或者在浏览器输入地址/usr/share/games/machinarium/machinarium-browser.swf就可以在浏览器里开始游戏了~ 但是...我在安装完成后,输入machinarium运行之后只会出来一个flash的窗口而没有游戏,而在浏览器中运行则没有任何问题,这种情况可能是没有加载游戏文件导致的,解决方法是修改/usr/bin/machinarium中的内容,将其中的./Machinarium "$@"改成./Machinarium machinarium-browser.swf就可以顺利运行游戏了~ Have fun!

#linux#ArchLinux#Machinarium

AUR ipv6代理

最近回到学校发现AUR(https://wiki.archlinux.org/index.php/Arch_User_Repository)总是连不上,导致很软件包无法更新,于是打算在VPS上设置一个AUR ipv6反向代理。 nginx设置反向代理很简单,只需在配置文件nginx.conf中添加 server { listen 80; listen [::]:80; server_name repo.archlinux.fr; location / { proxy_pass http://repo.archlinux.fr/; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 若要使用AUR ipv6代理,只需在/etc/hosts中添加 2607:f878:3:11:0:302:1191:2 repo.archlinux.fr …

#IPv6#ArchLinux#nginx#AUR#代理

Arch Linux安装笔记

自从用上Arch Linux之后就一直打算写这篇文章,但是由于种种原因一直迟迟没有动手,现在是时候写点东西记录一下了。 之前一直使用的系统是Ubuntu 10.04,用着感觉也挺好的。但也许是新鲜感过去了吧,用着用着对Ubuntu感到有点儿厌倦,而且看到Ubuntu 11.04即将使用的是unity桌面,有我最讨厌的dock和全局菜单,于是更加不想升级Ubuntu。 这时候刚好赶上GNOME 3快要发布,于是装了个Fedora 15 alpha尝尝鲜,虽然alpha版的系统BUG多得不得了,一分钟能崩溃掉好几个组件, 但还是对GNOME 3很有好感。后来有幸又去参加了北京的GNOME 3 Lauch Party,更加坚定了用GNOME 3的决心。 当时一边用着Fedora 15的测试版,一边等着五月份Fedora 15的正式发布,还真的以为从此就要一直用Fedora下去呢,结果——看到很多人在玩Arch Linux,于是抱着试试看的心态安装了一下,然后一发不可收拾,成了Arch的坚定拥护者,呵呵。 废话少说,说一下我安装Arch的过程吧。 准备安装镜像 Arch Linux跟其他大部分的主流发行版最大的不同之处在于它是滚动更新的,也就是说没有具体的版本号,我安装的时候,选择的是最新发布的安装镜像archlinux-2010.05-core-x86_64.iso,其实也有近一年了,不过这都没有关系,因为系统安装完成之后还要进行软件更新的。 安装镜像下载完成之后,刻盘,重启,安装——之所以没有采用U盘安装是因为试了好多次都没法启动...不知道为嘛。 安装 安装的过程基本可以参考Arch Wiki的Beginners Guide Arch的一个很大的优势是有相对比较完善的中英文wiki,不过中文wiki的资料有时候比较旧,如果有不太确定的地方可以参考一下英文版的wiki。 正因如此,参考中文wiki安装时还是绕了一些弯路的。 …

#linux#ArchLinux

使DeadBeef播放器支持gbk编码

平时比较爱收集无损音乐,其实只是一种嗜好吧,就我电脑那破声卡,无损听起来和320kbps的mp3没啥区别的。 好在有校内的PT站,各种无损音乐下载起来非常方便也非常迅速。只是,不管是ape还是flac的无损音频文件,往往一张专辑就是一个整轨的文件,播放的时候需要另外的cue文件进行分轨。 以前用KDE桌面时我喜欢用Amarok播放器,现在用GNOME桌面比较喜欢用DeadBeef播放器,都是支持cue文件分轨的。跟Windows上foobar2000之类的播放器通过cue文件加载ape/flac文件的方式不同,Amarok和DeadBeef的做法是先加载ape/flac文件,然后再加载同目录下的cue文件。 不管怎样,这对于中文用户来说就产生了一个不可回避的问题:乱码。 根本原因在于,Linux上采用的中文编码大多数是UTF-8,而Windows上采用的中文编码是gbk,这就导致Windows上生成的文本文件(cue文件也是文本文件)如果采用了默认的gbk编码,在Linux上使用时就会产生乱码。 如果下载的cue文件采用了gbk编码,在DeadBeef播放器里加载时就会乱码。 好在DeadBeef是一个完全开源的软件,这也就意味着其源代码是完全可以获得并且修改的。如果修改源码使其支持gbk编码,岂不是就可以解决乱码的问题了? 答案是肯定的。 在Google上搜索了一下,发现Ubuntu中文论坛上已经有人给出过决方案(看来我不是最早想到的...唔) 但是,DeadBeef版本更新得很快...原来的代码已经没法直接使用了,还是得自己动手修改。 首先,从DeadBeef项目主页下载源码,最新版本是0.5.1 。 解压源码之后,找到junklib.c文件,和Ubuntu中文论坛上提供的做比较,发现需要修改一下几处: 第687行, enc = "cp1251";修改为enc = "gbk"; 第769行,enc = "cp1251"; 修改为enc = "gbk"; 第3388行,return "cp1251";修改为return "gbk"; 第3390行,return "cp1252";修改为return …

#linux#DeadBeef

WallProxy的配置与使用(Linux/Windows)

一直以来主要的翻墙工具都是GAppProxy,但是GAppProxy无法解决SSL问题,HTTPS会弹出证书无效的警告,让我一直很头疼。在学校的IPV6上网时有IPV6环境还可以使用IPV6的一些代理,在家里就不得不使用基于GAE的代理了,因此我找到了GAppProxy的替代解决方案——WallProxy。 获得WallProxy源码 下载WallProxyV0.3.9b2的源码 http://wallproxy.googlecode.com/files/wallproxyv0.3.9b2.7z 解压缩之后得到gae_server,php_server,local,local_video,module等几个目录。 其中gae_server是GAE版服务器端源代码,php_server是PHP版服务器端源代码,local是本地客户端,local_server是本地视频客户端,可用来下载/观看视频,module是windows下python库文件的兼容包。 将服务器端源码上传至服务器 在http://appengine.google.com中新建一个GAE应用。 进入gae_server目录,修改app.yaml文件中的application:为自己新建的GAE应用的ID。 然后执行命令python appcfg.py update gae_server将源码上传至GAE。 服务器端的配置 将源码上传至服务器之后,用浏览器访问http://you-app-id.appspot.com/fetch.php(将you-app-id更换为应用的ID) 然后登录http://appengine.google.com,在GAE的控制面板上找到Data>>Datastore Viewer 选中WPConfig(如果找不到WPConfig再用浏览器访问一遍http://you-app-id.appspot.com/fetch.php) 打开id=*的项目,设置cryptomode(加密模式)和siteKey(服务器端密码) 加密模式可以从下面选择一个: * AES-CBC * ARC2-OFB * ARC4--32 * Blowfish-CFB * CAST-CBC …

#linux#Windows#WallProxy

2010

Linux系统下配置GAppProxy

虽说换到linux系统了,但是GAppProxy这么有用的东西可不能扔下啊,于是我就开始研究怎样在linux下使用GAppProxy。 说来其实挺简单的,暑假的时候已经搭建好了FetchServer,现在只需要配置客户端就行了。 原来在Windows下一直都是用官方提供的一个GUI的客户端,用起来特别简单,只需要输入FetchServer的URL就行了。 而现在在linux下面则必须得编辑配置文件了,首先去下载GAppProxy的python版客户端http://gappproxy.googlecode.com/files/localproxy-2.0.0.tar.gz 解压缩之后修改配置文件proxy.conf 默认的配置文件是这样的 # GAppProxy configuration # listen_port listen_port = 8000 # local_proxy #local_proxy = host:port # If local proxy needs authentication: #local_proxy = user:passwd@host:port # fetch …

#linux#GAppProxy#GAE