Slax中关于KDE程序编译脚本的注意事项

Slax是个非常优秀的Linux发行版,之前说过了,也介绍过制作Slax Bundle的buildscript书写。

但是我今天在编译rekonq的时候遇到了点麻烦,一直提示出错,跑到IRC上#rekonq频道询问,人家告诉我是少了ksgmltools2,确实少了。我发邮件告诉Tomas M(Slax作者),这位仁兄告诉我Slax是特意去除这个组件的,并告诉我要在buildscript里对CMakeLists.txt打一下“补丁”,让程序编译过程去除掉Documentation(文档),这么一来我的rekonq终于编译成功了!

去除文档的办法,是删掉CMakeLists.txt中的ADD_SUBDIRECTORY( doc ),当然我知道可以用文本编辑器去删掉,问题是您要写的是一个脚本在服务器上运行的,所以要用到一些简单的shell脚本来操作,相关行我贴在这里。

cd ${SLAX_BUNDLE_NAME}-${SLAX_BUNDLE_VERSION}

find | grep CMakeLists.txt | while read LINE; do
cat "$LINE" | fgrep -v "add_subdirectory( doc )" 
| fgrep -v "add_subdirectory(doc)" 
| fgrep -v "add_subdirectory (doc)" 
| fgrep -v "add_subdirectory ( doc )" 
| fgrep -v "ADD_SUBDIRECTORY( doc )" >aaa
mv aaa "$LINE"
done

另外一个需要注意的事情,就是对于cmake编译安装的软件,需要在cmake参数里加上 -DLIB_SUFFIX=”${SLAX_64_FLAG}” ,不然在64位系统中也会把libraries安装到/usr/lib而不是/usr/lib64,程序无法找到lib的情况。所以这点千万切记要加上这个参数。

2013/02/06补充:(根据Michal发给我的邮件正文,下面详细贴出buildscript软件编译部分的正确示例)

1) 当使用./configure时,

CFLAGS="${SLAX_CFLAGS}" CXXFLAGS="${SLAX_CFLAGS}" ./configure ${SLAX_CONFIGURE_OPTIONS}

2) 当使用cmake时(假定先执行了mkdir build && cd build了),

cmake -DCMAKE_C_FLAGS:STRING="${SLAX_CFLAGS}" 
 -DCMAKE_CXX_FLAGS:STRING="${SLAX_CFLAGS}" 
 -DCMAKE_INSTALL_PREFIX=/usr 
 -DINCLUDE_INSTALL_DIR=/usr/include 
 -DCMAKE_BUILD_TYPE=Release 
 -DLIB_SUFFIX=${SLAX_64_FLAG} 
 -DLIB_INSTALL_DIR="${SLAX_LIBDIR}" 
 ..

3) 当制作商业闭源软件的Bundle时,必须准备好32位和64位两份预编译包。

if [ "${SLAX_64_FLAG}" = "64" ]; then
 #将64位预编译文件安装到 ${SLAX_BUNDLE_TARGET}
 else
 # 将32位预编译文件安装到 ${SLAX_BUNDLE_TARGET}
 fi

如此才能确保服务器根据buildscript编译出来的Slax Bundle正确。

用buildscript制作Slax的扩展包sb文件

昨天成功用buildscript制作了fcitx在Slax下的sb bundle(一看到sb这个扩展名我就莫名其妙地想笑……233)

我强烈建议大家直接阅读官方的Documentation和template.SlaxBuild,基本就知道怎么做了。

build写好之后,在终端下运行,看看是不是能成功制作出sb文件,然后slax activate之,运作是否正常。一切顺利的话,就可以slax upload上传了,上传的时候会要一个密码,这个密码最好记好了,因为Slax的Modules是不可以有重复的,之后就只能用slax update更新脚本或者slax delete删除脚本了,而后面的操作都会要验证密码是否正确。

在# —————– put your actual build code here: —————后面一定要写详细的编译过程,这个buildscript其实就是一个shell脚本,编译过程参考一下Slax的Module就好了(看看我上传的qtqq和fcitx吧,其它我还真没找到真正“编译”的bundle)。

刚刚又制作了QtQQ的sb,把buildscript上传了,个人觉得Slax还是非常有希望在Linux发行版海洋里活出自己的空间的,首先当然就是它的bundle系统了,和Chakra很像,但是Slax又自称是Pocket system,体积很小,所以还是有自己的优势所在的!唯一比较郁闷的就是Slax的网站关键环节全部是under construction(很多Modules的buildscript已经有了,但是sb文件都没有编译出来,导致可以下载的Modules非常少),这可不行啊,得早日上线运作!

