Alpine Linux

1. alpine Linux

1.1. alpine Linux 配置

1.1.1. 配置启动延时

alpine Linux 在开机的时候会提示启动延时:

Alpine will be booted automatically in 3 seconds.

但如果我不想启动有延时,希望其立即启动,那么就需要修改配置了。

根据 alpine Linux 官方文档 得知其使用的启动系统是 Syslinux, 所以我希望去查 Syslinux 的官方文档,根据文档:

EXTLINUX_TIMEOUT="50" 4
           This variable specifies the time that EXTLINUX should wait for user input during boot.
           Values are in decisecond greater than  0  (e.g.  '10'  for  a  1  second  timeout),  0
           specifies to wait forever. The default is 50.

配置文件是 /boot/extlinux.conf, 如果我将 TIMEOUT 设置为 0 的话就会永久等待,所以只能设置为 1 了,即 0.1 秒,这一点要特别注意,我前面就因为设置为 0 却达到想要的效果产生的不必要的困惑。

1.1.2. How to enable and start services on Alpine Linux

https://www.cyberciti.biz/faq/how-to-enable-and-start-services-on-alpine-linux/

1.1.3. Writing Init Scripts

https://wiki.alpinelinux.org/wiki/Writing_Init_Scripts

2. alpine Linux 安装 NodeJS

2.1. alpine Linux 安装 NodeJS 的思路

Docker Hub 上有 Docker 官方在 alpine Linux 上安装 NodeJS 的 Dockerfile, 我们根据它上面的指令来安装就可以了, 非常 easy:

  • https://hub.docker.com/_/node/
  • https://github.com/nodejs/docker-node/blob/336fb229392876a5f0d893436aeccf8c80011eeb/10/alpine/Dockerfile

2.2. Dockerfile

FROM alpine:3.8

ENV NODE_VERSION 10.13.0

RUN addgroup -g 1000 node \
    && adduser -u 1000 -G node -s /bin/sh -D node \
    && apk add --no-cache \
        libstdc++ \
    && apk add --no-cache --virtual .build-deps \
        binutils-gold \
        curl \
        g++ \
        gcc \
        gnupg \
        libgcc \
        linux-headers \
        make \
        python \
  # gpg keys listed at https://github.com/nodejs/node#release-team
  && for key in \
    94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
    FD3A5288F042B6850C66B31F09FE44734EB7990E \
    71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
    DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
    C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
    B9AE9905FFD7803F25714661B63B535A4C206CA9 \
    56730D5401028683275BD23C23EFEFE93C4CFFFE \
    77984A986EBC2AA786BC0F66B01FBB92821C587A \
    8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \
  ; do \
    gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \
    gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
    gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \
  done \
    && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION.tar.xz" \
    && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
    && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
    && grep " node-v$NODE_VERSION.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
    && tar -xf "node-v$NODE_VERSION.tar.xz" \
    && cd "node-v$NODE_VERSION" \
    && ./configure \
    && make -j$(getconf _NPROCESSORS_ONLN) \
    && make install \
    && apk del .build-deps \
    && cd .. \
    && rm -Rf "node-v$NODE_VERSION" \
    && rm "node-v$NODE_VERSION.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt

ENV YARN_VERSION 1.10.1

RUN apk add --no-cache --virtual .build-deps-yarn curl gnupg tar \
  && for key in \
    6A010C5166006599AA17F08146C2130DFD2497F5 \
  ; do \
    gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \
    gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
    gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \
  done \
  && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \
  && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \
  && gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \
  && mkdir -p /opt \
  && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \
  && ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn \
  && ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg \
  && rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \
  && apk del .build-deps-yarn

CMD [ "node" ]

2.3. 我提取出来的安装脚本文件 install-node.sh

#!/bin/sh
NODE_VERSION=10.13.0
addgroup -g 1000 node
adduser -u 1000 -G node -s /bin/sh -D node
apk add --no-cache  libstdc++
apk add --no-cache --virtual .build-deps \
        binutils-gold \
        curl \
        g++ \
        gcc \
        gnupg \
        libgcc \
        linux-headers \
        make \
        python

