1. 程式人生 > >《從零開始搭建遊戲伺服器》Linux開發環境配置

《從零開始搭建遊戲伺服器》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

方法二:

  • 開啟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,耗時 1051秒 (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儲存和退出。