參考、借鑑連接:https://blog.csdn.net/k_young1997/article/details/81629818
校內ACM即將開展,原本咱們的主服務器是可以容納150支隊伍同時提交代碼進行判斷。只因今年獎品過於誘人,致使今年參賽隊伍在170到180支隊伍之間,大大超過咱們估計值。這對主服務器也是一個不曉得考研。爲了分擔主服務器的壓力與防止比勝過程中出現意外致使比賽不得不停止,咱們主辦方打算採用分佈式系統,再搭幾個OJ判斷機用來分擔主服務器的壓力。
由於在網絡上的教程與我真實的系統環境有點出入,中間出現各類問題, 重裝系統好幾回。因此寫一篇博客記錄下本身心路歷程。
本文介紹了我在搭建中的注意事項。在安裝前期會提示設置數據庫密碼,所有設置爲root。
#####1、下面是我第一次安裝成功的過程
一、先將用戶切換爲root用戶php
$ sudo su
密碼:
二、先cd到home目錄下,再將下面的命令粘貼到終端,下載的install-ubuntu16+.sh腳本就在home目錄下mysql
# cd # wget https://raw.githubusercontent.com/zhblue/hustoj/master/trunk/install/install-ubuntu16+.sh
三、先安裝下前置軟件,避免後面運行腳本時出現各類奇奇怪怪的問題nginx
# apt-get update # apt-get install mysql-server mysql-client //在執行完這條命令後會提示設置mysql的密碼,必定要設置爲root,否則會影響後面腳本的運行 # apt-get install nginx //這個很容易出錯,在安裝完後運行下排錯命令查看nginx安裝是否出錯 # nginx -t #apt-get install php7.0
下面是運行nginx -t排錯命令以後的結果,若是出現如下提示就說明沒問題。git
root@max-studio3:~# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
使用如下命令查看nginx是否工做github
# service nginx status
若是出現綠色的 active runing 就表明這個組件成功運行
先將mysql、nginx、php7.0三個前置軟件安裝好以後,後面能夠避免大部分問題,剩下的問題大概就是配置文件沒配置對什麼的。
四、接下來就是運行腳本了,不少博客不建議直接運行腳本進行安裝,由於中間路徑、文件、配置等等會出現各類各類問題。在這裏我也建議打開腳本文件一條命令一條命令的去執行,出現問題立馬排錯。
接下來就是我手動執行命令踩過的坑
4.一、在home路徑下打開 install-ubuntu16+.sh腳本web
# cd $HOME # gedit install-ubuntu16+.sh
4.二、當執行到第五行代碼時,這時的路徑就會發生改變sql
# cd /home/judge/
注:此後的命令不少都是在此路徑下運行的
4.三、執行到第一個if語句以前數據庫
if grep "OJ_SHM_RUN=0" etc/judge.conf ; then mkdir run0 run1 run2 run3 chown judge run0 run1 run2 run3 fi
先去/home/judge/etc 打開judge.conf配置文件 把 OJ_SHM_RUN=1 改成OJ_SHM_RUN=0
而後再退回到 /home/judge目錄,接着再執行如下命令,就可以成功建立run0 run1 run2 run3 這四個文件夾ubuntu
if grep "OJ_SHM _RUN=0" etc/judge.conf ; then mkdir run0 run1 run2 run3 chown judge run0 run1 run2 run3 fi
4.四、 執行如下命令時,必定要在 /home/judge的路徑下執行;而且接下來的代碼都要在這個路徑下執行瀏覽器
sed -i "s/OJ_USER_NAME=root/OJ_USER_NAME=$USER/g" etc/judge.conf sed -i "s/OJ_PASSWORD=root/OJ_PASSWORD=$PASSWORD/g" etc/judge.conf sed -i "s/OJ_COMPILE_CHROOT=1/OJ_COMPILE_CHROOT=0/g" etc/judge.conf sed -i "s/OJ_RUNNING=1/OJ_RUNNING=$CPU/g" etc/judge.conf
4.五、當執行到如下命令時有可能會出錯
mysql -h localhost -u$USER -p$PASSWORD < src/install/db.sql echo "insert into jol.privilege values('admin','administrator','N');"|mysql -h localhost -u$USER -p$PASSWORD
報錯信息爲:
mysql:[Warning] Using a password on the command line interface can be insecure.
解決辦法:將上述命令改成:
mysql -h localhost -u root -p < src/install/db.sql echo "insert into jol.privilege values('admin','administrator','N');"|mysql -h localhost -u root -p
4.六、當執行到下面的命令時
/etc/init.d/nginx restart
出現如下信息就證實nginx已成功配置並重啓服務
[ OK ] Restarting nginx ( via systemctl ): nginx.service.
4.七、執行這條命令時
/etc/init.d/php7.0-fpm restart
出現如下信息證實php已成功配置並重啓服務
[ OK ] Restarting php7.0 - fpm ( via systemctl ): php7.0 - fpm.service
4.八、執行如下命令時
cd src/core chmod +x ./make.sh ./make.sh //特別是這一句
會報錯,緣由是在make.sh腳本中
rm /usr/bin/sim_rb /usr/bin/sim_sh //這句會報錯 因文件不存在沒法刪除 ln -s /usr/bin/sim_c /usr/bin/sim_cc //這句會報錯 由於文件已存在沒法鏈接
這兩個錯誤能夠不用理會,由於那兩個文件原本就須要刪除的,第二句連接既然已經存在了,也就不用再去連了。
4.九、當執行如下命令時,其路徑要在 /home/judge/src/core 下執行
if grep "/usr/bin/judged" /etc/rc.local ; then echo "auto start judged added!" else sed -i "s/exit 0//g" /etc/rc.local echo "/usr/bin/judged" >> /etc/rc.local echo "exit 0" >> /etc/rc.local fi
4.十、 當執行如下命令時,其路徑要在 /var/spool/cron/crontabs 下執行
if grep "bak.sh" /var/spool/cron/crontabs/root ; then echo "auto backup added!" else echo "1 0 * * * /home/judge/src/install/bak.sh" >> /var/spool/cron/crontabs/root fi
最後幾條命令依然在 /var/spool/cron/crontabs 此路徑下執行。全部命令執行完畢後,OJ已經搭好了。在瀏覽器輸入http://127.0.0.1 迴路地址測試。能順利打開本地網頁就證實 OJ已經搭建完畢。
附錄:OJ安裝後四個重要配置文件的位置
/home/judge/etc/judge.conf /home/judge/src/web/include/db_info.inc.php /etc/php/7.0/fpm/php.ini /etc/nginx/sites-enabled/default