alphine

Posted on Posted in linux

alphine

安装

https://alpinelinux.org/downloads/

setup-alpine

不管是刻录U盘还是在虚拟机里启动,进入终端之后,输入root默认无密登陆,然后执行"setup-alpine"命令,在终端上启动他的安装程序。

键盘布局

询问键盘布局,输入"cn"

默认回车

后面的配置选项,"hostname"、"网卡配置"、"IP地址配置"、"配置dns"等一系列选择默认即可,有需要的可以根据实际情况修改。

时区配置

手动输入"Asia"和"Shanghai"

选择软件源

这里如果联网了,输入"f"回车,让程序自动匹配当前最快的软件源。可能会花一点时间。尽量不要跳过,因为后面格式化硬盘的时候需要联网安装相关的命令。

ssh server

跟着的ssh和NTP默认即可

格式化硬盘

之后的每一步要仔细看了,就询问你"Availabe disks are"和"Which disks would you like to use?"来选择安装的硬盘,可以输入"?"来列举可用硬盘,然后手动输入,这里这里我安装到"sda",你有需要可以选择其他位置。

在询问你"How would you like to use it?",这里输入"sys"硬盘安装,其余的"data"、"lvm"可以了解一下,这里不再赘述。

格式化硬盘然后复制文件需要些时间,完成之后会提示"Installation is complete",这时候拔掉U盘或者设置硬盘第一启动,就可以重启了

apk 包

apk包管理命令

Alpine使用apk进行包管理,通过apk --help命令查看完整的包管理命令,下面列举常用命令:

1、update:从远程镜像源中更新本地镜像源索引

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

$ apk update

2、add:安装PACKAGES并自动解决依赖关系

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'

3、del:卸载并删除PACKAGES

$ apk del openssh openntp vim

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

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

5、search:搜索软件包

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

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

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

$ apk info #列出所有已安装的软件包
$ apk info -a zlib #显示完整的软件包信息
$ apk info --who-owns /sbin/lbu #显示指定文件属于的包

配置软件源

以中科大源为例:在/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

简单手动配置

开启SSH登陆

默认 alpine 没有开启远程登录权限。 ssh远程登录不了。

vi /etc/ssh/sshd_config

增加:

PermitRootLogin yes

允许root登录,当然这个是测试环境,如果有需要也可以自己新建ssh账户。这是另话。

安装常用软件

apk update
apk add bash wget curl git make vim docker

APK安装报错

ERROR: unsatisfiable constraints:
mysql-client (missing):
required by: world

如果碰到上面类似的报错,那是当前的软件源有问题,建议换个源,我在安装docker、go和mysql的时候都遇到类似的"required by: world"的错误无法安装,一筹莫展好几天,直到我换了中科大的源。
编辑

/etc/apk/repositories

然后在文件的最顶端添加(注意将3.3换成需要的版本)

http://mirrors.ustc.edu.cn/alpine/v3.3/main/

安装openjdk

因为Alpine linux使用的是musl,与常见的glibc不同,Musl是一个轻量级的C标准库。所以oracle上下载的jdk和openjdk无法直接使用。自己动手编译需要花费几倍的时间精力,可以找已经打包好了的针对musl编译的openjdk来直接安装。azul提供了针对Alpine linux的openjdk,可以直接拿来安装。
安装过程和普通的jdk安装就没有任何区别了,下载tar包解压到安装目录,配置环境变量即可。

wget -mr https://cdn.azul.com/zulu/bin/zulu11.29.3-ca-jdk11.0.2-linux_musl_x64.tar.gz
tar -xzfv zulu11.29.3-ca-jdk11.0.2-linux_musl_x64.tar.gz
cd zulu11.29.3-ca-jdk11.0.2-linux_musl_x64.tar.gz
mv zulu /usr/lib/jvm/
/usr/lib/jvm/zulu-8/bin/java -version

设置时区

setup-alpine安装前面不仔细看,设置时区容易忽略,好多程序用到的时间校验就容易出问题。用到手动在alpine 下修改UTC时间为CST时间 (测试通过)

$ apk add tzdata
$ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
$ echo "Asia/Shanghai" > /etc/timezone

安装glibc

这是作为Alpine Linux包运行的GNU C库,用于运行链接的二进制文件glibc

apk --no-cache add ca-certificates wget
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-2.29-r0.apk
apk add glibc-2.29-r0.apk

有关最新下载链接,请参阅发行版页面。如果你使用的工具,除了包之外localdef你还需要glibc-bin和包。glibc-i18nglibc

安装zsh和docker

安装zsh

官网地址:https://ohmyz.sh/

