LoginSignup
2
3

More than 3 years have passed since last update.

Alpine

Last updated at Posted at 2019-12-14

はじめに

登頂は無理だけど, 3合目まで頑張るぞい.
3合目は, 最低限のソフトウェアをインストールして, 最低限のセキュリティ確保して,
DockerでTensorflowを動かせるようにすること. DockerやTensorflowの勉強も含みです.
0.5合目くらいのような気もしますが.
HHKB Type-S新型やべーな, 会社のも新型にしたいな, 金ないけど.
全部Alpineのリファレンスに書いてあるぞ. 典型的なQiitaクソ記事だね.
Qiitaが検索に上がるの, 本当にやめてほしい.
この記事はインストールと設定しか書いていないため, 運営により削除されるはずです.
そうでなければおかしい.

Speed Running Windows 95みたいな. チャート作らなきゃ.

インストロール

ムーミンはトロールだよ(ヒポポタマスじゃん).
起動したらとりあえず rootって打っとけ.

$ setup-alpine
$ adduser nya
$ addgroup nya nekozoku

キーボードは, 'us us'.

Network

/etc/network/interfacesを編集する.

iface eth0 inet static
     address xxx.xxx.xxx.xxx
     netmask 255.255.255.0
     gateway xxx.xxx.xxx.xxx

Wifi

これはsetup-alpineで, できていると思われる.

$ iwconfig wlan0 essid SSID0
$ wpa_passphrase 'SSID0' 'PASSWORD' > /etc/wpa_supplicant/wpa_supplicant.conf
$ wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
$ udhcpc -i wlan0

setup-alpineでは永続化はされない, サービスを入れておく.
リファレンスどおり, 確認してから起動する, ふーん慎重じゃん.

$ ifconfig wlan0 down
$ /etc/init.d/wpa_supplicant start
$ rc-update add wpa_supplicant boot

静的にするなら, /etc/network/interfaces

iface wlan0 inet static
     address xxx.xxx.xxx.xxx
     netmask 255.255.255.0
     gateway xxx.xxx.xxx.xxx

TUI

というらしい, もうよくわからない.
常時SSHならそれほど必要ないのだけれど, 高解像度ディスプレイに直接つなぐ場合はそのままだとつらい.

extlinux bootloader

/boot/extlinux.confを書く.
APPENDからnomodesetを削除, video=800x600とか追加.
Hyper-Vはかなり優秀というのは置いておいて, video=hyperv_fb:800x600とする.

Screen

$ apk add screen

リポジトリ追加

/etc/apk/repositoriesを編集する. communityリポジトリぐらいは追加しておく.

$ apk update
$ apk upgrade

sshd

$ apk add tinyssh
$ rc-update add tinysshd

Firewall

WIP

IPv6は必要なら.

$ sudo apk update
$ sudo apk add iptables ip6tables
$ sudo apk add -u awall
$ sudo apk version awall

カーネルモジュール追加, iptable_natはルーティングが必要な場合に追加.

$ sudo modprobe -v ip_tables
$ sudo modprobe -v ip6_tables
$ sudo modprobe -v iptable_nat
$ sudo rc-update add iptables
$ sudo rc-update add ip6tables

https://github.com/alpinelinux/awall から
sample-policy.jsonをベースにする.

$ wget https://raw.githubusercontent.com/alpinelinux/awall/master/sample-policy.json
$ sudo mv ./sample-policy.json /etc/awall/optional/default-policy.json
$ sudo awall list
$ sudo awall translate --verify
$ sudo awall enable default-policy
$ sudo awall activate

/etc/awall/optional/base.json

とりあえず何もしないもので試す.

{
  "description": "default policy",
  "zone": {
    "WAN": { "iface": ["eth0", "wlan0"] }
  },
  "policy": [
    {"in": "_fw", "out": "WAN", "action":"accept"},
    {"in": "WAN", "action": "accept" },
    {"out": "WAN", "action": "accept"}
  ]
}

sudo

root権限で, wheelグループは最初からある.

$ apk add sudo
$ visudo

%wheel ALL(=ALL) ALLは入れておいて, Defaults timestamp_timeout = 10は好みで設定する.

Certification

証明書が必要なときに.

$ sudo mv xxx.crt /usr/share/ca-certificates/
$ sudo vim /etc/ca-certificates.conf
 #xxx.crtを追記
$ sudo update-ca-certificates

Python3

$ sudo apk add python3
$ sudo apk add py3-pip

MariaDB

$ sudo apk add mariadb mariadb-client
$ sudo /etc/init.d/mariadb setup

mysqld --help --verbose | grep my.cnf

my.cnf
[client]
port        = 3306
socket      = /run/mysqld/mysqld.sock
default-character-set=utf8mb4

