一步步搭建物聯網系統——GNU/Linux 強大且Free

來源:互聯網
上載者:User

標籤:

GNU/Linux 強大且Free

什麼是Linux

Linux是一種自由和開放源碼的類UNIX作業系統核心。目前存在著許多不同的Linux發行版,可安裝在各種各樣的電腦硬體裝置,從手機、平 板電腦、路由器和影音遊戲控制台,到桌上型電腦,大型電腦和超級電腦。Linux是一個領先的作業系統核心,世界上運算最快的10台超級電腦啟動並執行都是基 於Linux核心的作業系統。

Linux作業系統也是自由軟體和開放原始碼發展中最著名的例子。只要遵循GNU通用公用許可證,任何人和機構都可以自由地使用Linux的所有底層原始碼,也可以自由地修改和再發布。 嚴格來講,Linux這個詞本身只表示Linux核心,但在實際上人們已經習慣了用Linux來形容整個基於Linux核心,並且使用GNU工程各種工具和資料庫的作業系統(也被稱為GNU/Linux)。 通常情況下,Linux被打包成供桌上型電腦和伺服器使用的Linux發行版本。一些流行的主流Linux發行版本,包括Debian(及其衍生版本Ubuntu),Fedora和openSUSE等。Linux得名於電腦業餘愛好者Linus Torvalds。

而不是如百度百科所講的~~Linux作業系統是UNIX作業系統的一種複製系統。它誕生於1991年的 Linux案頭[1]10 月5日(這是第一次正式向外公布的時間)。以後藉助於Internet網路,並通過全世界各地電腦愛好者的共同努力,已成為今天世界上使用最多的一種 UNIX類作業系統,並且使用人數還在迅猛增長。~~

Linux只是個核心,而不是作業系統,所以在這我們再理解一下作業系統是由什麼組成的。

作業系統

作業系統(英語:Operating

System,簡稱OS)是管理電腦硬體與軟體資源的電腦程式,同時也是電腦系統的核心與基石。作業系統需要處理如管理與配置記憶體、決定 系統資源供需的優先次序、控制輸入與輸出裝置、操作網路與管理檔案系統等基本事務。作業系統也提供一個讓使用者與系統互動的操作介面。

作業系統的型態非常多樣,不同機器安裝的作業系統可從簡單到複雜,可從手機的嵌入式系統到超級電腦的大型作業系統。許多作業系統製造者對它涵 蓋範疇的定義也不盡一致,例如有些作業系統整合了圖形化使用者介面(GUI),而有些僅使用命令列介面(CLI),而將GUI視為一種非必要的應用程式。

作業系統位於底層硬體與使用者之間,是兩者溝通的橋樑。使用者可以通過作業系統的使用者介面,輸入命令。作業系統則對命令進行解釋,驅動硬體裝置,實現使用者要求。以現代標準而言,一個標準PC的作業系統應該提供以下的功能:

  • 進程管理(Processing management)
  • 記憶體管理(Memory management)
  • 檔案系統(File system)
  • 網路通訊(Networking)
  • 安全機制(Security)
  • 使用者介面(User interface)
  • 驅動程式(Device drivers)

而讓我們來看一下兩者之間的不同之處,這是一張linux的架構圖我們可以發現核心只是位於底層。

Linux架構圖

使用者模式

應用程式(sh、 vi 、 OpenOffice.org 等)

複雜 庫 ( KDE 、glib等)

簡單庫(opendbm、sin等)

C庫(open、fopen、socket、exec、calloc等)

核心模式
  • 系統中斷、調用、錯誤等軟硬體訊息
  • 核心(驅動程式、進程、網路、記憶體管理等)
  • 硬體(處理器、記憶體、各種裝置)

我們可以發現,由linux核心+shell可以構成一個作業系統,而linux本身只是個核心,也就是圖中的核心模式,負責控制系統的這些部分。也就是我們可以發現,Linux核心構成了一個作業系統除使用者介面以外的部分,而shell就是這最後的使用者介面。

而linux核心以外的部分就是由GNU計劃構成的。

Shell

Shell是系統的使用者介面,提供了使用者與核心進行互動操作的一種介面。它接收使用者輸入的命令並把它送入核心去執行。

