alpine編譯安裝tengine,並使用supervisor啟動


Alpine是一個小型的linux系統,官方docker鏡像只有不到5MB,非常適合作為容器鏡像。

Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and Busybox.

A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!

為了更好地了解alpine,我在虛擬機上安裝了一個本地alpine。

上官網下載一個標准STANDARD鏡像。創建一個虛擬機,我用的 VMWare Fusion,掛載好下載的iso鏡像。

然后啟動就可以了,不過這時信息沒有存盤,需要使用安裝腳本安裝系統到磁盤。安裝過程其實很簡單,初次使用,最重要的是要知道有這個安裝腳本。

安裝腳本叫做 setup-alpine,其實仔細看的話,系統每次啟動和登陸的時候都會有提示。

安裝系統細節就不說了,如果有疑問可查官方文檔。安裝完成后,需要重啟系統。重啟之后,就是從磁盤啟動的了。

下面具體說說如何使用:

1、配置安裝源。

# vim /etc/apk/repositories
https://mirrors.ustc.edu.cn/alpine/edge/main
https://mirrors.ustc.edu.cn/alpine/edge/community
https://mirrors.ustc.edu.cn/alpine/edge/testing

2、安裝ssh服務。Alpine使用的包管理工具叫 apk。服務管理系統叫 OpenRC

# apk update
# apk add openssh
# rc-service sshd start
# rc-update add sshd

3、修改sshd配置文件,允許root登錄。

# vim /etc/ssh/sshd_config
PermitRootLogin yes

# service sshd restart

這時就可以使用終端遠程登陸了。

4、安裝用戶管理工具,修改root用戶的shell為bash,默認使用的是ash。

# apk add shadow

# usermod -s /bin/bash root

5、安裝常用工具。

# apk add vim bash bash-completion

6、設置常用別名。

# vim /etc/profile
export LS_OPTIONS='--color=auto'
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'

7、其實在testing源里面,已經有現成的tengine安裝包了。不過這里我會測試手動編譯,不會直接使用安裝包。

# apk policy tengine
tengine policy:
  2.1.0-r4:
    https://mirrors.ustc.edu.cn/alpine/edge/testing

8、如何查看安裝包包含哪些文件。有兩種方法,不過都只能查看已經安裝的包。

# apk manifest tengine | awk '{print $2}'
etc/tengine/scgi_params
etc/tengine/fastcgi_params
etc/tengine/tengine.conf
etc/tengine/uwsgi_params
etc/tengine/fastcgi.conf
etc/tengine/mime.types
etc/tengine/koi-win
etc/tengine/mime.types.default
etc/tengine/koi-utf
etc/tengine/browsers
etc/tengine/uwsgi_params.default
etc/tengine/scgi_params.default
etc/tengine/module_stubs
etc/tengine/nginx.conf.default
etc/tengine/fastcgi_params.default
etc/tengine/win-utf
etc/tengine/fastcgi.conf.default
etc/logrotate.d/tengine
etc/init.d/tengine
usr/sbin/nginx
usr/sbin/dso_tool
usr/html/index.html
usr/html/50x.html
usr/share/licenses/tengine/LICENSE
# apk info -a tengine | grep -v \.h
tengine-2.1.0-r4 description:

tengine-2.1.0-r4 webpage:
http://tengine.taobao.org/

tengine-2.1.0-r4 installed size:
1519616

tengine-2.1.0-r4 depends on:
so:libc.musl-x86_64.so.1
so:libcrypto.so.42
so:libpcre.so.1
so:libssl.so.44
so:libz.so.1

tengine-2.1.0-r4 provides:
cmd:dso_tool
cmd:nginx

tengine-2.1.0-r4 is required by:

tengine-2.1.0-r4 contains:
etc/tengine/scgi_params
etc/tengine/fastcgi_params
etc/tengine/tengine.conf
etc/tengine/uwsgi_params
etc/tengine/fastcgi.conf
etc/tengine/mime.types
etc/tengine/koi-win
etc/tengine/mime.types.default
etc/tengine/koi-utf
etc/tengine/browsers
etc/tengine/uwsgi_params.default
etc/tengine/scgi_params.default
etc/tengine/module_stubs
etc/tengine/nginx.conf.default
etc/tengine/fastcgi_params.default
etc/tengine/win-utf
etc/tengine/fastcgi.conf.default
etc/logrotate.d/tengine
etc/init.d/tengine
usr/sbin/nginx
usr/sbin/dso_tool

tengine-2.1.0-r4 triggers:

tengine-2.1.0-r4 affects auto-installation of:

tengine-2.1.0-r4 replaces:

tengine-2.1.0-r4 license:
Custom

9、安裝開發組件。

# apk add alpine-sdk
(1/26) Installing fakeroot (1.22-r0)
(2/26) Installing sudo (1.8.22-r2)
(3/26) Installing pax-utils (1.2.2-r1)
(4/26) Installing libressl2.6-libtls (2.6.4-r0)
(5/26) Installing libressl (2.6.4-r0)
(6/26) Installing libattr (2.4.47-r6)
(7/26) Installing attr (2.4.47-r6)
(8/26) Installing tar (1.30-r0)
(9/26) Installing patch (2.7.6-r1)
(10/26) Installing lzip (1.19-r2)
(11/26) Installing abuild (3.1.0-r4)
Executing abuild-3.1.0-r4.pre-install
(12/26) Installing libmagic (5.32-r0)
(13/26) Installing file (5.32-r0)
(14/26) Installing g++ (6.4.0-r6)
(15/26) Installing fortify-headers (0.9-r0)
(16/26) Installing build-base (0.5-r1)
(17/26) Installing lz4-libs (1.8.1.2-r0)
(18/26) Installing lzo (2.10-r2)
(19/26) Installing squashfs-tools (4.3-r4)
(20/26) Installing libburn (1.4.8-r0)
(21/26) Installing libedit (20170329.3.1-r3)
(22/26) Installing libacl (2.2.52-r4)
(23/26) Installing libisofs (1.4.8-r0)
(24/26) Installing libisoburn (1.4.8-r0)
(25/26) Installing xorriso (1.4.8-r0)
(26/26) Installing alpine-sdk (0.5-r0)

