概述
目录
- 1. alpine Linux
- 1.1. alpine Linux 配置
- 1.1.1. 配置启动延时
- 1.1.2. How to enable and start services on Alpine Linux
- 1.1.3. Writing Init Scripts
- 2. alpine Linux 安装 NodeJS
- 2.1. alpine Linux 安装 NodeJS 的思路
- 2.2. Dockerfile
- 2.3. 我提取出来的安装脚本文件 install-node.sh
- 3. alpine Linux 安装
- 3.1. 选择下载镜像
- 3.2. 插入 ISO 引导安装
- 3.3. 键盘选择
- 3.4. hostname 设置
- 3.5. 网络配置
- 3.6. 登录选项
- 3.7. 时区设置
- 3.8. 镜像选择
- 3.9. 基础服务程序选择
- 3.10. 硬盘选择
- 3.11. 安装完成
- 3.12. 什么是 alpine Linux
- 3.12.1. alpine 特色
- 3.12.2. 学习
- 3.13. 软件包管理
- 3.13.1. 网络工具
- 3.13.2. 更新源
- 3.13.2.1. 国内镜像源
- 3.13.2.2. 如何配置软件源
- 3.14. Alpine Linux init 系统
- 3.14.1. `rc-update`
- 3.14.2. rc-status
- 3.14.3. rc-service
- 3.14.4. openrc
- 3.15. 使用实例
- 3.15.1. 开启 SSH 服务
- 3.15.2. 安装与启动 Nginx
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. 网络配置
[eth0]
直接回车[dhcp]
输入?
回车- IP Address:
192.168.1.200/24
- Gateway:
192.168.1.1
manual [no]
直接回车- DNS:
119.29.29.29
3.6. 登录选项
空密码, 连续回车。
3.7. 时区设置
[UTC]
输入?
回车- 输入
Asia
回车, 再输入Shanghai
回车
3.8. 镜像选择
使用 f
自动查找最快的镜像站(非常慢) 或者指定中科大的镜像站。
我们可以看到 mirrors.xjtu.edu.cn
是 24
, 但是看不到上面的了, 根据 https://mirrors.alpinelinux.org/ 可以看到 mirrors.ustc.edu.cn
在 mirrors.xjtu.edu.cn
上面, 所以 mirrors.ustc.edu.cn
的编号就是 23
了, 我们输入 23
选择中国科技大学的镜像站。
3.9. 基础服务程序选择
选择默认的 openssh
和 chrony
就可以了。
3.10. 硬盘选择
?(list)
或者直接输入sda
就可以了, 回车。- 输入
sys
回车 - 输入
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
命令可以替代 dig
和 nslookup 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
最后
以上就是冷傲人生为你收集整理的Alphine Linux1. Alphine Linux2. Alphine Linux 安装 NodeJS3. Alphine Linux 安装的全部内容,希望文章能够帮你解决Alphine Linux1. Alphine Linux2. Alphine Linux 安装 NodeJS3. Alphine Linux 安装所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复