實際上Shell是一個命令直譯器,它解釋由使用者輸入的命令並且把它們送到核心。不僅如此,Shell有自己的程式設計語言用於對命令的編輯,它允許 使用者編寫由shell命令組成的程式。Shell程式設計語言具有普通程式設計語言的很多特點,比如它也有迴圈結構和分支控制結構等,用這種程式設計語言編寫的 Shell程式與其他應用程式具有同樣的效果

bash 是一個為GNU計劃編寫的Unix shell。它的名字是一系列縮寫:Bourne-Again SHell — 這是關於Bourne shell(sh)的一個雙關語(Bourne again / bornagain)。Bourne shell是一個早期的重要shell,由史蒂夫·伯恩在1978年前後編寫,並同Version 7 Unix一起發布。bash則在1987年由布萊恩·福克斯創造。在1990年,Chet Ramey成為了主要的維護者。

shell將會是我們在GNU/linux中經常用到的經常有到的工具之一,用來操作電腦用的。在遷移到linux之前我們可以試用cygwin來進行類比:

Cygwin是許多自由軟體的集合,最初由Cygnus Solutions開發,用於各種版本的Microsoft Windows上,運行 UNIX類 系統。

GCC

GCC(GNU Compiler Collection,GNU編譯器套裝),是一套由GNU開發的程式設計語言編譯器。它是一套以GPL及LGPL許可證所發行的自由軟體,也是GNU計劃的 關鍵區段,亦是自由的類Unix及蘋果電腦Mac OS X 作業系統的標準編譯器。GCC(特別是其中的C語言編譯器)也常被認為是跨平台編譯器的事實標準。

GCC原名為GNU C語言編譯器(GNU C Compiler),因為它原本只能處理C語言。GCC很快地擴充,變得可處理C++。之後也變得可處理Fortran、Pascal、Objective-C、Java、Ada,以及Go與其他語言。

c#include <stdio.h>main(){  printf("Hello world\n");}
bash~/temp/free> gcc hello.c -o hellohello.c:2:1: warning: type specifier missing, defaults to ‘int‘ [-Wimplicit-int]main()^~~~1 warning generated.~/temp/free> ./helloHello world

同shell一樣,對於GNU/linux系統而言,GCC的作用也是無可取代的。當然如果只是一般用途的話,GCC對於一般使用者可能沒用,但是 在些GNU/Linux系統上,我們可能就需要自己編譯源碼成二進位檔案,而沒有軟體包,因而其重要性是不言而喻的。自然的如果我們自己動手編譯GNU /Linux作業系統的話,我們會理解其的重要意義。有興趣的同學可以試一下:LinuxFrom Scratch (LFS)。

啟動引導程式

最後,當我們構成以上的那些之後,我們就需要一個引導程式,以便使系統啟動,引導進核心。

啟動程式(bootloader)於電腦或其他電腦應用上,是指引導作業系統啟動的程式。啟動程式啟動方式與程式視應用機型種類。例如在普通 PC上,引導程式通常分為兩部分:第一階段引導程式位於主引導記錄,用於引導位於某個分區上的第二階段引導程式,如NTLDR、GNUGRUB等。

BIOS開機完成後,bootloader就接手初始化硬體裝置、建立儲存空間空間的映射,以便為作業系統核心準備好

正確的軟硬體環境。