解开蓝魔Amlogic方案JellyBean 4.1中的boot.img文件

是否很多筒子发现在4.0时代一直用的uImage解包打包脚本突然就不能用了,提示找不到uImage file?我开始也很纳闷,突然闲来想到是不是Amlogic又改回按标准的bootimg.h里面描述的格式来处理这个文件了?

刚刚一试验,果不其然!多年前做Motorola MB200的ROM时,曾去解包boot.img来改开机静态图片(我当时真是够无聊的),当时用的就是这个Perl脚本,实验证明现在还能用!(标准就是标准啊!)Google一圈还找到一个配合使用的shell脚本方便地将boot.img完全解开~

于是,HatMod项目今天华丽丽地加了commits了,各位可以去我的GitHub项目上抓取解包和打包脚本 (legacy目录下是解包和打包4.0时代的boot.img的!)。

由于W22PRO还没有官方4.1固件,因此我无法尝试是否打包后刷入能用,只是下载了W28的固件,去解包和打包了boot.img都是可以的,不过没有用真机测试。

NetBSD增加硬盘更改/usr/pkgsrc挂载点的笔记

之前安装NetBSD分配inode不太合理,导致inode用光了,差点重装系统,仔细想来*nix的超强扩展性不用我们如此费神重装系统重新格式化什么的。还好是在VirtualBox虚拟机下装的,在虚拟机关机之后给NetBSD虚拟机增加一块硬盘然后开启虚拟机。