[mysqld]
port        = 3306
socket      = /run/mysqld/mysqld.sock
character-set-server    = utf8mb4
collation-server    = utf8mb4_general_ci
skip-external-locking
key_buffer_size = 8M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 4M

tmpdir      = /tmp/
log_error = /var/log/mysql/mariadb.log
#skip-networking
log-bin=mysql-bin
binlog_format=mixed
server-id   = 1
bind-address = 127.0.0.1

[mysqldump]
quick
max_allowed_packet = 8M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 10M
sort_buffer_size = 10M
read_buffer = 1M
write_buffer = 1M

[mysqlhotcopy]
interactive-timeout

$ sudo rc-service mariadb start
$ sudo rc-update add mariadb
$ sudo mysql_secure_installation

Gogs

$ git clone --depth 1 https://github.com/gogs/gogs.git gogs
$ cd gogs
$ go build -o gogs

OpenRCのサービスを作成する.

/etc/init.d/gogs
#!/sbin/openrc-run

SVCNAME=gogs
GOGS_PIDFILE=/var/run/gogs.pid
GOGS_USER=git
GOGS_HOME=/home/$GOGS_USER
GOGS_PATH=$GOGS_HOME/gogs
COMMAND="${GOGS_PATH}/gogs"
ARGS="web"

depend() {
    need net
    use dns logger mysql
}

checkconfig() {
    if [ ! -d "$GOGS_PATH" ] ; then
        eerror "gogs not installed" || return 1
    fi
    return 0
}

start() {
    checkconfig || return 1

    ebegin "Starting ${SVCNAME}"
    start-stop-daemon --start --quiet --background \
        --make-pidfile --pidfile "${GOGS_PIDFILE}" \
        --user "${GOGS_USER}" \
        -d ${GOGS_PATH} \
        --exec "${COMMAND}" "${ARGS}"
    eend $?
}

stop() {
    ebegin "Stopping ${SVCNAME}"
    start-stop-daemon --stop --quiet --pidfile $GOGS_PIDFILE
    eend $?
}

$ sudo rc-service gogs start
$ sudo rc-update add gogs

Desktop

Xfce

$ sudo setup-xorg-base xfce4 xfce4-terminal lightdm-gtk-greeter xfce4-screensaver dbus-x11

環境に合うビデオドライバを選択します.
Intelの場合, Haswell以降はxf86-video-modesetting, より前はxf86-video-intelを使うのが正解らしいです.

$ apk search xf86-video
$ sudo apk add xf86-video-fbdev # Use xf86-video-fbdev for Hyper-V guests
$ apk search xf86-input
$ sudo apk add xf86-input-keyboard xf86-input-mouse
$ sudo apk add kbd
$ sudo rc-update add dbus
$ sudo rc-update add lightdm

OpenGL

$ sudo apk add mesa
$ sudo apk add mesa-dev
$ sudo apk add mesa-dri-gallium

テストアプリ.

Mesa Demos

$ sudo apk add mesa-demos

Xvfb

$ sudo apk add xvfb xvfb-run

VNC

/etc/local.dのスクリプトが実行されるようにする.

$ sudo apk add x11vnc
$ sudo rc-update add local default

Option Description Example
-display Specify display -display :0
-rfbport The port to listen on -rfbport 5900
-geometry Same as -scale WxH -scale 1024x178
-viewonly All clients can only watch
-shared Display is shared
-forever Keep listening for more connections
-bg Go into the background.
-noxdamage Don't use the X DAMAGE

/etc/local.d/vnc.start

#!/bin/sh
nohup x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -shared -forever -bg -auth /var/run/lxdm/lxdm-\:0.auth -rfbport 5900 -o /var/log/vnc.log > /dev/null 2>&1 &
$ sudo chmod +x /etc/local.d/vnc.start

Headless

$ sudo apk add xf86-video-dummy

Docker

/etc/apk/repositories, Dockerはcommunityにあるもよう.

http://dl-cdn.alpinelinux.org/alpine/v3.10/community
$ sudo apk update

よくないとは知りつつdockerグループに属する.

$ sudo apk add docker
$ sudo apk add docker-compose
$ sudo addgroup nya docker
$ sudo /etc/init.d/docker start
$ docker system info
$ sudo rc-update add docker boot

念願のDockerを手に入れたぞ.

Tensorflow

この項はまだ途中
ここまでくると, Alpineは関係なくなっていますが.

Intel optimized Tensowflow

Tensorflow 1.14からIntel MKL DNNを使用している.
https://software.intel.com/en-us/articles/intel-optimization-for-tensorflow-installation-guide
https://cloud.google.com/ai-platform/deep-learning-containers/docs/choosing-container

REPOSITORY TAG SIZE
intelaipg/intel-optimized-tensorflow latest 3.29GB
intelaipg/intel-optimized-tensorflow latest-py3 2.07GB
gcr.io/deeplearning-platform-release/tf2-cpu latest 6.26GB
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3