簡單的bootloader的虛擬彙編碼,如其後的八個指令:

  • 0: 將P暫存器的值設為8
  • 1: 檢查紙帶({paper tape)讀取器,是否已經可以進行讀取
  • 2: 如果還不能進行讀取, 跳至1
  • 3: 從紙帶讀取器,讀取一byte至累加器
  • 4: 如為帶子結尾,跳至8
  • 5: 將暫存器的值,儲存至P暫存器中的數值所指定的地址
  • 6: 增加P暫存器的值
  • 7: 跳至1

但是隨著電腦作業系統越來越複雜,位於MBR的空間已經放不下引導作業系統的代碼,於是就有了第二階段的引導程式,而MBR中代碼的功能也從直接引導作業系統變成了引導第二階段的引導程式。

通常在一個GNU/Linux系統中選用GNUGRUB做為引導程式,例如Ubuntu就是用GRUB2。

GNU GRUB(簡稱“GRUB”)是一個來自GNU項目的啟動引導程式。GRUB是多啟動規範的實現,它允許使用者可以在電腦內同時擁有多個作業系統,並在計 算機啟動時選擇希望啟動並執行作業系統。GRUB可用於選擇作業系統分區上的不同核心,也可用於向這些核心傳遞啟動參數。

GNU GRUB的前身為Grand Unified Bootloader。它主要用於類Unix系統;同大多Linux發行版一樣,GNU系統也採用GNU GRUB作為它的啟動器。Solaris從10 1/06版開始在x86系統上也採用GNU GRUB作為啟動器。

以上也就構成了一個簡單的作業系統。

從編譯開始

我們以一次編譯開始我們的Linux學習之旅。

開始之前
  • 如果你沒有用過GNU/Linux,我想你需要在虛擬機器上安裝一個。
  • 一個主流的GNU/Linux發行版,如Ubuntu,CentOS,Debian,Mint,OpenSUSE,Fedora等等。
  • 學會如何開啟shell(ps:bash,zsh,sh等等)。

或者你也可以在Windows上安裝Cygwin。

編譯Nginx

1.下載這個軟體的源碼包

bashwget http://nginx.org/download/nginx-1.7.4.tar.gz

wget是一個用於下載的軟體,當然你也可以用軟體,只是用wget似乎會比圖形介面快哦。

2.解壓軟體包

bashtar -vf nginx-1.7.4.tar.gz

-vf的意思是Extract,也就是解壓,而tar則是這個解壓軟體的名字。看上去似乎比WinRAR來得複製得多,但是你可以計時一下,從下載到解壓完,和你用滑鼠比哪個比較快。

3.到nginx目錄下

這裡需要分兩部進行

1).列出所有檔案

bashls -aldrwxr-xr-x   15 fdhuang  staff   510B Sep  2 13:44 nginx-1.7.4-rw-r--r--    1 fdhuang  staff   798K Aug  5 21:55 nginx-1.7.4.tar.gz

2).到nginx-1.7.4目錄

bashcd nginx-1.7.4 

4.配置nginx

一次簡單的配置如下

bash./configure

當你熟練以後,你可能和我一樣用下面的配置( 注意 :用下面的代碼會出錯。)

bash./configure --user=www --group=www --add-module=../ngx_pagespeed-1.8.3.4-beta --add-module=../ngx_cache_purge --prefix=/usr/local/nginx --with-pcre --with-http_spdy_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-ipv6

過程中可能會提示你其中出了多少錯誤,而這時你便可以很愉快地去用搜尋引擎搜尋他們。

5.make

這裡就會用到GCC等等。

bashmake

6.運行

如果運行順利的話,應該可以直接

bash./objs/nginx   
其他

1.如果沒有wget,make,gcc等命令的時候可以用類似於下面的方法安裝,

bashsudo apt-get install gcc,make,wget

2.正常情況下一個開源項目都會有一個README,會告訴你應該如何去做。

包管理

GNU/Linux最方便的東西莫過於包管理了。

引自OpenSUSE官網的說明及圖片 1

  1. Linux 發行版無非就是一堆軟體包 (package) 形式的應用程式加上整體地管理這些應用程式的工具。通常這些 Linux 發行版,包括 openSUSE,都是由成千上萬不同的軟體包構成的。

  2. 軟體包: 軟體包不止是一個檔案,內含構成軟體的所有檔案,包括程式本身、共用庫、開發包以及使用說明等。

  3. 中繼資料 (metadata) 包含於軟體包之中,包含軟體正常運行所需要的一些資訊。軟體包安裝之後,其中繼資料就儲存於本地的軟體包資料庫之中,以用於軟體包檢索。

  4. 依賴關係 (dependencies) 是軟體包管理的一個重要方面。實際上每個軟體包都會涉及到其他的軟體包,軟體包裡程式的運行需要有一個可執行檔環境(要求有其他的程式、庫等),軟體包依賴關係正是用來描述這種關係的。

Linux 下的軟體包通常是以下三種格式:

  • tgz - tar gzip 檔案。這類檔案是基本的壓縮軟體包,可以容納軟體包維護者認為有用的所有的東西。此格式除本身的壓縮格式外,並沒有有關軟體包內容的標準。
  • deb - 此格式的軟體包常用於 Debian 系統,是標準的 Debian 軟體包格式。
  • rpm - 此格式由 Red Hat Linux 所建立,並經由 LSB 標準化,現已為眾多 Linux 發行版所採用,是一個優秀的軟體包格式。openSUSE 即是用此格式。更多資訊可以參閱此處。

 

