5
年前我写过一篇文章:你用对awk了吗?,介绍了基于illumos
的发行版OmniOS
默认使用的awk
是非常旧的oawk
,很多功能都不支持。今天,illumos
终于更新了默认awk
,使其变成了nawk
(oawk
依然保留)。详情可查看这里:FLAG DAY: awk(1) is now nawk(1), oawk(1) is just oawk(1)。
标签:illumos
pkgsrc与IPS
pkgsrc是一个用来安装第三方软件的的框架,它集成了编译,安装,删除应用等功能。pkgsrc
发源于NetBSD
,但现在已经移植到多个操作系统,比如OpenBSD
。通常来讲,使用pkgsrc
安装软件有两种方式:直接安装已经编译好的二进制包,即pkg
;或者是下载源码自己编译安装,即src
。在使用pkgsrc
框架的系统上,pkg_add(1)
命令用来安装软件;pkg_delete(1)
用来移除软件。
pkgin项目是用来管理pkgsrc
的二进制包的工具,其类似于Linux
系统上的apt/yum
。”pkgin install
“用来安装软件;”pkgin remove
“用来移除软件。如果你使用pkgsrc
框架,你既可以选择使用pkgsrc
自带的pkg_*
命令来管理安装软件,也可以安装pkgin
,然后通过pkgin
来管理。
除了pkgsrc
,Sun/Oracle
也有一个类似的框架:IPS(Image Packaging System)
,其主要应用于Solaris
及其衍生的操作系统。IPS
使用pkg(5)
命令来管理软件包:”pkg install
“用来安装软件;”pkg uninstall
“用来卸载软件。注意同pkgsrc
的pkg_*
命令相区分。有趣的是,基于OpenSolaris/illumos
的发行版中,OmniOS
和OpenIndiana
使用IPS
,而SmartOS
则使用pkgsrc
。
References:
pkgsrc;
The pkgsrc guide;
pkgin;
Image Packaging System.
SmartOS上使用pkgin安装软件
我使用的SmartOS
是安装在Vmware
上的虚拟机,网络模式是NAT
。装好的SmartOS
缺少很多常用软件,需要自行安装:
(1)由于我的网络使用了proxy
,所以需要配置一下:
export http_proxy="http://web-proxy.xxxxxx.com:8080/"
export https_proxy="https://web-proxy.xxxxxx.com:8080/"
(2)安装pkgin
,我使用的是root
用户:
# cd /
# curl -k http://pkgsrc.joyent.com/packages/SmartOS/bootstrap/bootstrap-2015Q4-x86_64.tar.gz | gzcat | tar -xf -
# pkg_admin rebuild
# pkgin -y up
(3)接下来就可以安装软件了,以gcc
为例。首先查找gcc package
:
# pkgin se gcc
......
gcc49-4.9.3 The GNU Compiler Collection (GCC) - 4.9 Release Series
......
安装gcc
:
# pkgin in gcc49-4.9.3
安装好后就可以使用了:
# gcc
gcc: fatal error: no input files
compilation terminated.
你用对awk了吗?
今天折腾OmniOS
上的awk
,结果发现很简单的一个程序居然执行出错:
root@localhost:/root# awk 'function print_name_and_age(name, age) { print name" is "age" old" } {print_name_and_age($1, $2)}'
awk: syntax error near line 1
awk: bailing out near line 1
而相同的程序在gawk
下运行的好好的。求助stackoverflow,得到结论如下:
(1)OmniOS
上有nawk
,/usr/bin/awk
(默认的awk
)和/usr/xpg4/bin/awk
。建议使用nawk
。/usr/bin/awk
是老版本的awk
,很多feature
都不支持(基于illumos
内核的操作系统,包括Solaris
可能都需要注意这个问题)。
(2)“bailing out
”是老版本awk
的输出日志。所以一旦有这样的日志输出,需要考虑一下是不是使用的awk
版本有问题。