其中,build-base包含gcc,libc,make,g++。

# apk info -a build-base

build-base-0.5-r1 webpage:
http://dev.alpinelinux.org/cgit

build-base-0.5-r1 installed size:
4096

build-base-0.5-r1 depends on:
binutils
file
gcc
g++
make
libc-dev
fortify-headers

10、編譯安裝tengine。這里我加了ldap模塊。

# apk add libressl-dev openldap-dev zlib-dev pcre-dev
# mkdir /usr/local/src
# cd /usr/local/src
# git clone https://github.com/kvspb/nginx-auth-ldap.git
# wget http://tengine.taobao.org/download/tengine-2.2.0.tar.gz
# tar xvf tengine-2.2.0.tar.gz
# cd tengine-2.2.0/
# ./configure --prefix=/usr/local/nginx --with-http_reqstat_module=shared --add-module=../nginx-auth-ldap
# make -j 2
# make install
# make dso_install

11、安裝supervisor。

# apk add supervisor

修改supervisor的配置文件。

# vim /etc/supervisord.conf

[unix_http_server]
file=/run/supervisord.sock   ; (the path to the socket file)

[supervisord]
logfile=/var/log/supervisord.log ; (main log file;default $CWD/supervisord.log)
loglevel=info                ; (log level;default info; others: debug,warn,trace)
pidfile=/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
environment=LC_ALL=en_US.UTF-8,LANG=en_US.UTF-8,LANGUAGE=en_US.UTF-8

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///run/supervisord.sock ; use a unix:// URL  for a unix socket

[program:nginx-app]
command = /usr/local/nginx/sbin/nginx

這里需要手動創建日志目錄,不然supervisord無法啟動。算是一個坑。

# mkdir /var/log/supervisor
# service start supervisord
# supervisorctl
nginx-app                        RUNNING   pid 33479, uptime 0:00:02


補充

# apk --help

apk-tools 2.9.1, compiled for x86_64.

usage: apk COMMAND [options] [ARGS]

The following commands are available:
  add       Add PACKAGEs to 'world' and install (or upgrade) them, while ensuring that all dependencies are met
  del       Remove PACKAGEs from 'world' and uninstall them
  fix       Repair package or upgrade it without modifying main dependencies
  update    Update repository indexes from all remote repositories
  info      Give detailed information about PACKAGEs or repositories
  search    Search package by PATTERNs or by indexed dependencies
  upgrade   Upgrade currently installed packages to match repositories
  cache     Download missing PACKAGEs to cache and/or delete unneeded files from cache
  version   Compare package versions (in installed database vs. available) or do tests on literal version strings
  index     Create repository index file from FILEs
  fetch     Download PACKAGEs from global repositories to a local directory
  audit     Audit the directories for changes
  verify    Verify package integrity and signature
  dot       Generate graphviz graphs
  policy    Show repository policy for packages
  stats     Show statistics about repositories and installations
  manifest  Show checksums of package contents

Global options:
  -h, --help              Show generic help or applet specific help
  -p, --root DIR          Install packages to DIR
  -X, --repository REPO   Use packages from REPO
  -q, --quiet             Print less information
  -v, --verbose           Print more information (can be doubled)
  -i, --interactive       Ask confirmation for certain operations
  -V, --version           Print program version and exit
  -f, --force             Enable selected --force-* (deprecated)
  --force-binary-stdout   Continue even if binary data is to be output
  --force-broken-world    Continue even if 'world' cannot be satisfied
  --force-non-repository  Continue even if packages may be lost on reboot
  --force-old-apk         Continue even if packages use unsupported features
  --force-overwrite       Overwrite files in other packages
  --force-refresh         Do not use cached files (local or from proxy)
  -U, --update-cache      Alias for --cache-max-age 60
  --progress              Show a progress bar
  --progress-fd FD        Write progress to fd
  --no-progress           Disable progress bar even for TTYs
  --purge                 Delete also modified configuration files (pkg removal) and uninstalled packages from cache (cache clean)
  --allow-untrusted       Install packages with untrusted signature or no signature
  --wait TIME             Wait for TIME seconds to get an exclusive repository lock before failing
  --keys-dir KEYSDIR      Override directory of trusted keys
  --repositories-file REPOFILE Override repositories file
  --no-network            Do not use network (cache is still used)
  --no-cache              Do not use any local cache path
  --cache-dir CACHEDIR    Override cache directory
  --cache-max-age AGE     Maximum AGE (in minutes) for index in cache before refresh
  --arch ARCH             Use architecture with --root
  --print-arch            Print default arch and exit

This apk has coffee making abilities.

最后這句造咖啡的能力好奇特意查了一下,真的有這個feature...不過沒什么用。

# apk fetch coffee
Go and fetch your own coffee.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM