所謂「TC「,就是Technology Committee(技術委員),講的好像很厲害,實則就一「網管」。php
TC的技術含量其實不高,可是涉及的東西不少很雜,網上零零散散的都有,在這裏我想總的整理一下,算是栽顆小樹吧……css
注:若是你只想本身裝個環境寫代碼的話,請不要看如下寫的,真的是無比之煩,建議你看官網的這個或其餘博客:java
http://simspark.sourceforge.net/wiki/index.php/Installation_on_Linux;linux
接下來,我將按如下流程講解一下RoboCup仿真3D比賽環境的搭建方法:git
1. 硬件要求:shell
(1)電腦硬件要求;數據庫
(2)交換機硬件要求;ubuntu
(3)網線硬件要求;vim
2. 各個電腦任務分配;ruby
3. 網絡拓撲結構與IP配置(主要針對配置A、B兩組);
4. 系統安裝與更新;
5. 軟件安裝與系統配置(最麻煩的地方);
6. 測試與使用。
如下是幾個主要參考資料和當時最新版軟件,若是你要找更新的版本,請自行到相應網站查找:
比賽環境搭建說明2013英文版: http://vdisk.weibo.com/s/A9EtgmXv_PvAg/1414220729
simspark-0.2.4 : http://vdisk.weibo.com/s/A9EtgmXv_Pvfp/1414220781
rcssserver3d-0.6.8.1 : http://vdisk.weibo.com/s/A9EtgmXv_PvOT/1414221074
rcssserver3d-0.6.8.1 補丁(沒這個補丁問題也不大) : http://vdisk.weibo.com/s/A9EtgmXv_PvOH/1414221055
ode-0.11.1-tbb:http://vdisk.weibo.com/s/A9EtgmXv_Ptpj/1414236805
roboviz:http://vdisk.weibo.com/s/A9EtgmXv_Ptp6/1414236776
proxy:http://vdisk.weibo.com/s/A9EtgmXv_Ptp8/1414236797
rclm2:http://vdisk.weibo.com/s/A9EtgmXv_Ptp4/1414236789
restore.py: http://vdisk.weibo.com/s/A9EtgmXv_OXft/1414335116
shFor3D.tar.gz: http://vdisk.weibo.com/s/A9EtgmXv_Pg4s/1414380754
1. 硬件要求:
(1) 電腦:
總共要5臺(i5/i7 x 1; 中檔以上顯卡 x 1; i3 配置以上 x 2; 配置隨意 x 1)
由於比賽分爲A、B兩個小組,一組須要5臺,因此此次比賽有10臺。這裏只以一組舉例。
(此次組織方放血了,給的配置都超預期了,另外,那個「中檔以上顯卡的電腦」最好用英偉達的,顯卡驅動比較好裝)
(2)交換機:
要一臺Gibibit的,也就是千兆交換機,雖然說交換機基本都是千兆的,但以前的安徽省比賽就只給了個百兆的……
分A、B兩組比賽時,須要兩臺。
(3)網線:
通常的網線就行。
以上信息,基本就是那個"2013年英文版「的翻譯。
2. 各個電腦任務分配:
正所謂「好記性不如爛筆頭」,比賽場上有10臺電腦,很難搞清誰是誰,因此最好每一個都貼個標籤。
(1)cpu最強的那臺運行rcssserver3d,給它貼個標籤:servera;
(名字這麼看,「server」 + 「a」,"server"好理解,」a"表示A組,由於我用A組舉例的嘛!)
(2)「中檔以上顯卡」的那臺運行roboviz,給它貼個標籤: monitora
(3)cpu次強的兩臺分別運行兩方球隊,分別標記:clienta1,clienta2
(4)配置最差的那臺,做爲NFS和NIS,標記:robocup3dfa;
(爲何是"robocup3d"+"f"+"a"呢?由於這臺要裝fedora。別看這臺硬件配置無所謂,但它倒是這個比賽環境的核心!)
3. 網絡拓撲結構與IP配置(主要針對配置A、B兩組-----10臺電腦):
這步其實就是在說10臺電腦接網線的問題。
若是隻有一組電腦的話,那倒容易,5臺電腦都接在同一個交換機上,並給每臺電腦分配同一網域的不一樣IP便可。
可麻煩就在於有兩組電腦,並且正式比賽時還要求各自獨立!!! 我心都碎成渣渣了……
記得經常使用的兩個命令:
查看IP:ifconfig
查看連接通斷: ping
如下將分爲三個階段分別給出以及IP配置結構圖:
(1)用於軟件更新與軟件安裝階段:
由於咱們還要系統更新和軟件安裝,因此還要連上Internet。
這時候的IP地址基本是當地網絡自行分配的,也可能要本身設定,但方式不重要,重要的是能上網就行。
那個Internet是連到switch2仍是連到switch1上都無所謂咯,這裏就連在switch2上了。
(2)用於代碼上傳和代碼測試階段:
這個時候就要本身給電腦分配IP地址了,如下是我給的IP配置,你能夠根據本身的習慣,給本身弄個熟悉的。
monitora: 192.168.2.11 monitorb: 192.168.2.21
servera: 192.168.2.12 serverb: 192.168.2.22
clienta1: 192.168.2.13 clientb1: 192.168.2.23
clienta2: 192.168.2.14 clientb2: 192.168.2.24
robocup3dfa: 192.168.2.19 robocup3dfb: 192.168.2.29
全部的子網掩碼(Netmask):255.255.255.0
全部的網關(gateway): 192.168.2.1(明白人應該知道這個是瞎掰的)
全部的dns: 不用設置(或8.8.8.8)
"AP"指的是無線路由器,它是用來讓你們遠程上傳代碼的,給它的IP是「192.168.2.100」,「100」是隨便選的,只要別和上面的同樣,隨你怎麼配。
"AP"是連在switch1仍是switch2上都無所謂,這裏我連在switch1上了。
(這裏要說明一下爲何是「192.168.2.xxx「而不是"192.168.1.xxx",由於無線路由器常常分配192.168.1.xxx",爲了不衝突,就用".2"了,固然".3"、「.4"也能夠咯。
若是你對網絡不熟悉的話,這句話的進一步理解還獲得實踐中去體會。)
(3)用於正式比賽:
這就讓A、B組的機器獨立了,不會相互干擾了。
4. 系統安裝與更新:
繼續只用A組舉例:
本次比賽使用兩種linux操做系統:
Ubuntu 12.04 64bit:monitora,servera,clienta1,clienta2
Fedora 20 64bit:robocup3dfa
注意:
1. 在系統安裝過程當中,會提示設置初始用戶的用戶名,Ubuntu還會提示設置主機名。
2. 爲了方便記憶考慮,推薦就按以上名字設置:如monitora裝Ubuntu時,相應的初始用戶名和主機名就都設爲monitora。
3. 建議全部電腦用同一個密碼,之後用起來方便。
系統更新:
Ubuntu:
切換root身份:
sudo -i
更新:
apt-get update -y
Fedora:
切換root身份
su -
先裝一個自動搜索最快鏡像的插件
yum install yum-plugin-fastestmirror.noarch -y
更新:
yum update -y
5. 軟件安裝與系統配置(最麻煩的地方):
首先,咱們回顧一下「2. 各個電腦任務分配」裏說的東西:
servera:運行rcssserver3d;
monitora:運行roboviz;
clienta1和clienta2 :運行球隊程序;
robocup3dfa:作NFS和NIS;
安裝軟件固然要根據它們的不一樣做用來安裝咯!
爲了之後配置考慮,咱們先給全部的Ubuntu系統配置root密碼:
passwd root
好了,那麼就先從
(1)servera開始吧:
安裝ssh服務: apt-get install openssh-server openssh-client -y
安裝vim編輯器(若是須要的話): apt-get install vim -y
安裝編譯器: apt-get install g++ -y
安裝各類其餘依賴庫和相關工具: apt-get install subversion cmake libfreetype6-dev libode-dev libsdl-dev ruby ruby-dev libdevil-dev libboost-dev libboost-thread-dev libboost-regex-dev libboost-system-dev libtbb-dev build-essential automake libtool git libboost-program-options-dev libboost-thread-dev aptitude -y
編譯和安裝多線程ode(建議不要裝,裝過以後server很容易崩潰,並且沒它也不影響各個球隊表現(多虧KylinSky我才知道這個狀況的!)。只是標準要求要用,不過此次比賽就沒裝它):
cd ode-0.11.1-tbb/
./autogen.sh
./configure --enable-shared --enable-malloc LIBS=-lX11
make -j && make install
編譯安裝simspark(我這裏就不說明補丁了,說了反而添堵,本身看裏面的README,很容易本身加上去):
cd rcssserver3d-0.6.8.1
mkdir build
cd build
cmake ..
make
make install
ldconfig
如今就能夠運行球場平臺了,試試吧!
(2)monitora:
安裝ssh服務: apt-get install openssh-server openssh-client -y 安裝vim編輯器(若是須要的話): apt-get install vim -y 安裝編譯器: apt-get install g++ -y 安裝各類其餘依賴庫和相關工具: apt-get install subversion cmake libfreetype6-dev libode-dev libsdl-dev ruby ruby-dev libdevil-dev libboost-dev libboost-thread-dev libboost-regex-dev libboost-system-dev libtbb-dev build-essential automake libtool git libboost-program-options-dev libboost-thread-dev aptitude -y (其實以上和servera的安裝同樣,其實還多裝了一些,圖個省心,就這樣了)
安裝java,爲了運行roboviz:
apt-get install openjdk-6-jdk openjdk-6-jre -y
配置roboviz(我以上給的roboviz是個配置好的,不用再配置了):
cd roboviz
./build-linux64.sh
設置roboviz的server的IP:
其實如今你就能夠打開roboviz了,只是一片黑。
這是理所固然的,要知道monitora上是沒有rcssserver3d的,rcssserver3d在servera上。
修改文件:roboviz/bin/linux-amd64/resources/config.txt
將其中: Server Host : localhost
改成: Server Host : 192.168.2.12
安裝rclm2(全名RoboCupLeagueManager),它的做用估計也能猜出個大概了吧,先裝着,回頭還要說它:
./configure
make
make install
如今,你能夠在servera上運行rcssserver3d,而在monitora上運行roboviz了,這樣負荷就從一臺機器轉移到兩臺機器上去了(固然,還有交換機)。
(3)clienta1和clienta2:
安裝ssh服務: apt-get install openssh-server openssh-client -y 安裝vim編輯器(若是須要的話): apt-get install vim -y 安裝編譯器: apt-get install g++ -y 安裝各類其餘依賴庫和相關工具: apt-get install subversion cmake libfreetype6-dev libode-dev libsdl-dev ruby ruby-dev libdevil-dev libboost-dev libboost-thread-dev libboost-regex-dev libboost-system-dev libtbb-dev build-essential automake libtool git libboost-program-options-dev libboost-thread-dev aptitude -y 安裝java,爲了運行proxy: apt-get install openjdk-6-jdk openjdk-6-jre -y (和monitora同樣,只是java的做用不同)
ubuntu都OK啦!
只要Ubuntu們OK了,基本的比賽環境也就能夠了。
如今能夠就能夠按照如下方式開始比賽了:
servera 運行 rcssserver3d monitora 運行 roboviz clienta1 運行 ./start.sh 192.168.2.12 clienta2 運行 ./start.sh 192.168.2.12
「原來這樣就能夠啦!」
嗯……確實能夠這麼說,不過,還有幾個問題,你要是如今不給解決了,後頭有的是苦吃的:
問題1:你要讓各個球隊怎麼上傳代碼?U盤拷貝不是不行,只是到時那麼多人,不但有上傳,還有測試的,測試不行還有再上傳的……有你受的了;
問題2:不要忘記哦!每有一隊上傳代碼,你不但要給clienta1傳一份,還得要給clienta2也要傳一份,人一多,事兒一多,就有你混亂的了;
問題3:一個組基本有6到7支隊伍,打單循環賽,你要怎麼讓每兩隊之間打一場?是讓一支隊伍先和剩下全部隊伍打嗎,而後再讓一支隊伍和剩下全部球隊打嗎?
雖然說是機器人,咱也不能這麼累着人家啊。比賽場次安排也得有個規範的。
(4)robocup3dfa:
TC的價值如何體現,就是要看這臺機器配置的怎麼樣了,很少說了,開始吧:
如下有不少配置,我是用本身寫的shell腳原本完成的,每一個腳本的功能都很簡單:shFor3D.tar.gz
(robocup3dfa上的全部命令均已root身份運行,除非有特別說明處!!!!!!)
先是些基本軟件工具:
安裝vim編輯器(若是須要的話) yum install vim -y; 安裝syslog(當時很驚訝,fedora20竟然沒有自帶這個服務) yum install rsyslog.x86_64 -y 開啓syslog服務: systemctl enable rsyslog systemctl start rsyslog
在下載下來的shFor3D.tar.gz,有我寫的一個用於遠程測試的c源程序,很簡單,兩個文件共115行(包括空行),先解壓編譯,已備後用(更多說明見「其餘重要信息」):
解壓sim3dStart tar -axf sim3dStart.tar.gz 編譯sim3dStart服務器和客戶端 cd sim3dStart/ gcc sim3dStart-server.c -o sim3dStart-server gcc sim3dStart-client.c -o sim3dStart-client
I. 安裝和配置NFS服務器:
啥是NFS(NetworkFileSystem)服務器呢,簡單點說,就是個遠程U盤,能夠經過網絡「插」在多臺電腦上。
更進一步可參考:《鳥個的linux私房菜(服務器)》----NFS服務器
安裝NFS須要的兩個軟件: yum install rpcbind.x86_64 -y; yum install nfs-utils.x86_64 -y;
shFor3D裏有個teams文件,用來羅列隊名的,很重要!shFor3D裏的腳本基本都用到它(一行一個隊名,如下是今年的示例,其中ccwss1和ccwss2爲測試用戶):
ccwss1
ccwss2
AHJZU_3D
Apollo3D
CIT3D
Dreamwing3D
HS
HfutEngine3D
Icarus
Kylinsky3D
Miracle3D
NBUT_kylin
SEU_Jolly
Strive3D
YuShan3D
建立NFS開放的目錄(其實我要開放的是各個參賽隊伍的主目錄,固然也要同時建立這些用戶咯), ./UsersInit.sh 運行過以後會產生一個usersPasswd.txt的文件,名面有對應各個用戶的用戶名與密碼 (其實這個腳本還有另外一種用法,參見「其餘重要信息」)
若是有用戶信息錯誤,如下命令能夠刪除全部用UsersInit.sh建立的用戶:
./UserDel.sh
如今每一個用戶已被建立,而且主目錄被創建在/robocup3D下,好比ccwss1的主目錄爲:/robocup3D/ccwss1
設置NFS的配置文件,即標出要開放那些目錄: /etc/exports
在文件中添加如下內容:
/robocup3D/ccwss1 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash)
/robocup3D/ccwss2 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash)
/robocup3D/AHJZU_3D 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash)
/robocup3D/Apollo3D 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash)
/robocup3D/CIT3D 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash)
/robocup3D/Dreamwing3D 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash)
/robocup3D/HS 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash)
/robocup3D/HfutEngine3D 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash)
/robocup3D/Icarus 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash)
/robocup3D/Kylinsky3D 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash)
/robocup3D/Miracle3D 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash)
/robocup3D/NBUT_kylin 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash)
/robocup3D/SEU_Jolly 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash)
/robocup3D/Strive3D 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash)
/robocup3D/YuShan3D 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash)
開放防火牆(也是個腳本,每次重啓時都要運行一下):
./iptables_rule.sh
開啓NFS服務:
systemctl enable nfs-server.service
systemctl start nfs-server.service
到這裏,robocup3dfa上NFS服務器就算配置完畢了!
如今咱們要暫且回到ubuntu,去安裝NFS客戶端(每臺Ubuntu都要按裝):
安裝nfs客戶端(aptitude和apt-get的功能同樣,由於這是從別人blog上抄的,尊重原版,我也就這樣寫了) aptitude -y install nfs-common
好啦!你如今已經完成NFS的全套配置了。
你在Ubuntu機器上來這樣測試一下(注意,此時要先按「3. 網絡拓撲結構與IP配置」中「(2)用於代碼上傳和代碼測試階段」的方式來設置fedora和ubuntu的IP):
showmount -e 192.168.2.19 成功的話有相似下列輸出: Export list for localhost: /robocup3D/ccwss1 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash) /robocup3D/ccwss2 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash) /robocup3D/AHJZU_3D 127.0.0.1(rw,no_root_squash) 192.168.2.0/24(rw,no_root_squash) ........................................(如下省略)........................................ 基本就是和你剛剛配置的在fedora上的配置文件/etc/exports同樣
2012年和2013年我都作過國賽的TC助手,這兩界把NFS搭建完畢以後,差很少就算整個環境搭建完成了。
如今咱們不妨測試一下(注意,此時要先按「3.網絡拓撲結構與IP配置」中「(2)用於代碼上傳和代碼測試階段」的方式來設置fedora和Ubuntu的IP),
在clienta1上操做:
新建兩個文件夾: mkdir -p myccwss1 myccwss2
掛載NFS的兩個開放目錄到剛剛新建的文件夾中: mount -t nfs 192.168.2.19:/robocup3D/ccwss1 myccwss1 mount -t nfs 192.168.2.19:/robocup3D/ccwss2 myccwss2
在clienta2上操做:
(同clienta1)
這時你能夠在clienta1(或clienta2)上覆制兩份可執行文件分別放到myccwss1和myccwss2裏。
假設你是在clienta1上進行復制的,此時你會驚奇的發現clienta2裏的myccwss1和myccwss2也有了剛剛複製的文件。
這就是NFS,一臺電腦的硬盤(robocup3dfa)被多臺電腦分享了。
仍是按剛剛的方式:
servera 運行 rcssserver3d
monitora 運行 roboviz
clienta1 運行 ./start.sh 192.168.2.12 clienta2 運行 ./start.sh 192.168.2.12
開始比賽吧!
不過,本着「不做死就不會死」的精神,咱們從Ubuntu回到fedora上繼續(若是你剛剛進行了測試,請還原IP到能上網的狀態):
II. 安裝和配置NIS服務器:
啥是NIS(NetworkInfomationSystem)服務器呢?說很差,總之是用來統一管理用戶等一系列信息用的。
它主要有兩個程序組成:ypserv和yppasswd。
更進一步可參考:《鳥個的linux私房菜(服務器)》----NIS服務器
安裝NIS服務器程序(ypserv),同時這也是robocup3dfa上最後要安裝的軟件,安裝完成後請按「3. 網絡拓撲結構與IP配置」中「(2)用於代碼上傳和代碼測試階段」的方式來設置robocup3dfa的IP: yum install ypserv.x86_64 -y 設置NIS(ypserv)配置文件,設置域名與固定ypserv端口:/etc/sysconfig/network
(在文件最後追加)
NISDOMAIN=robocup3dfa
YPSERV_ARGS="-p 1011"
設置NIS(ypserv)配置文件,設置NIS服務網域:/etc/ypserv.conf
(在文件最後追加)
127.0.0.0/255.255.255.0 : *: *: none
192.168.2.0/255.255.255.0: *: *: none
設置NIS配置文件,設置IP與域名對應關係:/etc/hosts
(在文件最後追加)
192.168.2.11 monitora
192.168.2.12 servera
192.168.2.13 clienta1
192.168.2.14 clienta2
192.168.2.19 robocup3dfa
設置NIS(yppasswd)配置文件,固定端口:/etc/sysconfig/yppasswdd
(在文件最後追加)
YPPASSWDD_ARGS="--port 1012"
設置主機名(重啓後無效):
hostname robocup3dfa
設置主機名(重啓後有效):/etc/hostname
(在文件最後追加)
robocup3dfa
開啓ypserv和yppasswd服務:
systemctl enable ypserv
systemctl start ypserv
systemctl enable yppasswdd
systemctl start yppasswdd
初始NIS數據庫:
/usr/lib64/yp/ypinit -m
(以後會彈出確認相關信息,基本都是OK,第一個確認是按「ctrl+D", 第二個確認是輸入「y"回車,本身仔細閱讀看一下吧)
如今咱們要暫且回到ubuntu,去安裝NIS客戶端(每臺Ubuntu都要安裝):
安裝NIS客戶端程序(注意,安裝過程當中不要走神,中途會彈出窗口讓你設置NIS服務器域名,固然,咱們得輸入:robocup3dfa)
(同時這也是全部Ubuntu上最後要安裝的軟件,安裝完成後請按「3.網絡拓撲結構與IP配置」中「(2)用於代碼上傳和代碼測試階段」的方式來設置Ubuntu們的IP:
aptitude -y install nis
設置NIS客戶端配置文件,指定NIS服務器IP: /etc/yp.conf
(在文件最後追加)
ypserver 192.168.1.19
設置NIS客戶端配置文件,給本機加入NIS服務切換規則:
(就修改紅字標註的那些行,其實這幾行中"nis"的前後順序是有蹊蹺的,關於「hosts「那行,你若把「nis"放句尾也行,只是在你用sudo,或切換用戶,或ping 主機名時……本身能夠試試,反正客戶端有好幾臺)
passwd: compat nis
group: compat nis
shadow: compat nis
hosts: files nis mdns4_minimal [NOTFOUND=return] dns mdns4
測試NIS客戶端:
yptest
成功的話,會產生以下輸出:
Test 1: domainname
Configured domainname is "robocup3dfa"
Test 2: ypbind
Used NIS server: robocup3dfa
Test 3: yp_match
WARNING: No such key in map (Map passwd.byname, key nobody)
....(中間省略).... Test 6: yp_master robocup3dfa ....(中間省略).... Test 8: yp_maplist passwd.byname protocols.byname hosts.byaddr hosts.byname ....(中間省略).... Test 9: yp_all ccwss1 robocup3d:$1$U9Gccb60$K5lDQ.mGBw9x4oNEkM0Lz/:2001:2000::/robocup3D/ccwss1:/bin/bash ....(中間省略).... 1 tests failed
總過有9個」test"有一個failed,不過沒有關係,NIS照樣能夠用。
給每一個用戶統一設置掛載點:
建立掛載的入口目錄(全都在/robocup3D/***): ./mkdir_home.sh 掛載(每次開機重啓時,都得要執行): ./mount_nfs.sh(注意事項,參見「其餘重要信息」)
咱們在Ubuntu上來測試NIS吧,
a,用戶登陸測試: 在clienta1電腦上(密碼在以前用UsersInit.sh生成的usersPasswd.txt文件裏找): su - ccwss1 密碼: b,修改密碼測試: yppasswd 舊密碼: 新密碼: 再輸一次:
OK啦!此次真的是所有OK了,但是,但是……做死的血液又在沸騰了.
若是有人不當心傳錯文件了,或有故意惡搞,塞個幾十G的文件過來,那還不得把服務器撐爆嗎?
因此,我就給每一個用戶添加了硬盤容量使用限制,主要用的軟件叫quota,不須要安裝,fedora自帶,那麼咱們就愉快的開始吧!
(事實證實quota就是多餘的,你們都是中華民族的好兒女,沒人惡搞。最最重要的一點就是:那破無線路由器,唉……,組織方給的全部硬件都很到位,就這無線路由器最煞風景了,聽說是那天臨時從一個辦公室搶來的。)
回到robocup3dfa上
讓根目錄支持quota: mount -o remount,usrquota,grpquota / 讓根目錄長期支持quota,修改/etc/fstab
將這行:
UUID=5ab7082c-41f4-482e-8a0c-fd90d92884b6 / ext4 errors=remount-ro 0 1
改成(你的電腦上應該會有些不同,可是隻要記住是在倒數第三項上追加紅色文字就好了):
UUID=5ab7082c-41f4-482e-8a0c-fd90d92884b6 / ext4 errors=remount-ro,usrquota,grpquota 0 1
開啓quota:
quotaoff -vaug
quotacheck -avugm
quotaon -vaug
給每一個用戶設置500M容量限制(應該沒有500M,大概480M多一點的樣子):
./quota.sh
好了,你能夠到clienta1上測試一下:
切換ccwss1用戶: su - ccsww1 建立一個400M的文件並查看: dd if=/dev/zero of=bigfile1 bs=1M count=400 ls -lh 再建立一個400M的文件並查看(這時你看到bigfile2應該只有180幾M) dd if=/dev/zero of=bigfile1 bs=1M count=400 ls -lh 測試完成後,就把兩個bigfile刪了吧。
6. 測試與使用:
首先,我們確認一下,咱們已經將每臺機器的IP都設置成了192.168.2.xxx了,如今咱們再接上無線路由器(AP),並設置其IP。
請按「3. 網絡拓撲結構與IP配置」中「(2)用於代碼上傳和代碼測試階段」的方式來設置IP和網線接法。
複製一份先前編譯好的sim3dStart-server到servera上(還記得這個嗎) servera 運行 sim3dStart-server monitor 運行 roboviz
此時roboviz會是一片漆黑;
接下來,將要模擬各個隊伍的代碼上傳與測試(如下操做均在筆記本上完成):
首先連上無線路由器。
(這時咱們沒必要要用root身份)
遠程上傳可執行文件:
scp -rp myBinary ccwss1@192.168.2.13:/robocup3D/ccwss1
遠程登陸ccwss1:
ssh ccwss1@192.168.2.13
(此時的遠程登陸機爲clienta1,登陸後,你會發現用scp傳上來的文件)
遠程啓動rcssserver3d:
restartSim3d
這時roboviz就會顯示球場了;
運行球隊代碼:
./start.sh 192.168.2.12
若是clienta1上運行了proxy,則只需運行(proxy的更多說明見「其餘重要信息」):
./start.sh
或
./start.sh 127.0.0.1
這時你能夠再用另外一個用戶登陸,上傳並運行代碼來進行比賽測試(注意有一些不一樣):
遠程上傳代碼:
scp -rp myBinary ccwss2@192.168.2.14:/robocup3D/ccwss2
遠程登陸ccwss2:
ssh ccwss2@192.168.2.14
(此時的遠程登陸機爲clienta2,,登陸後,你會發現用scp傳上來的文件)
運行球隊代碼:
./start.sh 192.168.2.12
若是clienta2上運行了proxy,則只需運行(proxy的更多說明見「其餘重要信息」):
./start.sh
或
./start.sh 127.0.0.1
若是其餘球隊要再測試的話,只要運行restartSim3d就能重啓rcssserver3d了。
最後衝刺了!立刻就能夠完成啦!
不作特別說明,如下咱們均已root身份執行命令!!!
接下來咱們要操做monitora這臺電腦
各臺Ubuntu的root密碼以前設了沒?就在「4. 軟件安裝與系統配置」一開始的地方
設置免密碼登陸: ssh-keygen 而後一路回車;
ssh-copy-id root@clienta1
輸入clienta1的root密碼
ssh-copy-id root@clienta2
輸入clienta2的root密碼
ssh-copy-id root@servera
輸入servera的root密碼
此時你在monitora上登陸任意上面任意一臺電腦都不用密碼了,能夠像下面這樣試試:
ssh root@clienta1
配置rclm2:
修改/usr/local/share/types/3Dspark/config文件(具體路徑可能不同,主要是types/3Dspark/config這個文件): NET_PREFIX=10.10.0 ==>> NET_PREFIX=192.168.2 SERVER=${NET_PREFIX}.1 ==>> SERVER=${NET_PREFIX}.2 CLIENT1=root@${NET_PREFIX}.2 ==>> CLIENT1=root@${NET_PREFIX}.3 CLIENT2=root@${NET_PREFIX}.3 ==>> CLIENT2=root@${NET_PREFIX}.4 這時候你應該能夠猜出我上面在幹什麼吧;
初始化rclm2:
rclm2 groupA
cd groupA
./script/init 3Dspark
建立文件teamsOfA,列出小組中各參賽隊用戶主目錄(如下以今年的A組爲例):
/robocup3D/AHJZU_3D
/robocup3D/Apollo3D
/robocup3D/Dreamwing3D
/robocup3D/Icarus
/robocup3D/Kylinsky3D
/robocup3D/Miracle3D
編制A組賽程安排:
./script/schedule/init teamsOfA
這時會產生一個文件var/schedule。打開看一下,差很少是這個樣子:
/robocup3D/AHJZU_3D vs /robocup3D/Apollo3D
/robocup3D/Apollo3D vs /robocup3D/Dreamwing3D
***************如下省略*********
若是用rclm2來管理比賽的話,比賽場次順序就是按照以上那個文件來的。
讓rclm2啓用roboviz,修改script/game/start文件:
將
pushd ~/Desktop/roboviz/
改成你本身的roboviz路徑,我修改的路徑爲:
pushd /home/monitora/Desktop/roboviz/bin/linux-amd64/
終於到最後一步了!當每一個球隊都上傳了代碼後,運行如下命令,正式比賽:
./script/start
其餘重要信息:
1. 關於restartSim3d:
(1)一個bug:
sim3dStart-server有一個bug,就是當在servera上同時啓動sim3dStart-server和rcssserver3d時,用於遠程重啓rcssserver3d的restartSim3d會運行失敗。
(2)restartSim3d腳本:
restartSim3d是個shell腳本,就一行命令:
sim3dStart-client servera
猜猜看,若是換成在B組,這個命令會產生什麼結果嗎?
若是咱們要用在B組,咱們應當把servera改爲serverb(或者是IP:192.168.2.22也行)
2. UsersInit.sh的用法:
像這樣運行程序:
./UsersInit.sh
程序會建立teams裏的全部用戶,並隨機產生6位密碼,而後保存至usersPasswd.txt文件裏。這裏有個問題。
我經常想將用戶和密碼信息提早1到2個星期通知個參賽隊,可是要知道我這時尚未搭建環境呢!
到了在會場再次運行UsersInit.sh時,它又會建立新的密碼。這可麻煩了。那麼提早告知你們用戶名與密碼有什麼用呢?
鑑於這點,這個腳本還有個用法
./UsersInit.sh oldUsersPasswd.txt
其中oldUsersPasswd.txt能夠是你以前運行./UsersInit.sh時獲得的usersPasswd.txt(而後把它更名爲oldUsersPasswd.txt以示區別),
這種用法,程序會根據oldUsersPasswd.txt裏的用戶名與對應的密碼來進行設置,也就是說舊密碼有效。
3. 電腦重啓注意事項:
電腦重啓的順序很重要,不然……試試看吧,試過以後印象更深入。
先打開:fedora;
而且要確認:網絡配置是否爲192.168.2.19
而且要打開防火牆:./iptables_rule.sh
此時才能打開Ubuntu,並且還要確實IP配置和執行掛載命令 ./mount_nfs.sh
4. proxy:
爲了和國際接軌,這個是今年國賽新加的東西,須要運行在clienta1和clienta2上,按正統規則來講,這個東西是屬於標準的,但它與今年13支參賽隊中的6支都不兼容(具體表現爲全部的球員都不能正常走路),因此我也給取消不用了,不過既然是標準,我就講講用法吧。
(操做servera電腦)
切換root身份: su - 設置rcssserver3d的Agent的端口,從3100改成3110: /usr/local/share/simspark/spark.rb(路徑可能不一樣) $agentPort = 3100 ==>> $agentPort = 3110 刪除臨時配置文件: rm -rf ~/.simspark
(在clienta1和clienta2電腦上操做)
解壓並運行proxy:
tar -axf proxy.tar.gz
./startProxy.sh 192.168.2.12 3110 3100
此時,原本運行球隊的命令:
./start.sh 192.168.2.12
就能夠改成:
./start.sh
或
./start.sh 127.0.0.l
若是要用rclm2的話,還要修改rclm2的相關配置文件內容(見下)
5. rclm2的使用說明:
rclm2主要作如下5件事兒:
(1)複製並修改rcssserver3d的配置文件到servera的root主目錄裏;
(2)編制單循環賽的比賽場次安排;
(3)按順序啓動rcssserver3d, roboviz, 球隊1的代碼, 球隊2的代碼
(4)rcssserver3d崩潰時,記錄並重置比賽時間和比分;
(5)壓縮log文件;
第(1)件事兒挺重要的,它會在./script/start第一次運行後完成,無論你用不用rclm2,最好仍是運行一次這個程序。
第(2)件事兒也最好讓rclm2幫你作,畢竟它編制出的比賽場次比較合理。
第(3)件事兒嘛,是正式比賽時重複最多的步驟,其實當你習慣了用ssh手動啓動時,不用rclm2也無所謂。
第(4)件事兒也挺重要的,這主要是由於咱們的rcssserver3d常常會崩潰(crash)(參加過比賽的老隊員通常知道),好比在比賽到了153秒的時候,roboviz會忽然顯示
"disconnected",因而比賽要重開,那麼rclm2會自動恢復比賽時間和比分。若是你不想用rclm2的話,手動也能完成這個工做:
打開root主目錄下的naosoccersim.rb文件(以前在./script/start後產生的文件),記得還得是root身份哦:
cd vim naosoccersim.rb
其中大約在118,119行的樣子,
是這樣兩行:
obj.setTime(0)
obj.setScores(0,0)
改成:
obj.setTime(153)
obj.setScores(2,1)
重開rcssserver3d和roboviz,這時時間是從153開始了,比分一開始就是2:1.
如何找到rcssservver3d崩潰時的時間?(最好先看看「6. 不用rclm2,而用手動啓動rcssserver3d的注意事項」)
root主目錄裏有個sparkmonitor的log文件,用vim打開它,並跳轉到最後一行,行首就標註有time,那個就是崩潰時的時間。
至於比分嘛,這個你們都會記得的。
第(5)件事兒基本沒人關注,它會把每次比賽的log文件從servera裏傳到monitora裏,並壓縮保存進groupA/archives文件夾裏。若是要把restore.py整合進rclm2裏面,這個仍是有用的。
6. 不用rclm2,而用手動啓動比賽時的注意事項:
用rclm2在./script/start第一次配置以後,若要改用手動啓動rcssseerver3d和球隊代碼的話,
在啓動rcssserver3d時必定要以root身份,而且得在root主目錄下運行rcssserver3d命令,不然以前的用rclm2作的相關配置就會失效,總重要的是不會產生sparkmonitor這個log文件。
7. restore腳本:
「都是rcssserver3d崩潰惹的禍「,若是就在你快要進球時,rcssserver3d崩潰了怎麼辦?之前的國賽,只能自認倒黴。如今,這個腳本能夠回覆rcssserver3d崩潰前的樣子,
但要用sparkmonitor這個log文件。
在servera機器上:
在rcssserver3d崩潰後作的第一件事,保存sparkmonitor:
cp sparkmonitor sp.backup
重開比賽,並按以前的左右場順序上雙方球員,待全部球員準備完畢後,恢復狀態:
./restore sp.backup
你能夠本身測試一下,先讓比賽比到一半,而後殺掉rcssserver3d,再按以上步驟恢復球場狀態。
這個說的是手動的狀況,若是要用rclm2,你得要修改script/game/start這個腳本,今年A組沒用rclm2,B組用了,至於怎麼修改的,我忘備份了,很差意思……
若是你使用了proxy,那麼還得在多修改一些地方:
修改script/game/start,大概在第57和第62行: 將 ssh ${CLIENT1} "su - $NAME1 -c './start.sh $SERVER &> log/start.log'" & ssh ${CLIENT2} "su - $NAME2 -c './start.sh $SERVER &> log/start.log'" & 修改成: ssh ${CLIENT1} "su - $NAME1 -c './start.sh 127.0.0.1 &> log/start.log'" & ssh ${CLIENT2} "su - $NAME2 -c './start.sh 127.0.0.1 &> log/start.log'" &
8. mount_nfs.sh使用說明:
這個腳本很短,就13行(註釋就佔了6行),不妨打開看一下。
注意這樣一行: mount -t nfs robocup3dfa:$HomeDir/$username $HomeDir/$username 你應該能看出來,若是把這個腳本用到B組而不作修改,確定會出問題的(可能到正式比賽時纔會顯現),用到B組時,咱們要修改成: mount -t nfs robocup3dfb:$HomeDir/$username $HomeDir/$username
一點其餘建議:
組織一場比賽不但得有TC,還要有OC(OrganizationCommittee)。可國內比賽不分這個,以上是TC份內的事兒,但還有OC的事兒也得你本身來,
什麼「統計比分」啦、「發佈通知」啦、「聯繫各方」啦,「編寫規則」啦,「打印獎狀」啦……總之有你煩的了!必定不要以爲費時間,耐下心思,簡單培訓幾個會場的志願者(若是沒有志願者………………),都是些很簡單的活兒,雖然一開始可能有點不熟悉,不過很快就能夠上手的。