for key in \
    94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
    FD3A5288F042B6850C66B31F09FE44734EB7990E \
    71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
    DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
    C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
    B9AE9905FFD7803F25714661B63B535A4C206CA9 \
    56730D5401028683275BD23C23EFEFE93C4CFFFE \
    77984A986EBC2AA786BC0F66B01FBB92821C587A \
    8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \
  ; do \
    gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \
    gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
    gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \
  done

curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION.tar.xz" 
curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" 
gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc 
grep " node-v$NODE_VERSION.tar.xz\$" SHASUMS256.txt | sha256sum -c - 
tar -xf "node-v$NODE_VERSION.tar.xz" 
cd "node-v$NODE_VERSION" 
./configure 
#make -j$(getconf _NPROCESSORS_ONLN) 
make -j4
make install 
apk del .build-deps 
cd .. 
rm -Rf "node-v$NODE_VERSION" 
rm "node-v$NODE_VERSION.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt

YARN_VERSION=1.10.1
apk add --no-cache --virtual .build-deps-yarn curl gnupg tar

for key in \
    6A010C5166006599AA17F08146C2130DFD2497F5 \
  ; do \
    gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \
    gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
    gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \
  done

curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" 
curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" 
gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz 
mkdir -p /opt 
tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ 
ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn 
ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg 
rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz 
apk del .build-deps-yarn
chmod u+x install-node.sh
./install-node.sh

3. alpine Linux 安装

3.1. 选择下载镜像

到 https://www.alpinelinux.org/downloads/ 下载 STANDARD 版本, 经测试, VIRTUAL 版本不带网卡驱动, 在虚拟机里面无法连接网络。

3.2. 插入 ISO 引导安装

硬件配置根据需要, 如果需要编译东西建议 2 个 单核 CPU 和 1G 内存以上配置, 毕竟编译是吃 CPU 吃内存的家伙。

用 ISO 引导进入系统后, 使用 root 用户空密码登录, 然后再根据提示输入命令 setup-alpine 进行安装。

3.3. 键盘选择

连续两次输入 us 回车即可。

3.4. hostname 设置

输入 alpine 回车

3.5. 网络配置

  1. [eth0] 直接回车
  2. [dhcp] 输入 ? 回车
  3. IP Address: 192.168.1.200/24
  4. Gateway: 192.168.1.1
  5. manual [no] 直接回车
  6. DNS: 119.29.29.29

3.6. 登录选项

空密码, 连续回车。

3.7. 时区设置

  1. [UTC] 输入 ? 回车
  2. 输入 Asia 回车, 再输入 Shanghai 回车

3.8. 镜像选择

使用 f 自动查找最快的镜像站(非常慢) 或者指定中科大的镜像站。

我们可以看到 mirrors.xjtu.edu.cn24, 但是看不到上面的了, 根据 https://mirrors.alpinelinux.org/ 可以看到 mirrors.ustc.edu.cnmirrors.xjtu.edu.cn 上面, 所以 mirrors.ustc.edu.cn 的编号就是 23 了, 我们输入 23 选择中国科技大学的镜像站。

3.9. 基础服务程序选择

选择默认的 opensshchrony 就可以了。

3.10. 硬盘选择

  1. ?(list) 或者直接输入 sda 就可以了, 回车。
  2. 输入 sys 回车
  3. 输入 y 回车

3.11. 安装完成

reboot 或者 poweroff

3.12. 什么是 alpine Linux

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

https://www.alpinelinux.org/

Alpine Linux 是一个面向安全应用的轻量级 Linux 发行版。它采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗,同时还提供了自己的包管理工具 apk。

Alpine Linux 的内核都打了 grsecurity/PaX 补丁,并且所有的程序都编译为 Position Independent Executables (PIE) 以增强系统的安全性。

某技术大牛: 我们是 Alpine Linux 镜像的忠实用户,因为相比于 Debian 或 Ubuntu,它的体积更小,并且具有更小的可攻击表面。所以,我们使用官方的 Alpine 镜像作为其它镜像的基础。除此以外,官方镜像还有另一个好处—— Docker 有一个专门的团队在维护它,并一直遵循着最佳实践。

3.12.1. alpine 特色

Alpine 采用的是 musl libc,不是通常用的 glibc,可能和其他 Linux 发行版使用的 glibc 实现会有些不同。

3.12.2. 学习

