Pages

Tuesday, 17 January 2012

NetBSD桌面笔记

前言:

之前完成了FreeBSD和OpenBSD的桌面笔记,今天心血来潮,就把NetBSD的桌面笔记也一并完成,这样,三大BSD的桌面化教程算是全部完成 了。作为个人认为三大BSD中最难用的NetBSD,其实使用范围并不是很广泛,但是它具有许多其他两大BSD所没有的特色,号称从烤面包机到国际空间站 通吃的操作系统,所以作为桌面使用也未尝不可。

第一章:NetBSD简介

何谓NetBSD?

NetBSD是一个免费的,具有高度移植性的 UNIX-like 操作系统,是现行可移植平台最多的操作系统,可以在许多平台上执行,从 64bit alpha 服务器到手持设备和嵌入式设备。NetBSD计划的口号是:"Of course it runs NetBSD"。它设计简洁,代码规范,拥有众多先进特性,使得它在业界和学术界广受好评。由于简洁的设计和先进的特征,使得它在生产和研究方面,都有卓 越的表现,而且它也有受使用者支持的完整的源代码。许多程序都可以很容易地通过NetBSD Packages Collection获得。

NetBSD有哪些特色?

NetBSD 的基本特色有:

可移植性(超过 20 种平台被支持)

程序代码的品质与正确度高

稳定性

研究与革新

NetBSD 主要支持哪些平台?

Port CPU Machines

acorn26 arm Acorn Archimedes, A-series and R-series systems

acorn32 arm Acorn RiscPC/A7000/NC and compatibles

algor mips Algorithmics MIPS evaluation boards

alpha alpha Digital Alpha (64-bit)

amd64 x86_64 Advanced Micro Devices AMD64(tm) 64-bit CPUs

amiga m68k Commodore Amiga, MacroSystem DraCo

amigappc powerpc PowerPC-based Amiga boards

arc mips Machines following the Advanced RISC Computing spec

atari m68k Atari TT030, Falcon, Hades

bebox powerpc Be Inc's BeBox

cats arm Chalice Technology's Strong Arm evaluation board

cesfic m68k CES's FIC8234 VME processor board

cobalt mips Cobalt Networks' Microservers

dreamcast sh3 Sega Dreamcast game console

evbarm arm ARM evaluation boards

evbmips mips MIPS-based evaluation boards

evbppc powerpc PowerPC-based evaluation boards

evbsh3 sh3 Evaluation boards with Renesas (Hitachi) Super-H SH3 and SH4 CPUs

ews4800mips mips NEC's MIPS based EWS4800 workstations

hp300 m68k Hewlett-Packard 9000/300 and 400 series

hp700 hppa Hewlett-Packard 9000/700 series

hpcarm arm StrongARM based Windows CE PDA machines

hpcmips mips MIPS based Windows CE PDA machines

hpcsh sh3 Renesas (Hitachi) SH3 and SH4 based Windows CE PDA machines

i386 i386 i386 family IBM PCs and clones

ia64 itanium Itanium family of processors

ibmnws powerpc IBM Network Station Series 1000

iyonix arm Iyonix ARM pc

landisk sh3 SH4 based NAS appliances by I-O DATA

luna68k m68k OMRON Tateisi Electric's LUNA series

mac68k m68k Apple Macintosh

macppc powerpc Apple Power Macintosh and clones

mipsco mips Mips family of workstations and servers

mmeye sh3 Brains' mmEye Multi Media Server

mvme68k m68k Motorola MVME 68k SBCs

mvmeppc powerpc Motorola MVME PowerPC SBCs

netwinder arm StrongARM based NetWinder machines

news68k m68k Sony's m68k based "NET WORK STATION" series

newsmips mips Sony's MIPS based "NET WORK STATION" series

next68k m68k NeXT 68k 'black' hardware

ofppc powerpc Generic OpenFirmware compliant PowerPC machines

pmax mips Digital MIPS-based DECstations and DECsystems

prep powerpc PReP (PowerPC Reference Platform) and CHRP machines

rs6000 powerpc MCA-based IBM RS/6000 workstations

sandpoint powerpc Motorola Sandpoint reference platform

