一、需求

  由于嵌入式项目日益庞大,直接导致开发团队人员的增涨,由此导致在开发过程中出现很多问题。例如团队内部交叉编译工具的不同,导致最终软件的异 常或不能运行(这种问题的出现,大多数情况是由于操作系统的不统一,导致的交叉编译环境的异同,因为每个人的习惯不同。),以及各自在开发过程中对程序修 改的地方没有进行详细的记录等等因素,都对公司的资源造成了一定的损失,也对项目的顺利进行埋下了绊脚石。因此,建立一个统一的工作环境,良好的版本控制 系统,是当前迫在眉睫的一件事情。

二、服务器配置

硬件配置

CPU:P4 2.86(支持超线程)
内存:1G DDR400
主板北桥:865PE
硬盘:迈拓120G
网卡:8139D
光驱:DVD


软件配置

系统:Debian SID
FTP:VSFTP
SSH:ssh
交叉编译环境/调试环境:SCRATCHBOX
NFS:nfs-kernel-server
WEB:Apache+PHP+MySQL+mediawiki1.7

三、服务器安装

操作系统安装

    这里我们选用的是Debian的SID版本,即不稳定版;安装此版本一种原因是为了保证软件的新版本程度,但这样也带来了一些不稳定因素,因此将来会在服务器完善之后,改用稳定版本。

    我们在这里采用CD介质安装,当然您也可以用硬盘安装的方法搞定。大体步骤就是放入光盘,从光盘启动,输入linux26安装 kernel 2.6,然后就是基本的系统安装了,不过要注意,服务器不要安装X环境,为了避免一个BUG系统的出现。现在一个稳定版的Debian就安装完毕了,下面 我们来将这个版本升级到SID版,编辑/etc/apt/sources.list文件,加入SID的源,下面几个是我常用的几个

deb ftp://ftp.linuxforum.net/debian/ sid maindeb http://mirrors.geekbone.org/debian/ sid main contrib non-freedeb http://scratchbox.org/debian ./deb http://ftp.tw.debian.org/debian sid main contrib non-freedeb http://ftp.kr.debian.org/debian sid main contrib non-free


然后只需要以root身份运行下面指令:

apt-get update
apt-get dist-upgrade

(这个时候应该会询问你是否删除当前内核,当然删除,因为我们随后要安装新版本的内核,其他的会问你是否升级当前的glibc以及是否重新启动服务等等,通常不会有什么问题出现。) 如果您进行全面升级之后没有发现kernel,那你就自己安装一个,但前我的最新版本是2.6.18

apt-get install linux-image-2.6.18-4-686

(当前的最稳定版本,你可以搜索一下源来寻找最新的内核版本,这里是不固定的),安装完毕后,我们的系统基本就算是建立完毕了。


应用软件的安装

    我们的服务器有这几个功能,工作人员通过ssh连接服务器后进行与软件开发相关的移植及代码书写,通过SCRATCHBOX集成环境进行编 译,最终通过git来进行版本控制,以及补丁的生成;利用ftp客户端登录进自己的宿主目录,进行源码以及一些源码及工作资料的上传下载;最后,服务器上 的WEB服务为每一个开发人员提供一个交流的平台,通过wiki来达到日志的书写,以及相关文档的整理。这样,每一个开发人员便可以不用在自己的PC上统 一系统,统一环境,并且对资源的整合进一步加强。因此我们需要安装如下几个软件:

apt-get install vsftpd
apt-get install ssh
apt-get install apache2
apt-get install mysql-server-5.0 mysql-client-5.0
apt-get install mediawiki1.7 php-pear php5-gd imagemagick mediawiki1.7-math memcached clamav
apt-get install tftpd
apt-get install git-core
apt-get install minicom ckermit
apt-get install scratchbox-core scratchbox-libs scratchbox-devkit-cputransp 
scrat chbox-devkit-debian scratchbox-devkit-doctools scratchbox-devkit-perl
 scratchbox-toolchain-arm-gc c3.4-uclibc0.9.28 scratchbox-toolchain-arm-gcc4.1-uclibc20061004
  scratchbox-toolchain-arm-linux- 2006q1-6 scratchbox-toolchain-arm-linux-2006q3-27
 scratchbox-toolchain-arm-linux-cs344-2.3 scratc hbox-toolchain-arm-linux-ct401-2.3
 scratchbox-toolchain-cs2005q3.2-glibc-arm scratchbox-toolchain -cs2005q3.2-glibc-i386 
scratchbox-toolchain-host-gcc  scratchbox-toolchain-i686-linux-ct4.1.0-2.3 .6tls

当然,在安装scratchbox的时候,你可以有选择的安装几个组件,不必想我们这样全部安装。


开发工具包的安装

apt-get install libncurses5-dev  #c的图形库,在make menuconfig时会用到
apt-get install gcc-4.1 gcc-4.1-doc gcc-4.1-locales libc6-dev-amd64
 lib64gcc1 lib64ssp0   #gcc的开发包


四、服务器配置


vsftp的配置

编辑/etc/vsftpd.conf,输入如下内容:

listen=YES
local_enable=YES     #允许本地用户登录
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
idle_session_timeout=600
data_connection_timeout=120
ftpd_banner=Welcome to Thiz FTP service.
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
pam_service_name=vsftpd
max_clients=1000
max_per_ip=200
pasv_max_port=0
pasv_min_port=0

最后生成/etc/vsftpd.chroot_list空文件,如果有必要,可以在其文件中添加通过ftp连接只能在自己的宿主目录的开发人员,但是这样一来我们的软链接(如tftp、sb-home)就不能通过tftp正常访问了。

