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