Category: Opensource

  • 土法制造 DDNS

    自从上次我用树莓派(raspberry pi)做了个家用服务器后, 动态域名解析(DDNS)就从一种懒得过问的技术变成必须的解决方案了, 因为家里的 ADSL 的 IP 地址不是固定的, 偶尔会变化. 我看了若干现成的 DDNS 服务, 虽然有免费选项, 但限制颇多, 甚至有的要插播广告… 其实 DDNS 没啥技术含量的东西, 基本逻辑就是在客户端发送请求到服务端, 一旦发现客户端的外部 IP 地址已变, 就更新对应的 DNS 记录. 首先来写客户端, 使用的是我擅长的 Shell Script: #!/bin/bash url=’http://direct.raynix.info/ip.php’ last=’/tmp/extip’ rcpt=’me@example.com’ extip=`curl $url` echo $extip |diff $last – if [ $? == 0 ]; then exit 0 else logger ‘last IP: ‘ `cat…

  • 小试 MariaDB Galera Cluster

    前些时, 难得老板关注新技术, 哈哈, 我于是有机会尝试一下数据库服务器集群. 什么是 Galera Cluster? 简单的说就是3个或以上的 MariaDB 服务器相互作为镜像. 详细介绍在这里. 我按照 Digital Ocean 的指点, 用 AWS 上 3 个虚拟机做了个最小的集群, 下面是我的一些心得(针对 MariaDB 10.0.17): 首先集群的成员个数一定是奇数, 也就3, 5, 7… 因为有的时候个别成员的数据出现异样的时候, 整个集群会以”少数服从多数”的方式修正数据. 虽然集群是 master – master 方式进行数据同步的, 但如果多个成员同时更新相同的数据集合时, 集群内就很容易出现冲突, 这也就降低了性能以及可靠度. 目前我觉得可行的应用方式, 就是将所有的数据更新(insert, update, delete)都集中到一个成员上, 然后所有的查询(select)可以由所有成员分担. 就好像传统的 master – slave 方式, 嗯, 比较失望, 不过至少倚靠 HAProxy, 当一个成员挂了会自动有另一个来接替, 也不会耽误太多的事情. 估计还有一段距离才能把 Galera…

  • 利用 bash 命令做 SQL 数据修补

    如果是把一个 DB 或者一个 table 从一个服务器送到另一个, 那么使用 mysqldump 命令就可以了. 但有的时候, 需要的数据可能只是若干条记录, 就不能用 mysqldump 了. 奇怪的是我 google 了一番居然也没找到很方便的方法. 求人不如求自己吧, 下面是用 bash 命令的解决方法: mysql <database> -uroot -e “select * from <table> where <condition>…” |tail -n +2 |sed -e ‘s/^/(“/g’ -e ‘s/$/”)/g’ -e ‘s/\t/”,”/g’ |while read values; do echo “insert into <table> values $values”; done 然后把输出的 SQL 在目标服务器上运行即可. 记得把<…

  • 开始用 Arch Linux

    用 Linux 的好处是选择多多, 但有的时候确实很难选, 俗称”挑花了眼”. 我基本上的要求有: 相对新潮, 各个模块的版本都是最新的才好(当然, 不是说服务器上的系统) 桌面是(或者可以是) Gnome Shell. 很多人恨 GS 恨得牙龈都发炎了, 但我对 GS 情有独钟 社区活跃, 有问题多半能 Google 到结果 没有商业气味, 没有大公司在背后控制 这样筛选下来 Ubuntu 太商业化了, 奔着下一个 WindowsXP 的路子去了; Fedora 社区不给力; Debian 太保守… 唯有 Arch Linux 几乎完美. 唯一麻烦的是, AL 相对高端, 没有”一直点 Next”类安装界面, 安装 AL 是从 fdisk, mkfs, mount, chroot 这样的命令开始的(当然比起 Gentoo 的 gcc, make,…

  • 在 Debian Wheezy 上用 Discourse 搭建论坛

    以新建的 VM 为例, 下面是安装直到运行  的一些必要步骤 1, 首先是系统必须的软件包, 这里我用nginx作为HTTP服务器, 其他的也可以的: sudo apt-get install build-essential nginx imagemagick 2, Discourse 需要的数据库和缓存. Wheezy 缺省的 postgresql 是 9.1 的, 可以参考这个来装 9.3: sudo apt-get install postgresql-9.3 postgresql-server-dev-9.3 postgresql-contrib-9.3 sudo apt-get install redis-server 3, 添加 discourse 系统/数据库用户, 建DB, Discourse 将以此用户的身份运行(git clone 部分就省略了). sudo adduser discourse –home /var/www/discourse sudo su – postgres -c…

  • LVM 快照(snapshot)的第二种用法

    之前我已总结了 LVM 快照的第一种用法: 利用 LVM 在线抓取 MySQL 数据库快照, 也可以扩展到任何需要在线生成磁盘快照的应用. 自 LVM 2.0 以来, 镜像分区不只是只读的, 而且可写. 而写入快照分区的一种应用就是造”沙盒(sandbox)”, 在 Xen VM 环境的具体步骤如下: 1, 假设供测试的虚拟机 test, 分区是 /dev/vm/test-disk, 为其生成 10GB 快照分区 test-ss: lvcreate -s -n test-ss -L10G /dev/vm/test-disk 2, 将 test 虚拟机关机, 可以 ssh root@test “shutdown -h now” 或者 xm shutdown test 3, 复制 /etc/xen/test.conf 到 test-s1.conf, 并将磁盘分区…

  • 读后: 大教堂与市集

    这本书完美的解答了若干关于开源(open source)的问题. 作为一名开源软件的死忠, 我只能遗憾没早些读完它. 书中的很多观点和论据我就不重复了, 只说说我曾经赞同的错误论点吧. 首先, 我曾经以为, 开源软件的存在是离不开闭源的商业软件的, 因为给开源软件做志愿者是没有收入的, 所以这些”志愿者”们其实是靠商业软件的销售来养活的. 这是错误的. 首先, 不是所有的软件开发人员都是以开发商业软件为工作的. 举个最简单的例子, 淘宝网这类电子商务企业雇佣了很大一批开发人员, 但是淘宝有卖什么”淘宝”牌的软件么? 貌似没有. 他们卖的是服务. 类似还有众多为大企业例如金融/电信工作的开发人员们.因此为软件供应商例如微软工作的开发人员只是一个小部分而已. 那么大企业为何乐于使用并回馈开源软件? 淘宝使用开源的 MySQL 数据库, 并将自己的一些改进回馈到开源社区. 那么这样做淘宝有损失么? 基本没有, 因为淘宝的优势绝对不是使用了一个开源的谁都可以使用的数据库软件. 而如果淘宝拒绝交出对 MySQL 的改进, 那么 MySQL 升级版本就没有这些改进, 那么淘宝每次升级(因为升级版本可能有其他人提交的改进)就不得不自己打补丁, 自己再测试了. 所以开源是互利的开发方式. 我从前以为某某公司为开源贡献就是因为有某种途径获利的阴谋论是不可靠的. 要为商业软件付费是因为要保护知识产权? 当然我是反对盗版的, 但保护知识产权绝对不是以 CD-KEY + 激活等等给用户添麻烦的理由. 而软件的生命在于用户群, 没人用的软件就是死掉的软件, 它的知识产权也就成了笑话. 这样的例子就是 UNIX. 曾经百花齐放的 UNIX 系统, 因为各家厂商为了”保护各自的知识产权”, 各自的改进没有相互共享, 后来导致…

  • Linux 命令行上的文字处理

    总是有些用户, 明明是自己手抖点错了, 却偏偏要怪服务器出问题. 如果让我选择相信一个人还是一台机器, 那… 还是选机器比较放心. 当然也不能冤枉好人, 于是如何从若干 GB 的服务器日志里找到线索就成为解决问题的关键了. 首先是 grep. grep 就好像是个过滤器, 将无关的内容滤掉, 却从不漏下真相. 假设服务器日志是 server.log, 其中包含时间, 地点, 人物: 1, 找出所有含 beijing 的记录 grep beijing server.log 2, 包含 2013-12-01 当天, 在 beijing 关于 user 的记录 grep  -E -e ‘2013-12-01.*beijing.*user’ server.log 3, 也可以将 grep 串联起来, 逐步缩小包围圈, 这样如果个别记录不符合时间, 地点, 人物的顺序, 也不会被漏掉. 当然我觉得日志还是规矩一点的好. grep ‘2013-12-01’ server.log…