nfs的配置

编辑/etc/exports

/srv/nfs *(rw,no_root_squash,no_all_squash,sync,subtree_check)
/home/开发人员所属开发组/开发人员/nfs *(rw,no_root_squash,no_all_squash,sync,subtree_check)

等等


tftpd的配置

编辑/etc/inetd.conf,确认里面有下面这一行

tftp            dgram   udp     wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd /srv/tftp

wiki服务器

    这里没有什么需要修改的配置文件,只是可能需要针对安全方面的一些设置多一些,例如mysql最好是新建立一个用户专门负责管理wiki, 并且他的权限只在wiki的数据库内拥有所有权限等;剩下的就没有多复杂了,按照提示作就可以了。和apache2相关的一些设置是 /etc/apache2/conf.d/mediawiki1.7.conf,这里也没有什么需要修改的,一些个性化的设置就随你了。

  • 一些小问题《引自安东尼wiki安装笔记》
字体还是有问题!等宽英文字体之间的空格并不是等宽!侦探:发现我的 NotreDame Wiki 是:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
而 ThizWiki 是:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn" lang="zh-cn" dir="ltr">
解决方法:修改 LocalSettings.php 中的 $wgLanguageCode = "en"就搞定了!
不过长远之计,还是得研究 Debian GNU/Linux 的文字支持出了什么问题。
  • wiki的logo位置

mediawiki1.7版本的位置在

/usr/share/mediawiki1.7/skins/common/images/wiki.png
文件格式为135x135的透明背景的png格式图片。

bootp服务器

编辑/etc/bootptab为如下内容

h9200m:/
       :ha="00:11:43:43:93:5F":/    #被允许通过dhcp获取机器的MAC地址
       :ip=192.168.0.139:/          #被分配的IP地址
       :sm=255.255.255.0:/          #被分配的子网掩码
       :gw=192.168.0.254:/          #被分配的网关地址
       :dn=192.168.0.254:/          #被分配的域名解析地址search
       :ds=192.168.0.254:/          #被分配的域名解析服务器地址nameserver
       :sa=192.168.0.187:/          #boot启动的服务器IP
       :bf=/srv/tftp/uImage:/       #启动文件即内核的位置
       :rp=/home/embedded1/kamingli/nfs:  #根文件系统的目录


五、服务器管理


建立组

groupadd -g $1 $2
mkdir /home/$2
mkdir /srv/tftp/$2
chown root:$2 /home/$2
chmod 770 /home/$2
chown root:$2 /srv/tftp/$2
chmod 770 /srv/tftp/$2

$1组id号,$2组名

建立成员

useradd -G $1,20 -d /home/$2/$3 -p "/$1/$/EvVu1/$fOpTCICWLbqgjoCyV9fta/" -s
                                                                 /bin/bash -m  -c "$2's user" $3
mkdir /home/$2/$3/nfs
chown $3:$2 /home/$2/$3/nfs
echo “/home/$2/$3/nfs *(rw,no_root_squash,no_all_squash,sync,subtree_check)”>> /etc/exports
mkdir /srv/tftp/$2/$3
chown $3:$2 /srv/tftp/$2/$3
ln -s /srv/tftp/$2/$3 /home/$2/$3/tftp
sb-adduser $3
ln -s /scratchbox/users/$3/home/$3 /home/$2/$3/sb-home

$1组id号,$2组名,$3成员名


整个流程的命令行解释

groupadd -g 1001 embedded1

我们的设置是从1001开始的,嵌入式一组,组名为embedded1,组ID为1001。

mkdir /home/embedded1

建立嵌入式一组的家目录,用于方便管理组成员

mkdir /srv/tftp/embedded1

建立嵌入式一组的tftp家目录,用于管理成员的tftp文件

useradd -G 1001,20 -d /home/embedded1/temp -p "/$1/$/EvVu1/$fOpTCICWLbqgjoCyV9fta/" -s 
/bin/bash -m  -c "embedded1's user" temp

这里我们设置向嵌入式1组加入temp这个人,默认密码为123456(这里值得注意的就是密码部分,md5的校验码是每次不同的,但是这里输入到 passwd配置文件里面的是文本,也就是我们要注意特殊符号问题,所以你看到我们的md5吗是修改过得,加了原意符);家目录在嵌入式1组的家目录下, 用的bash。

mkdir /home/embedded1/temp/nfs

在其家目录下建立nfs的主目录,用于调试自己的内核跟文件系统等等

chown temp:embedded1 /home/embedded1/temp/nfs

改变文件夹的所属属性

echo “/home/embedded1/temp/nfs *(rw,no_root_squash,no_all_squash,sync,subtree_check)”>> /etc/exports

将目录添加到nfs的配置文件中

mkdir /srv/tftp/embedded1/temp

建立开发人员的tftp目录

chown temp:embedded1 /srv/tftp/embedded1/temp

改变文件夹的所属属性

ln -s /srv/tftp/embedded1/temp /home/embedded1/temp/tftp

创建一个软链接到每个人的家目录

sb-adduser temp

将temp加入到scratchbox用户中

ln -s /scratchbox/users/temp/home/temp /home/embedded1/temp/sb-home

将其scratchbox下的家目录连接到其宿主目录下,方便ftp上传文件     至此,每一个开发人员的家目录是按照组分开的,每一个开发人员的家目录默认会有nfs和tftp目录,其他的信息都由个人管理。至此剩下的就是程序员自己的设置了,例如minicom的配置了,等等。]]