《從零開始搭建遊戲伺服器》Linux開發環境配置
前言:
之前的開發工作一直是在Windows開發環境下進行的,但是正真釋出和外網運營勢必要釋出到Linux環境下,而且有很多服務端的工具對於Windows系統的相容性並不是非常完善,就像常用的Docker容器就只支援Linux系統,所以提前瞭解和部署Linux開發環境勢在必行。
一、準備工作:
首先你需要一臺安裝Linux系統的機器,或者直接在Windows系統中安裝虛擬機器,這裡我使用的就是虛擬機器,安裝的系統是Ubuntu14.04.4的系統映象。
為了節省虛擬機器中的磁碟空間,我們通常使用Windows和Linux之間建立共享檔案的方式,將例如安裝包之類只是在Linux中臨時使用的檔案放在Windows中,Linux通過Samba
VM Tool
去訪問共享目錄中的檔案,由於安裝VM Tool有坑,所以這裡我選擇Samba
來搭建共享服務。
二、Linux與Windows搭建共享服務:
環境:
- Windows:
Ip地址:192.168.154.1
共享目錄:D:/ShareFiles - Linux:
虛擬機器
1.Windows下建立共享目錄:
- Windows下
控制面板
->使用者賬戶
->管理賬戶
中新建一個使用者(我新建的使用者取名:linsh),設定密碼(這裡我設定的密碼為:123456):
- 找到Window中我們需要被用來做共享目錄,這裡我直接在D盤下面新建一個ShaderFiles
屬性
視窗,選中共享
頁籤,點選共享:
在選擇要與其他共享的使用者時,選擇前面步驟新建的linsh使用者:
然後點選新增將其新增到列表中,許可權級別也可直接修改,修改完成之後點選共享按鈕,再次檢視ShaderFiles的屬性時,發現共享頁簽下面多了一個網路路徑表示設定共享成功:
2.Linux安裝Samba:
在Linux系統下,開啟終端:
先使用Ubuntu預設的安裝軟體的工具
apt-get
來安裝samba
(假如使用的是RH的話,可以使用yum
來進行軟體安裝):sudo apt-get install samba
安裝samba客戶端,使用指令sudo apt-get install smbclient
[email protected]:~$ sudo apt-get install smbclient 正在讀取軟體包列表... 完成 正在分析軟體包的依賴關係樹 正在讀取狀態資訊... 完成 smbclient 已經是最新的版本。 smbclient 被設定為手動安裝。 下列軟體包是自動安裝的並且現在不需要了: libntdb1 python-ntdb Use 'apt-get autoremove' to remove them. 升級了 0 個軟體包,新安裝了 0 個軟體包,要解除安裝 0 個軟體包,有 295 個軟體包未被升級。
開啟和關閉samba的指令:
sudo /etc/init.d/samba start #開啟samba服務 sudo /etc/init.d/samba stop #關閉samba服務
將
samba
新增到系統的開機自啟動項中,由於Ubuntu沒有RH(紅帽)那樣的chkconfig命令,我們可以選擇其他的管理自啟動項的方式,例如:sysv-rc-conf,操作步驟如下:- 安裝:使用指令
apt-get install sysv-rc-conf
; - 設定服務,使之開機啟動:
sudo sysv-rc-conf samba on
。
此外,還可以通過直接改
/etc/rc0.d ~ /etc/rc6.d
和/etc/rcS.d
下的東西,S開頭的表示啟動,K開頭的表示不啟動,- 安裝:使用指令
- 假如需要修改
samba
的配置,可以直接修改samba的配置檔案:/etc/samba/smb.conf
;
3.連線訪問共享目錄:
Lunix下訪問Windows下共享目錄的辦法有兩個:一是檔案掛載,二是網路遠端連線服務:
方法一:
1.安裝
cifs-utils
:[email protected]:~$ sudo apt-get install cifs-utils [sudo] password for linsh: 正在讀取軟體包列表... 完成 正在分析軟體包的依賴關係樹 正在讀取狀態資訊... 完成 下列軟體包是自動安裝的並且現在不需要了: libntdb1 python-ntdb Use 'apt-get autoremove' to remove them. 將會安裝下列額外的軟體包: keyutils 建議安裝的軟體包: winbind 下列【新】軟體包將被安裝: cifs-utils keyutils 升級了 0 個軟體包,新安裝了 2 個軟體包,要解除安裝 0 個軟體包,有 295 個軟體包未被升級。 需要下載 120 kB 的軟體包。 解壓縮後會消耗掉 410 kB 的額外空間。 您希望繼續執行嗎? [Y/n] y 獲取:1 http://us.archive.ubuntu.com/ubuntu/ trusty/main cifs-utils amd64 2:6.0-1ubuntu2 [86.7 kB] 獲取:2 http://us.archive.ubuntu.com/ubuntu/ trusty/main keyutils amd64 1.5.6-1 [33.6 kB] 下載 120 kB,耗時 7秒 (15.1 kB/s) 正在選中未選擇的軟體包 cifs-utils。 (正在讀取資料庫 ... 系統當前共安裝有 194558 個檔案和目錄。) 正準備解包 .../cifs-utils_2%3a6.0-1ubuntu2_amd64.deb ... 正在解包 cifs-utils (2:6.0-1ubuntu2) ... 正在選中未選擇的軟體包 keyutils。 正準備解包 .../keyutils_1.5.6-1_amd64.deb ... 正在解包 keyutils (1.5.6-1) ... 正在處理用於 man-db (2.6.7.1-1ubuntu1) 的觸發器 ... 正在設定 cifs-utils (2:6.0-1ubuntu2) ... 正在設定 keyutils (1.5.6-1) ...
2.新建Linux下要掛載Windows共享檔案的目錄,這裡我直接選擇掛載在
/mnt/Windows
,掛載步驟如下:- 建立/mnt/Windows目錄:
sudo mkdir /mnt/Windows
; 將Windows的ShareFiles目錄掛載到Linux下的/mnt/Windows目錄下:
mount -t cifs -o username=linsh //192.168.154.1/ShareFiles /mnt/Windows
,然後要求輸入密碼,假如掛載成功,可以在/mnt/Windows下檢視到Windows的ShareFiles中的內容:linsh@ubuntu:~$ sudo mount -t cifs -o username=linsh //192.168.154.1/ShareFiles /mnt/Windows Password for [email protected]//192.168.154.1/ShareFiles: linsh@ubuntu:~$
- 在
/etc/fatab
中新增此共享目錄的相關掛載資訊,這樣是為了實現開機時自動掛載共享目錄:
# /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda1 during installation UUID=8cdb2ac2-5f81-4e29-9a89-69b21cfa61ea / ext4 errors=remount-ro 0 1 # swap was on /dev/sda5 during installation UUID=90f1147d-81e3-48c5-8375-817c1a254061 none swap sw 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0 //192.168.154.1/ShareFiles /mnt/Windows cifs username=linsh,password=123456 0 0
- 建立/mnt/Windows目錄:
方法二:
- 開啟Linux的檔案管理系統,在網路選項下面會有一個
連線到伺服器
選項,開啟新增遠端共享目錄地址:
- 這裡新增的地址必須帶
smb
字首,這是smb服務的規則:
- 點選連線輸入在Windows中已設定訪問許可權的賬號密碼(例如:賬號:linsh,密碼:123456),驗證成功,可以進入到共享目錄並且側欄會多出一個網路連線節點:
- 這裡新增的地址必須帶
對比方法一和二,不難發現,在Linux這種終端指令操作為主的系統下,掛載的方式更加方便。
三、Java開發環境部署:
1.安裝前檢查:
先使用java -version
檢查當前是否已安裝JDK,假如沒有,則出現如下提示:
linsh@ubuntu:/mnt/Windows$ java -version
程式 'java' 已包含在下列軟體包中:
* default-jre
* gcj-4.8-jre-headless
* openjdk-7-jre-headless
* gcj-4.6-jre-headless
* openjdk-6-jre-headless
請嘗試:sudo apt-get install <選定的軟體包>
linsh@ubuntu:/mnt/Windows$
2.安裝選擇和下載:
先下載所需版本的JDK,下載的包有兩種格式可以選擇:
.rpm
:安裝需通過alien
工具轉化為.deb
格式才能安裝,使用CentOS 6.4或者Red Hat常用這種方式,而Ubuntu不支援;.tar.gz
壓縮包:這是解壓後就可直接使用的版本。
3. JDK安裝:
-
注:需使用
sudo apt-get install alien
指令安裝alien
。- 通過
sudo alient jdk-8u121-linux-x64.rpm
將.rpm檔案裝換為.deb檔案; - 通過
sudo dpkg -i jdk1.8.0_121-1.8.0_121.deb
進行安裝。
- 通過
方法二:
.tar.gz
壓縮包安裝:
首先我下載了最新的Linux版本的JDK壓縮包:jdk-8u121-linux-x64.gz,安裝步驟如下:在/usr/local下新建一個目錄命名為jvm:
sudo mkdir /usr/local/jvm
解壓安裝包到jvm目錄下:
sudo tar -zxvf /mnt/Windows/jdk-8u121-linux-x64.gz -C /usr/local/jvm
開啟jvm目錄,可以看到目錄下多了一個jdk1.8.0_121的資料夾,這就是解壓縮後得到的安裝包;
配置環境變數:
使用終端開啟和編輯/etc/profile
配置檔案:sudo vi /etc/profile
在文字末尾加上JDK的相關配置資訊:
# SET Java environment JAVA_HOME=/usr/local/jvm/jdk1.8.0_121 CLASSPATH=.:$JAVA_HOME/lib.tool.jar PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH
輸入一下指令是修改配置檔案立即生效:
source /etc/profile
通過
java -version
查詢是否配置成功,如果成功,則顯示當前JDK的版本:linsh@ubuntu:~$ java -version java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode) linsh@ubuntu:~$
至此,JDK的安裝工作就完成了。
四、Redis資料庫:
方法一:
在Linux下使用一下指令進行解壓和編譯:
$ tar xzf redis-3.2.8.tar.gz $ cd redis-3.2.8 $ make
make完成之後,在redis-3.2.8/src檔案目錄下會生成redis的服務程式
redis-server
,還有用於測試的客戶端程式redis-cli
,接下來我們就來嘗試啟動redis服務,進入到src目錄下執行./redis-server
指令,啟動成功如下圖所示:[email protected]:/mnt/Windows/redis-3.2.8/src$ ./redis-server 2338:C 20 Mar 23:40:38.803 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf 2338:M 20 Mar 23:40:38.806 # You requested maxclients of 10000 requiring at least 10032 max file descriptors. 2338:M 20 Mar 23:40:38.806 # Server can't set maximum open files to 10032 because of OS error: Operation not permitted. 2338:M 20 Mar 23:40:38.806 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'. _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 3.2.8 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 2338 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 2338:M 20 Mar 23:40:38.831 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 2338:M 20 Mar 23:40:38.832 # Server started, Redis version 3.2.8 2338:M 20 Mar 23:40:38.832 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 2338:M 20 Mar 23:40:38.832 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. 2338:M 20 Mar 23:40:38.833 * The server is now ready to accept connections on port 6379
開啟
redis-cli
客戶端進行測試,假如一切正常,應該可以出現下面的輸出:linsh@ubuntu:/mnt/Windows/redis-3.2.8/src$ ./redis-cli 127.0.0.1:6379> set name linsh OK 127.0.0.1:6379> get name "linsh"
檔案整理:
其實安裝包中這麼多檔案,我們最後使用過程中需要用到的也就三個檔案:redis.conf、redis-server和redis-cli,在/usr/local/jvm下建一個目錄redis-3.2.8用來放置Redis相關檔案:sudo mkdir /usr/local/jvm/redis-3.2.8 sudo cp /mnt/Windows/redis-3.2.8/redis.conf /mnt/Windows/redis-3.2.8/src/redis-server /mnt/Windows/redis-3.2.8/src/redis-cli /usr/local/jvm/redis-3.2.8
方法二:
假如使用的是Ubuntu的話,直接使用apt-get
來安裝,指令如下:
$sudo apt-get update
$sudo apt-get install redis-server
附加:vi編輯器優化:
Ubuntu的系統原生vi其實是vim-common
,使用起來非常不方便,我們通常先解除安裝掉它然後重新安裝vi,大致步驟如下:
解除安裝
vim-common
:[email protected]:~$ sudo apt-get remove vim-common [sudo] password for linsh: 正在讀取軟體包列表... 完成 正在分析軟體包的依賴關係樹 正在讀取狀態資訊... 完成 下列軟體包是自動安裝的並且現在不需要了: libntdb1 python-ntdb Use 'apt-get autoremove' to remove them. 下列軟體包將被【解除安裝】: ubuntu-minimal vim-common vim-tiny 升級了 0 個軟體包,新安裝了 0 個軟體包,要解除安裝 3 個軟體包,有 284 個軟體包未被升級。 解壓縮後將會空出 1,339 kB 的空間。 您希望繼續執行嗎? [Y/n] y (正在讀取資料庫 ... 系統當前共安裝有 196166 個檔案和目錄。) 正在解除安裝 ubuntu-minimal (1.325) ... 正在解除安裝 vim-tiny (2:7.4.052-1ubuntu3) ... update-alternatives: using /usr/bin/see to provide /usr/bin/view (view) in 自動模式 正在解除安裝 vim-common (2:7.4.052-1ubuntu3) ... 正在處理用於 man-db (2.6.7.1-1ubuntu1) 的觸發器 ... 正在處理用於 mime-support (3.54ubuntu1.1) 的觸發器 ... [email protected]:~$
安裝
vim
:[email protected]:~$ sudo apt-get install vim 正在讀取軟體包列表... 完成 正在分析軟體包的依賴關係樹 正在讀取狀態資訊... 完成 下列軟體包是自動安裝的並且現在不需要了: libntdb1 python-ntdb Use 'apt-get autoremove' to remove them. 將會安裝下列額外的軟體包: vim-common vim-runtime 建議安裝的軟體包: ctags vim-doc vim-scripts 下列【新】軟體包將被安裝: vim vim-common vim-runtime 升級了 0 個軟體包,新安裝了 3 個軟體包,要解除安裝 0 個軟體包,有 284 個軟體包未被升級。 需要下載 5,933 kB 的軟體包。 解壓縮後會消耗掉 28.4 MB 的額外空間。 您希望繼續執行嗎? [Y/n] y 獲取:1 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main vim-common amd64 2:7.4.052-1ubuntu3.1 [95.2 kB] 獲取:2 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main vim-runtime all 2:7.4.052-1ubuntu3.1 [4,882 kB] 獲取:3 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main vim amd64 2:7.4.052-1ubuntu3.1 [955 kB] 下載 5,933 kB,耗時 10分 51秒 (9,102 B/s) 正在選中未選擇的軟體包 vim-common。 (正在讀取資料庫 ... 系統當前共安裝有 196107 個檔案和目錄。) 正準備解包 .../vim-common_2%3a7.4.052-1ubuntu3.1_amd64.deb ... 正在解包 vim-common (2:7.4.052-1ubuntu3.1) ... 正在選中未選擇的軟體包 vim-runtime。 正準備解包 .../vim-runtime_2%3a7.4.052-1ubuntu3.1_all.deb ... 正在新增 vim-runtime 導致 /usr/share/vim/vim74/doc/help.txt 本地修改至 /usr/share/vim/vim74/doc/help.txt.vim-tiny 正在新增 vim-runtime 導致 /usr/share/vim/vim74/doc/tags 本地修改至 /usr/share/vim/vim74/doc/tags.vim-tiny 正在解包 vim-runtime (2:7.4.052-1ubuntu3.1) ... 正在選中未選擇的軟體包 vim。 正準備解包 .../vim_2%3a7.4.052-1ubuntu3.1_amd64.deb ... 正在解包 vim (2:7.4.052-1ubuntu3.1) ... 正在處理用於 man-db (2.6.7.1-1ubuntu1) 的觸發器 ... 正在處理用於 mime-support (3.54ubuntu1.1) 的觸發器 ... 正在設定 vim-common (2:7.4.052-1ubuntu3.1) ... 正在設定 vim-runtime (2:7.4.052-1ubuntu3.1) ... Processing /usr/share/vim/addons/doc 正在設定 vim (2:7.4.052-1ubuntu3.1) ... update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vim (vim) in 自動模式 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vimdiff (vimdiff) in 自動模式 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rvim (rvim) in 自動模式 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rview (rview) in 自動模式 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in 自動模式 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/view (view) in 自動模式 update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in 自動模式 [email protected]:~$
- 在vi編輯環境下,將游標移動到要插入內容的位置,按
i
進入插入內容的模式,換行使用Shift+Enter
,編輯完畢後,輸入:wq
儲存和退出。