所以這就需要能自動解決依賴關係的軟體包管理器。軟體包管理系統就是一個工具集,為系統提供一個統一的安裝、升級、刪除軟體的方式。

Ubuntu LNMP

在餘下的章節中,我們需要去部署,需要去使用Ubuntu。如果在Windows下可以使用LAMP,但是在這裡我們只說Ubuntu。開始之前你需要安裝好Ubuntu,無論是在虛擬機器,還是在真機安裝,或者是Docker。

Update軟體包列表

apt-get 是debian,ubuntu發行版的包管理工具。 apt-get update 可以確保我們的軟體包列表是最新的,下面是一個簡單的更新過程。

開啟Terminal或者Konsole等等之類的終端控制台。

[email protected]:/# sudo apt-get updateIgn http://archive.ubuntu.com trusty InReleaseIgn http://archive.ubuntu.com trusty-updates InReleaseIgn http://archive.ubuntu.com trusty-security InReleaseIgn http://archive.ubuntu.com trusty-proposed InReleaseGet:1 http://archive.ubuntu.com trusty Release.gpg [933 B]Get:2 http://archive.ubuntu.com trusty-updates Release.gpg [933 B]Get:3 http://archive.ubuntu.com trusty-security Release.gpg [933 B]Get:4 http://archive.ubuntu.com trusty-proposed Release.gpg [933 B]Get:5 http://archive.ubuntu.com trusty Release [58.5 kB]Get:6 http://archive.ubuntu.com trusty-updates Release [62.0 kB]Get:7 http://archive.ubuntu.com trusty-security Release [62.0 kB]Get:8 http://archive.ubuntu.com trusty-proposed Release [209 kB]Get:9 http://archive.ubuntu.com trusty/main Sources [1335 kB]Get:10 http://archive.ubuntu.com trusty/restricted Sources [5335 B]Get:11 http://archive.ubuntu.com trusty/universe Sources [7926 kB]Get:12 http://archive.ubuntu.com trusty/main amd64 Packages [1743 kB]Get:13 http://archive.ubuntu.com trusty/restricted amd64 Packages [16.0 kB]Get:14 http://archive.ubuntu.com trusty/universe amd64 Packages [7589 kB]64% [14 Packages 664 kB/7589 kB 9%]                          58.3 kB/s 1min 58s

更新完應該會顯示:

bashFetched 20.5 MB in 5min 22s (63.6 kB/s)Reading package lists... Done
安裝MySQL

安裝命令

bashsudo apt-get install mysql-server php5-mysql

過程:

[email protected]:/# sudo apt-get install mysql-server php5-mysqlReading package lists... 0%Reading package lists... DoneBuilding dependency treeReading state information... DoneThe following extra packages will be installed:  libaio1 libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient18  libterm-readkey-perl libwrap0 lsof mysql-client-5.5 mysql-client-core-5.5  mysql-common mysql-server-5.5 mysql-server-core-5.5 php5-common php5-json  psmisc tcpdSuggested packages:  libclone-perl libmldbm-perl libnet-daemon-perl libplrpc-perl  libsql-statement-perl libipc-sharedcache-perl tinyca mailx php5-user-cacheThe following NEW packages will be installed:  libaio1 libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient18  libterm-readkey-perl libwrap0 lsof mysql-client-5.5 mysql-client-core-5.5  mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5 php5-common  php5-json php5-mysql psmisc tcpd0 upgraded, 19 newly installed, 0 to remove and 12 not upgraded.Need to get 9982 kB of archives.After this operation, 99.1 MB of additional disk space will be used.Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main libaio1 amd64 0.3.109-4 [6364 B]Get:2 http://archive.ubuntu.com/ubuntu/ trusty-updates/main mysql-common all 5.5.40-0ubuntu0.14.04.1 [14.1 kB]Get:3 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libmysqlclient18 amd64 5.5.40-0ubuntu0.14.04.1 [598 kB]Get:4 http://archive.ubuntu.com/ubuntu/ trusty/main libwrap0 amd64 7.6.q-25 [46.2 kB]Get:5 http://archive.ubuntu.com/ubuntu/ trusty/main libdbi-perl amd64 1.630-1 [879 kB]Get:6 http://archive.ubuntu.com/ubuntu/ trusty/main libdbd-mysql-perl amd64 4.025-1 [99.3 kB]Get:7 http://archive.ubuntu.com/ubuntu/ trusty/main libterm-readkey-perl amd64 2.31-1 [27.4 kB]Get:8 http://archive.ubuntu.com/ubuntu/ trusty-updates/main mysql-client-core-5.5 amd64 5.5.40-0ubuntu0.14.04.1 [703 kB]Get:9 http://archive.ubuntu.com/ubuntu/ trusty-updates/main mysql-client-5.5 amd64 5.5.40-0ubuntu0.14.04.1 [1466 kB]Get:10 http://archive.ubuntu.com/ubuntu/ trusty-updates/main mysql-server-core-5.5 amd64 5.5.40-0ubuntu0.14.04.1 [3215 kB]47% [10 mysql-server-core-5.5 850 kB/3215 kB 26%]             79.9 kB/s 1min 6s