sbmips mips Broadcom SiByte evaluation boards

sgimips mips Silicon Graphics' MIPS-based workstations

shark arm Digital DNARD ("shark")

sparc sparc Sun SPARC (32-bit)

sparc64 sparc Sun UltraSPARC (64-bit)

sun2 m68k Sun 2

sun3 m68k Sun 3 and 3x

vax vax Digital VAX

x68k m68k Sharp X680x0 series

xen i386, x86_64 Xen Virtual Machine Monitor

zaurus arm Sharp C3x00 series PDA

从哪里可以获得NetBSD?

最新的NetBSD安装镜像可从以下站点获得:

ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-5.1/iso/

找到自己对应的平台即可。

第二章:安装NetBSD

NetBSD安装过程可参照

http://tech.ddvip.com/2006-08/11551351337289.html

本教程不再赘述。

第三章:配置NetBSD桌面环境(GNOME)

网络环境配置

全局网络设置可以在rc里面设定,以我的intel 3945ABG无线网卡为例(因为我的有线网卡比较悲剧,无法识别):

vi /etc/rc.conf

然后添加以下几行:

auto_ifconfig=YES #为了开机可以自动设定网卡

hostname=NetBSD #主机名

ifconfig_tlp0="inet 192.168.0.123 netmask 255.255.255.0" #IP地址和子网掩码,我的是DHCP,所以没有这一行,tlp0表示网卡设备名,可用ifconfig -a查看

defaultroute="192.168.0.1" #默认网关

DNS服务器地址可在/etc/resolv.conf设定,如下例:

nameserver 202.106.196.115

nameserver 202.106.0.20

设置好以后,reboot生效。

下载pkgsrc并解压

pkgsrc类似FreeBSD的ports系统,是一套软件维护系统,pkgsrc可在以下地址下载:

ftp://ftp.netbsd.org/pub/NetBSD/packages/

我当时把下载的pkgsrc压缩包放到了U盘,并在NetBSD挂载以后进行解压,方法如下:

首先,终端输入disklabel sd0,可以看到类似如下输出

5 partitions:

# size offset fstype [fsize bsize cpg/sgs]

d: 1956735 0 unused 0 0 # (Cyl. 0 - 955*)

e: 1955457 63 MSDOS # (Cyl. 0*- 954*)

disklabel: boot block size 0

disklabel: super block size 0

然后

mount /dev/sd0e /mnt

cd /mnt

tar tar -zxvf pkgsrc.tar.gz -C /usr (假设pkgsrc压缩包位于U盘根目录)

设定NetBSD的pkg_add抓包地址

由于pkgsrc安装软件包编译时间漫长,推荐第一次安装软件包使用pkg_add方式,可按照如下方式设定pkg_add抓包地址(root身份):

vi ~/.profile

加入如下行

export PKG_PATH=ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.1_2010Q3/All/

然后保存退出。

安装pkgfind,pkgin

pkgfind是一个很方便的包管理工具,可以通过pkgfind+关键字来查找指定的软件包,而pkgin则类似Linux下面的包管理器,可以用来安装,升级预编译包,并自动解决依赖关系。有关pkgin的具体用法,请自己用man查看。

终端输入如下命令

pkg_add pkgfind pkgin

另外,使用pkgin需要设定预编译包地址,配置文件在/usr/pkg/etc/pkgin/repositories.conf,以我的为例,在配置文件加入如下行:

ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.1_2010Q3/All/

然后保存退出。

安装GNOME桌面环境

有了pkgin,安装软件包就方便得多,可用如下命令安装GNOME桌面环境以及firefox浏览器等:

pkgin install gnome gnome-desktop gnome-session firefox

安装完毕以后,根据提示,需要把/usr/pkg/etc/rc.d下面的gdm,hal和dbus脚本复制到/etc/rc.d下面,并在/etc/rc.conf加入如下内容:

dbus=YES

hal=YES

gdm=YES

保存退出。

另外,还要在~/.xinitrc加入:

exec gnome-session

保存退出。

安装ibus拼音输入法,并设置中文环境

终端输入以下命令安装ibus拼音输入法:

pkgin install ibus ibus-pinyin

然后在~/.xinitrc加入如下内容:

export XMODIFIERS=@im=ibus

export GTK_IM_MODULE=ibus

export QT_IM_MODULE=ibus

ibus-daemon -d -r -x

保存退出。

另外,还需要在/etc/profile添加如下内容设置中文环境:

export LANG=zh_CN.UTF-8

export LC_CTYPE=zh_CN.UTF-8

export LC_ALL=zh_CN.UTF-8

保存退出。

安装cvsup

cvsup是一个CVS版本控制工具,可用来更新系统源代码,pkgsrc等等,使用如下命令安装:

pkgin install cvsup

除此以外,还需要写好cvsup配置文件,我的配置文件放在/usr/share/cvsup目录下面,名字是pkgsrc-supfile,因为我只需要更新pkgsrc,内容如下:

*default release=cvs tag=.

*default release=cvs tag=netbsd-5-1

### CVSup sites: ###

*default host=cvsup.us.netbsd.org

*default delete use-rel-suffix

*default umask=002

*default base=/usr

*default prefix=/usr

*default compress

#netbsd-src

netbsd-pkgsrc # Packages

保存以后,更新pkgsrc的方法就是cd到/usr/share/cvsup,然后输入cvsup -g -L 2 pkgsrc-supfile

安装pkglint

pkglint可以算是NetBSD的更新工具,可以对比pkgsrc和已安装的软件包列表,并且列出有更新版本的软件包,安装方法如下:

pkgin install pkglint

使用方法:

输入lintpkgsrc -i

会出现类似如下内容:

gnome-terminal Version mismatch:"2.30.2" VS "2.32.2"

这就表示gnome-terminal这个包有更新版本,可以用pkgfind找到这个包的路径,然后cd到那个路径,并使用make replace进行更新。

以上就是NetBSD桌面的简单配置.
---------------------------------------------------------------------------------

NetBSD已死,撰文以祭之 


NetBSD,现存最古老的现代BSD发行版,目前存活了18年。但是,我眼中的NetBSD,似乎已经死了。

在很长一段时间里面,NetBSD都是我最向往的BSD发行。听闻其设计简洁规范,并且是目前可移植性最强的OS。但是到了现在,我发现NetBSD已经越来越让人失望了。当然,这或许和内部体制以及开发人手不足也有关。

首 先,最让我诟病的就是糟糕的硬件支持。在我一台07年的老笔记本上,有线网卡居然不认,要知道,那可是曾经世界上使用相当广泛的RTL8139芯片。同样 的,在另一台05年的老笔记本上更为糟糕,两块网卡居然都不认。NetBSD的平台跨度或许值得称道,但是那并不代表良好的硬件支持。

其 次,我不知道NetBSD的内核是如何设计的。我曾经在07年的那台笔记本上面试着安装NetBSD-5.0.2 i386版本,但是在我用CD启动的那一刻,我傻眼了。正常的安装模式居然进不去,内核加载过程中会panic。最后不得已,只能以NO ACPI,NO SMP的模式进去。虽然安装完成了,但是一直只能以NO ACPI和NO SMP的状态运行。这点让我感到很困惑。而同样的,换成了amd64的安装CD,却不会再有问题。

第三,我很疑惑NetBSD对于物理内 存的规划方式。在之前的使用中,我发现系统会把我的内存一点点吃掉,却完全不会释放出来。在使用一段时间之后,我甚至发现我3GB的内存被吃得仅剩下 100多MB。而同样的情况却并未在FreeBSD或者OpenBSD身上看到。因此,我深怕NetBSD会导致内存溢出这样的严重问题,不敢轻易使用。

因此,我不明白NetBSD的硬件和系统支持到底在怎么走。距离上一个版本发布已经有1年多,新的发行版本依然没有消息。而current的版本号似乎也停在了5.99.56。

或许NetBSD已经死了很久了,只是我不知道,但至少它曾经辉煌过。并且促成了pkgsrc这么优秀的源代码管理体系和OpenBSD这样优秀的BSD发行的诞生。