这里我的老硬盘识别为/dev/wd0,新的是/dev/wd1,顺带说一下老硬盘我只有一个分区(/ 根分区),所以a和d没有了,这里我让整个/dev/wd1作为系统的e分区加入进来。下面是实践过程的记录。(#后一个空格表示后接root下执行的命令,#后跟中文是注释)

# disklabel -i -I /dev/wd1e
partition:e
Filesystem type [?][unused]:4.2BSD
Start offset ('x' to start after partition 'x') [0c, 0s, 0M]:
Partition size ('$' for all remaining):$
partition:W
Label disk [n]? y
partition>Q
# newfs -i 384 -O 2 /dev/rwd1e  #注意这里是rwd1e而不是wd1e了。分配得到三百多万个inode,这下应该不愁了
# mount /dev/wd1e /mnt
# cd /usr/pkgsrc
# pax -rw -pe . /mnt #将文件和文件夹都镜像复制一份到/mnt下
# umount /mnt

然后编辑/etc/fstab添加一行 ‘/dev/wd1e /usr/pkgsrc ffs rw 1 2’ (不含单引号)

# shutdown now #进入单用户模式
# mv /usr/pkgsrc /usr/pkgsrc.old
# mkdir /usr/pkgsrc

然后启动系统(输入exit退出单用户模式就会自动启动系统到正常模式下了)看看是不是一切okay,没问题的话就可以删掉/usr/pkgsrc.old这个备份文件夹了。

至于为什么我不建议把整个/usr单独挂载到其它分区,因为目前我完全不能适应其它的Shell,而bash是安装到/usr/pkg/bin下的,如果/usr和/不是在一个分区的话,单用户模式下是不能使用bash的,所以我还是只把占用indoe最多的pkgsrc文件夹挪走就可以了。

NetBSD编译安装Go和Node.js

现在Go和Node.js都在pkgsrc-wip项目里面,wip意思是work in progress,可以理解为开发进程中的软件包,稳定后才会被采纳进入官方维护的pkgsrc,现在好歹有wip就知足吧。嗯,写这篇文章的目的是希望能有更多人来研究BSD系统,作为Unix的较为正统的分支,BSD在很多方面还是值得Linux学习的,当然这两个流派风格是迥异的。摸索摸索几个月,以后就在自己的EC2上部署NetBSD了!

废话少说,直接上命令内容了。我安装了curl用来下载,你也可以用你自己喜欢的工具下载pkgsrc安装好。

curl http://ftp7.jp.netbsd.org/pub/pkgsrc/stable/pkgsrc-2012Q3.tar.xz > /PATH/pkgsrc.tar.xz

记得到时候自行修改pkgsrc-2012Q3,不可能指望今年年底还用去年第三季度的东西对吧。。。后面PATH表示路径,记得改成你相应的下载路径。下载很快的,前面讲过了,用的是最快的镜像点了,下载完成后就解压到系统里面,执行命令:

tar xvzf /PATH/pkgsrc.tar.xz -C /usr

等一会吧,解压出来好几百兆的文件呢,解压完毕后再来解压一个wip的source,先去pkgsrc-wip快照列表下载一个最新的下来(注意看一下文件尺寸,2013-01-03的那个文件只有400+KB是错误的文件,一般都是10M左右,不然下载下来也解不开),然后执行命令解压到系统:

cd /usr/pkgsrc
 tar xvzf /path/to/pkgsrc-wip-DATEHERE-snapshot.tar.gz

解压完成之后就可以开始编译Go和Node.js了,当然其它在wip中的软件也是这样编译安装!

cd /usr/pkgsrc/wip/go
 make install

上面的命令最后都是su切换到root账户下执行,免得提示没有权限。

可惜的是,pkgsrc-wip并没有把软件源代码也塞进去,所以make install其实会执行一大段复杂的过程,包括获取源代码、解决依赖关系神马的,结果服务器是自动用主站服务器,所以速度是龟速(10KB/s)……耐心等待哦。

至于Node.js的话,cd /usr/pkgsrc/wip/node && make install,其它软件的话自己去找找在哪个文件夹下cd进去然后make install就okay了!

SSH服务器登录提示消息配置

SSH的提示消息分为两种,一种是登录前,一种是登录后。登录前的提示是每个人都可以看到的,所以最好不要涉及机器的任何相关信息,一般给出警告之类的消息。登录后的话可以给出系统的运行情况(负载、空闲内存、空闲硬盘空间、硬件温度等)。

首先设置/etc/ssh/sshd_config,找到这一行

Banner /etc/issue

去掉前面的#注释,然后编辑/etc/issue这个文件,我的内容是:

This is a private machine.

————WARNING————-
Authourized administrators only.
——————————–

Your IP has been recorded.

这样,任何ssh连接到这台机器的终端都会先看到这个警告提示,然后才是密钥验证过程。对于合法的登录用户,会显示/etc/motd这个文件的内容,但是这个文件一般是静态的,不太适合编辑,所以可以编辑用户主目录下的.bash_login文件,这个文件的语法和bash一致,所以可以方便的显示一些动态内容。我这里这个文件的内容是:

echo -e "nOf course it runs on $(uname -s)n"
 CPUTIME=$(ps -eo pcpu | awk 'NR>1' | awk '{tot=tot+$1} END {print tot}')
 CPUCORES=$(cat /proc/cpuinfo | grep -c processor)
 echo "
 System Summary (collected `date`)
 - CPU Usage (average)       = `echo $CPUTIME / $CPUCORES | bc`%
 - Memory free (real)        = `free -m | head -n 2 | tail -n 1 | awk {'print $4'}` Mb
 - Memory free (cache)       = `free -m | head -n 3 | tail -n 1 | awk {'print $3'}` Mb
 - Swap in use               = `free -m | tail -n 1 | awk {'print $3'}` Mb
 - System Uptime             =`uptime`
 - Disk Space Used           = `df / | awk '{ a = $5 } END { print a }'`"

下面看看我的执行效果吧,宿主机器Fedora连接NetBSD虚拟机!(刚刚上面写的df/|awk……a=$4写错了,应该是=$5(已修正),下图的Disk Space Used显示的就是写错成$4的结果,写$5才能读取已使用的百分比)。

ssh

参考来源:Ubuntu Forum | Question Defense (都是英文)

国内访问速度最快的NetBSD镜像

有时候还是不得不感谢日本发达的基础设施给天朝屁民的帮助,不仅像SourceForge得益于日本镜像节点在中国访问能达到2~3M的速度,连相对偏门的NetBSD也是靠日本的镜像点能够跑满带宽!

废话不多说了,这个Mirror的地址是:

http://ftp7.jp.netbsd.org/pub/NetBSD/

当然了,这个镜像支持FTP访问的,把前面的http改成ftp就好了!更为难得是这个镜像点有pkgsrc!所以PKG_PATH可以改用这个镜像了,不要用慢吞吞的官方服务器啦~

同时如果使用pkgin来管理包的话,/usr/pkg/etc/pkgin/repositories.conf这个文件也要记得做相应的修改哦。

我这里6M的宽带,从这个镜像安装文件的下载速度最快有700+KB/s,平均也是超过600KB/s的!相当不错,速度简直等同于国内镜像了。