wiki: https://github.com/robbyrussell/oh-my-zsh/wiki

# alpine linux
# apk add zsh curl wget git

参照官网

# Via curl
$ sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
# Via wget
# sh -c "$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

改变当前用户的shell

# alpine linux
# sed -i -e "s/bin\/ash/bin\/zsh/" /etc/passwd
# exit

重新登陆shell

安装docker

删除旧版本的docker,假如有。

➜ ~ apk del docker
➜ ~ rm -rf /etc/docker /var/lib/docker /var/run/docker

如果没有docker的安装包,需要将community地址添加到 /etc/apk/repositories

➜ ~ apk add docker
(1/8) Installing libmnl (1.0.4-r0)
(2/8) Installing jansson (2.10-r0)
(3/8) Installing libnftnl-libs (1.0.8-r1)
(4/8) Installing iptables (1.6.1-r1)
(5/8) Installing libltdl (2.4.6-r4)
(6/8) Installing libseccomp (2.3.2-r1)
(7/8) Installing docker (17.12.1-r0)
Executing docker-17.12.1-r0.pre-install
(8/8) Installing docker-zsh-completion (17.12.1-r0)
Executing busybox-1.27.2-r8.trigger
OK: 710 MiB in 65 packages

启动服务

➜ ~ rc-service docker start
* /var/log/docker.log: creating file
* /var/log/docker.log: correcting mode
* /var/log/docker.log: correcting owner
* Starting docker ... [ ok ]

验证服务是否启动

# docker info
➜ ~ docker version
Client:
Version: 17.12.1-ce
API version: 1.35
Go version: go1.9.4
Git commit: 9584b2309e
Built: Wed Mar 7 13:17:02 2018
OS/Arch: linux/amd64

Server:
Engine:
Version: 17.12.1-ce
API version: 1.35 (minimum version 1.12)
Go version: go1.9.4
Git commit: v17.12.1-ce
Built: Wed Mar 7 13:16:22 2018
OS/Arch: linux/amd64
Experimental: false
➜ ~ rc-update add docker boot
* service docker added to runlevel boot

服务启动加载的脚本

➜ ~ rc-service -r docker
/etc/init.d/docker

开启远程api及配置国内镜像

➜ ~ vim /etc/conf.d/docker
DOCKER_OPTS默认为空值

# /etc/conf.d/docker: config file for /etc/init.d/docker

# where the docker daemon output gets piped
# this contains both stdout and stderr. If you need to separate them,
# see the settings below
#DOCKER_LOGFILE="/var/log/docker.log"

# where the docker daemon stdout gets piped
# if this is not set, DOCKER_LOGFILE is used
#DOCKER_OUTFILE="/var/log/docker-out.log"

# where the docker daemon stderr gets piped
# if this is not set, DOCKER_LOGFILE is used
#DOCKER_ERRFILE="/var/log/docker-err.log"

# where docker's pid get stored
#DOCKER_PIDFILE="/run/docker.pid"

# where the docker daemon itself is run from
#DOCKERD_BINARY="/usr/bin/dockerd"

# any other random options you want to pass to docker
DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock --registry-mirror=http://xxxx.m.daocloud.io"

# disable grsecurity features
#disable_grsec="chroot_deny_chmod chroot_deny_mknod"

重启docker服务,可以远程telnet一下docker的2375端口试试

➜ ~ service docker restart
* WARNING: you are stopping a boot service
* Stopping docker ... [ ok ]
* Starting docker ... [ ok ]
➜ ~ telnet 192.168.163.200 2375

HTTP/1.1 400 Bad Request
Content-Type: text/plain; charset=utf-8
Connection: close

400 Bad RequestConnection closed by foreign host

init系统

rc-update

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

rc-update语法格式

Usage: rc-update [options] add [...]
or: rc-update [options] del [...]
or: rc-update [options] [show [...]]

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 outputrc-status

-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 #删除一个服务

rc-status

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

rc-status语法格式

Usage: rc-status [options] ...
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 #检查所有运行级别的状态

rc-service

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

rc-service语法格式

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

Options: [ e:ilr:INChqVv ]
-e, --exists 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 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 #重启一个服务。

openrc

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

openrc语法格式

Usage: openrc [options] []

Options: [ a:no:s:SChqVv ]
-n, --no-stop do not stop any services
-o, --override override the next runlevel to change into
when leaving single user or boot runlevels
-s, --service 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 #关机

转自https://www.linuxprobe.com

» 转载请注明来源:呢喃 » alphine

Leave a Reply

Your email address will not be published. Required fields are marked *

seven + 13 =