在安裝的過程中會要求你輸入資料庫密碼。(預設為空白)

安裝Nginx
bashecho "deb http://ppa.launchpad.net/nginx/stable/ubuntu $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/nginx-stable.listsudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8Csudo apt-get updatesudo apt-get install nginx

啟動Nginx Server

bashsudo service nginx start
安裝PHP

sudo apt-get install php5-fpm

安裝過程

[email protected]:/# sudo apt-get install php5-fpmReading package lists... DoneBuilding dependency treeReading state information... DoneThe following extra packages will be installed:  libsystemd-daemon0Suggested packages:  php-pearThe following NEW packages will be installed:  libsystemd-daemon0 php5-fpm0 upgraded, 2 newly installed, 0 to remove and 12 not upgraded.Need to get 2201 kB of archives.After this operation, 9326 kB of additional disk space will be used.Do you want to continue? [Y/n] yGet:1 http://archive.ubuntu.com/ubuntu/ trusty-proposed/main libsystemd-daemon0 amd64 204-5ubuntu20.8 [9608 B]Get:2 http://archive.ubuntu.com/ubuntu/ trusty-updates/universe php5-fpm amd64 5.5.9+dfsg-1ubuntu4.5 [2191 kB]Fetched 2201 kB in 1min 5s (33.6 kB/s)Selecting previously unselected package libsystemd-daemon0:amd64.(Reading database ... 13105 files and directories currently installed.)Preparing to unpack .../libsystemd-daemon0_204-5ubuntu20.8_amd64.deb ...Unpacking libsystemd-daemon0:amd64 (204-5ubuntu20.8) ...Selecting previously unselected package php5-fpm.Preparing to unpack .../php5-fpm_5.5.9+dfsg-1ubuntu4.5_amd64.deb ...Unpacking php5-fpm (5.5.9+dfsg-1ubuntu4.5) ...Processing triggers for ureadahead (0.100.0-16) ...Setting up libsystemd-daemon0:amd64 (204-5ubuntu20.8) ...Setting up php5-fpm (5.5.9+dfsg-1ubuntu4.5) ...Creating config file /etc/php5/fpm/php.ini with new versionphp5_invoke: Enable module pdo for fpm SAPIphp5_invoke: Enable module pdo_mysql for fpm SAPIphp5_invoke: Enable module opcache for fpm SAPIphp5_invoke: Enable module json for fpm SAPIphp5_invoke: Enable module mysql for fpm SAPIphp5_invoke: Enable module mysqli for fpm SAPIinvoke-rc.d: policy-rc.d denied execution of start.Processing triggers for libc-bin (2.19-0ubuntu6.3) ...Processing triggers for ureadahead (0.100.0-16) ...

線上查看: 一步步搭建物聯網系統

圖靈-電子書版 一步步搭建物聯網系統

  1. https://zh.opensuse.org/index.php?title=%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%AE%A1%E7%90%86&variant=zh ?

  • 本文來自:Linux學習網

一步步搭建物聯網系統——GNU/Linux 強大且Free

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.