希望在不久的将来,我还能看到NetBSD-6.0的发布以及大幅度改进的硬件支持。如若不然,那我只好再去DragonFly BSD那里看看。
----------------------------------------

NetBSD的pkgsrc优化 


源代码下载优化:
让pkgsrc支持多线程下载源码包。
只需如下操作即可让pkgsrc默认就用多线程下载
cd /usr/pkgsrc/net/aget
make install
nano -w /etc/mk.conf #编辑/etc/mk.conf,增加如下内容
FETCH_CMD=aget # 如果想手动指定下载线程数(为10)的话就用“aget -n10”类似参数。或者用“aget -f10”强制使用指定线程数(为10) FAILOVER_FETCH=yes #文件下载完成后检查校验和。如果不对的话就重新下载。此参数可以防止文件下载失败或错误 # Perform a checksum at "make fetch" time.  If the checksum doesn't
# match the stored value, try to retrieve the file from the next site
# in the list
# Possible:  defined, not defined
# Default: not defined
#PKG_RESUME_TRANSFERS=YES # 支持pkgsrc下载时中断文件的续传。aget不支持也不需要这个定义。它无需另外设置就默认支持续传功能。对每个下载文件都有log纪录,如果遇到中 断下载的文件,它会依照log文件自动续传 # Used in pkgsrc to resume transfers, if enabled the whole file won't be
# downloaded from scratch again.
# Possible: yes or no.
# Default: no.
#FETCH_CMD=wget #如果不想用aget,想用wget的话,就启用此行及下面3行
#FETCH_BEFORE_ARGS=--passive-ftp
#FETCH_RESUME_ARGS=-c
#FETCH_OUTPUT_ARGS=-O

设置pkgsrc的源码抓包地址
和FreeBSD类似,可以在/etc/mk.conf加入以下内容:
MASTER_SITE_OVERRIDE=http://mirrors.163.com/FreeBSD/distfiles/
另外,sourceforge net 也有大量的镜像,可以用下面的设置选择合适的服务器:  MASTER_SITE_SOURCEFORGE=http://easynews.dl.sourceforge net/sourceforge/

编译参数优化:
CPU优化:
如果你是一个软件开发人员,知道有多种途径可以设置一个软件包的编译选项:设置环境变量,修改软件包里面的 Makefile 等等。
如果要做全局的选项设置,可以将它写到 /etc/mk.conf 里面,例如,给所有的 C 程序软件包加上调试信息,只需加上:
CFLAGS += -g
如果你仅打算在编译时可以自动加上 cpu 的优化选项,pkgsrc 提供了一个软件包可以方便地为每个 C/C++ 程序自动设置。
$ cd /usr/pkgsrc/devel/cpuflags
$ make install
安装完成后,在 /etc/mk.conf 文件里面加上:
.sinclude "/usr/pkg/share/mk/cpuflags mk"

缩短编译时间:
在 pkgsrc/devel 子目录下面有 ccache 和 distcc 两个工具。
ccache 使用缓存技术,减少重复编译次数,优化编译过程来缩短编译时间;distcc 是采用多台机器进行分布式编译,并且 pkgsrc 所使用的 BSD make 本身就支持并行编译。
使用 distcc 除了要求局域网内有多台计算机外,还要求它们具有相同的编译环境,比如所使用的 gcc 版本必须一样。
我们通过 make install 安装 ccache 和 distcc 两个工具,然后在 /etc/mk.conf 文件里面添加:
PKGSRC_COMPILER=distcc ccache gcc
DISTCC_HOSTS=localhost distcc_server1 distcc_server2
BUILD_MAKE_FLAGS=-j 3
上面的 BUILD_MAKE_FLAGS 参数 -j 必须大于 2 才能使 distcc 正常工作。
编译开始之前,其他的编译机器必须执行 distccd,它可以在命令行上运行:
$ distccd --daemon --allow 192.168.0/24 --listen 192.168.0.10
也可以放到系统启动脚本里面,详细步骤请参考 distcc 文档。
有一点要注意,pkgsrc 里面的软件包,并不是每一个都能很好地支持并行编译,如果你在编译时碰到了奇怪的错误,禁止 distcc 后再重新编译一次。

No comments:

Post a Comment