http://wiki.alpinelinux.org 网站上内容非常丰富,英文也非常简单,几乎所有的问题都能在该网站上找到答案,强烈推荐该网站。

3.13. 软件包管理

Alpine 提供了非常好用的 apk 软件包管理工具,可以方便地安装、删除、更新软件。

Alpine 使用 apk 进行包管理,通过 apk –help 命令查看完整的包管理命令。

  • 更新软件包索引文件

apk update

update 命令会从各个镜像源列表下载 APKINDEX.tar.gz 并存储到本地缓存,一般在 /var/cache/apk(Alpine 在该目录下)、 /var/lib/apk//etc/apk/cache/ 下。

  • 查询 openssh 相关的软件包

apk search openssh

  • 安装一个软件包

apk add xxx

add 命令从仓库中安装最新软件包,并自动安装必须的依赖包,也可以从第三方仓库添加软件包。

$ apk add openssh openntp vim
$ apk add --no-cache mysql-client
$ apk add docker --update-cache --repository http://mirrors.ustc.edu.cn/alpine/v3.4/main/ --allow-untrusted

安装指定版本软件包

$ apk add asterisk=1.6.0.21-r0
$ apk add 'asterisk<1.6.1'
$ apk add 'asterisk>1.6.1'
  • 删除已安装的 xxx 软件包

apk del xxx

  • 升级当前已安装的软件包

upgrade 命令升级系统已安装的所以软件包(一般包括内核),当然也可指定仅升级部分软件包(通过 -u–upgrade 选择指定)。

$ apk update    #更新最新本地镜像源
$ apk upgrade   #升级软件
$ apk add --upgrade busybox   #指定升级部分软件包
  • 搜索软件包

search 命令搜索可用软件包,-v 参数输出描述内容,支出通配符,-d–description 参数指定通过软件包描述查询。

$ apk search                  #查找所以可用软件包
$ apk search -v               #查找所以可用软件包及其描述内容
$ apk search -v 'acf*'        #通过软件包名称查找软件包
$ apk search -v -d 'docker'   #通过描述文件查找特定的软件包
  • 显示软件包的信息

info 命令用于显示软件包的信息。

$ apk info                      #列出所有已安装的软件包
$ apk info -a zlib              #显示完整的软件包信息
$ apk info --who-owns /sbin/lbu #显示指定文件属于的包
  • 获取更多 apk 包管理的命令参数

apk --help

3.13.1. 网络工具

用于文本方式查看网页,用于测试 HTTP 协议

apk add curl

提供了查看网络连接的协议端口的命令 ss,可以替代 netstat 命令

apk add iproute2

drill 命令可以替代 dignslookup DNS 查询命令

apk add drill

测试 192.168.3.166 的 80 端口,查看 Web 服务是否能正常访问。

curl 192.168.3.166

查看建立的 TCP 连接

ss -ta

查询域名的信息

drill blog.csdn.net @8.8.8.8

根据 IP 地址,反向查找域名

drill -x 8.8.8.8 @47.94.71.34

3.13.2. 更新源

官方镜像列表:http://rsync.alpinelinux.org/alpine/MIRRORS.txt

MIRRORS.txt 中是当前 Alpine 官方提供的镜像源(Alpine 安装的时候系统自动选择最佳镜像源)

3.13.2.1. 国内镜像源
  • 清华 TUNA 镜像源:https://mirror.tuna.tsinghua.edu.cn/alpine/
  • 中科大镜像源:http://mirrors.ustc.edu.cn/alpine/
  • 阿里云镜像源:http://mirrors.aliyun.com/alpine/
3.13.2.2. 如何配置软件源

以中科大源为例:在 /etc/apk/repositories 文件中加入对应源地址就行了,一行一个地址。

$ vi /etc/apk/repositories
## /media/cdrom/apks
http://mirrors.ustc.edu.cn/alpine/v3.5/main
http://mirrors.ustc.edu.cn/alpine/v3.5/community

3.14. Alpine Linux init 系统

Alpine Linux 使用的是 Gentoo 一样的 OpenRCinit 系统。

3.14.1. rc-update

rc-update 可用于管理 init 系统。

rc-update 主要用于不同运行级增加或者删除服务。

rc-update 语法格式:

Usage: rc-update [options] add <service> [<runlevel>...]
   or: rc-update [options] del <service> [<runlevel>...]
   or: rc-update [options] [show [<runlevel>...]]

Options: [ asuChqVv ]
  -a, --all                         Process all runlevels
  -s, --stack                       Stack a runlevel instead of a service
  -u, --update                      Force an update of the dependency tree
  -h, --help                        Display this help output
  -C, --nocolor                     Disable color output
  -V, --version                     Display software version
  -v, --verbose                     Run verbosely
  -q, --quiet                       Run quietly (repeat to suppress errors)

使用实例

$ rc-update add docker boot #增加一个服务
$ rc-update del docker boot #删除一个服务

3.14.2. rc-status

rc-status 主要用于运行级的状态管理。

rc-status 语法格式:

Usage: rc-status [options] <runlevel>...
   or: rc-status [options] [-a | -c | -l | -r | -s | -u]

Options: [ aclrsuChqVv ]
  -a, --all                         Show services from all run levels
  -c, --crashed                     Show crashed services
  -l, --list                        Show list of run levels
  -r, --runlevel                    Show the name of the current runlevel
  -s, --servicelist                 Show service list
  -u, --unused                      Show services not assigned to any runlevel
  -h, --help                        Display this help output
  -C, --nocolor                     Disable color output
  -V, --version                     Display software version
  -v, --verbose                     Run verbosely
  -q, --quiet                       Run quietly (repeat to suppress errors)

使用实例

$ rc-status  #检查默认运行级别的状态
$ rc-status -a #检查所有运行级别的状态

3.14.3. rc-service

rc-service 主用于管理服务的状态

rc-service 语法格式

Usage: rc-service [options] [-i] <service> <cmd>...
   or: rc-service [options] -e <service>
   or: rc-service [options] -l
   or: rc-service [options] -r <service>

Options: [ e:ilr:INChqVv ]
  -e, --exists <arg>                tests if the service exists or not
  -i, --ifexists                    if the service exists then run the command
  -I, --ifinactive                  if the service is inactive then run the command
  -N, --ifnotstarted                if the service is not started then run the command
  -l, --list                        list all available services
  -r, --resolve <arg>               resolve the service name to an init script
  -h, --help                        Display this help output
  -C, --nocolor                     Disable color output
  -V, --version                     Display software version
  -v, --verbose                     Run verbosely
  -q, --quiet                       Run quietly (repeat to suppress errors)

使用实例

$ rc-service sshd start #启动一个服务。
$ rc-service sshd stop  #停止一个服务。
$ rc-service sshd restart  #重启一个服务。

3.14.4. openrc

openrc 主要用于管理不同的运行级。

openrc 语法格式

Usage: openrc [options] [<runlevel>]

Options: [ a:no:s:SChqVv ]
  -n, --no-stop                     do not stop any services
  -o, --override <arg>              override the next runlevel to change into
                                    when leaving single user or boot runlevels
  -s, --service <arg>               runs the service specified with the rest
                                    of the arguments
  -S, --sys                         output the RC system type, if any
  -h, --help                        Display this help output
  -C, --nocolor                     Disable color output
  -V, --version                     Display software version
  -v, --verbose                     Run verbosely
  -q, --quiet                       Run quietly (repeat to suppress errors)

Alpine Linux 可用的运行级

  • default
  • sysinit
  • boot
  • single
  • reboot
  • shutdown

使用实例

$ openrc single #更改为single运行级

其它指令

$ reboot   #重启系统,类似于 shutdown -r now。
$ halt     #关机,类似于 shutdown -h now。
$ poweroff #关机

3.15. 使用实例

3.15.1. 开启 SSH 服务

安装 openssh-server 服务器

apk add openssh-server

修改配置文件 /etc/ssh/sshd_config

如果要想使用 root 用户远程管理,需要修改参数为:

PermitRootLogin yes

将 ssh 服务配置为开机自动启动

rc-update add sshd

如果你想立刻生效,可以执行命令:

/etc/init.d/sshd restart

3.15.2. 安装与启动 Nginx

更新 APK 软件包仓库的索引文件

## apk update

安装 Nginx

## apk add nginx

重启 Nginx 服务,将 Nginx 设置为开机自动启动

## /etc/init.d/nginx restart
## rc-update add nginx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云满笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值