Aliyun Linuxを使ってみる

この記事は Alibaba Cloud の日本サイト の環境(ドキュメントやアカウント、そのアカウントでの検証結果)に基づいて記載しています。 日本サイトと国際サイトでは各プロダクトごとに提供機能が一部異なることがあります(そのほとんどは国際サイトの方が日本サイトよりも多機能になっている)。記事の内容は適宜最新化する予定です。

Aliyun LinuxにAlibaba Cloud CLIをインストールするところまで書いてみます。

とある検証作業でAlibaba Cloud CLIを使ってみようと思ったのですが、そのCLIの実行環境のインストールが必要とわかりました。 パソコン上にインストールしても良いのですが、どこからでも実行出来るようにAlibaba Cloud ECS上にインストールすることにしました。 せっかくなのでOSをAliyun Linuxにしてみたという話になります。

Aliyun LinuxのECSを購入

基本構成で、サブスクリプションを選んで、バーストタイプのt5の最小スペックにします。 ある程度長期間利用する予定のためサブスクリプションを選んでいます。

ここでOSに”Aliyun Linux”を選択します。 まったく下調べもしていないのでどんなOSなのか楽しみですねー。

もともとやりたい検証のために帯域は100Mbpsとします。 チケットを上げると200Mbpsまで変更できるはずです。 200Mbps以上の帯域が必要な場合はSLBを利用しましょう。  ちなみに既定値は5Mbpsです。 意味もなく帯域があると、意図せず大量のトラフィックを流した場合に課金で泣いてしまいます。5Mbpsの既定値は親切設計だと思います。 仮に100Mbpsを30日間フルで使い切った場合、32.4TB(理論値)のアウトバウンド通信が可能でこのときの課金は398,520円/月となります。

今回はタグは設定しません。

最後に、購入サイクルと自動更新と利用規約を確認し、注文を確定します。

Aliyun Linuxにログイン

さっそくログインします。 設定は省略しますが、キーペア認証でログインします。

ログインメッセージは”Welcome to Alibaba Cloud Elastic Compute Service !”です。 シンプルですね。 変えたい場合は/etc/motdを変えましょう。

とりあえずunameの結果を見てみます。 下の画像では先にdfを実行し、次にunameです。 dfを実行していることに意味はありません(癖みたいな感じです)。

次にこのOSがRed Hat互換かどうかを確認してみるために、/etc/redhat-releaseを見てみます。

”Alibaba Cloud Enterprise Linux Server release 17.012 (Golden Toad)”となっています。 /etc/redhat-releaseファイルがあるのでRed Hat互換な感じでしょうか。 ただ、バージョンが17.01.2とRed Hatのバージョン表記と大きく異なるので対応はわかりません。

Red Hat互換みたいなのでとりあえず”yum”を実行してみます。 普通にyumコマンドが動いたのでそのまま最新化することにします。 

ここであらためて”Aliyun Linx”について調べてみることにします。 普通にCentOSと互換性があるとのことでした。

CentOS 7.2と互換性があり

https://jp.alibabacloud.com/help/faq-detail/53091.htm

CentOSとの違いは以下の公式ドキュメントに記載がありました。 ハイパフォーマンスのためのチューニングがされているようです。 また、自動NUMA機能はちょっと気になりますね。 Hyper Visor側ではなくゲストOS側でどう実装しているのか気になります。

Alibaba Cloud カーネルグループによって管理されているLinuxカーネル4.4との統合
・スワップ領域の圧縮をサポートし、I/O を大幅に削減します。
・ホットパッチ機能であるkpatchをサポートします。カーネルをアップグレードするためにインスタンスを再起動する必要はありません。
・非常に大きいメモリ(最大で 3 TB)を持つ仮想マシンのkdumpメカニズムをサポートします。
・自動 NUMA 機能をサポートします。
vsyscallページを使用してユーザーモードでタイムスタンプを取得するパフォーマンスを向上させます。
・Dockerテクノロジスタックを完全にサポートします。
・Paravirtual(PV)パニックイベントインターフェイスをサポートし、クラウドユーザーがカーネルの問題をすばやく特定できるようにしています。
・アンチSYNフラッディング攻撃能力が2〜3桁向上した、再設計されたロックレスTCPリスナーを提供します。

https://jp.alibabacloud.com/help/faq-detail/53091.htm

次にyumの設定を確認します。

[root@sun yum]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://www.aliyun.com/
This is the default, if you make this bigger yum won’t see if the metadata
is newer on the remote and so you’ll “gain” the bandwidth of not having to
download the new metadata and “pay” for it by yum not having correct
information.
It is esp. important, to have correct metadata, for distributions like
Fedora which don’t keep old packages around. If you don’t like this checking
interupting your command line usage, it’s much better to have something
manually check the metadata once an hour (yum-updatesd will do this).
metadata_expire=90m
PUT YOUR REPOS HERE OR IN separate files named file.repo
in /etc/yum.repos.d

/etc/yum.repos.dも見てみます。既定で3つのリポジトリを見にいっています。

[root@sun yum]# ls /etc/yum.repos.d/
ALinux-Base.repo aliyun-17.01.repo epel.repo

ALinux-Base.repoの設定は以下の通り。日本にミラーがあるのかな?

[root@sun yum.repos.d]# cat ALinux-Base.repo
[base]
name=ALinux-$releasever
enabled=1
failovermethod=priority
baseurl=http://jp.mirrors.cloud.aliyuncs.com/alinux/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://jp.mirrors.cloud.aliyuncs.com/alinux/RPM-GPG-KEY-ALinux-7
[updates]
name=ALinux-$releasever
enabled=1
failovermethod=priority
baseurl=http://jp.mirrors.cloud.aliyuncs.com/alinux/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://jp.mirrors.cloud.aliyuncs.com/alinux/RPM-GPG-KEY-ALinux-7
[extras]
name=ALinux-$releasever
enabled=1
failovermethod=priority
baseurl=http://jp.mirrors.cloud.aliyuncs.com/alinux/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://jp.mirrors.cloud.aliyuncs.com/alinux/RPM-GPG-KEY-ALinux-7

aliyun-17.01 の設定は以下の通り。

[root@sun yum.repos.d]# cat aliyun-17.01.repo
AliYun.repo
[base]
name=AliYun-$releasever – Base – mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/alinux/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/alinux/RPM-GPG-KEY-ALinux-7
released updates
[updates]
name=AliYun-$releasever – Updates – mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/alinux/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/alinux/RPM-GPG-KEY-ALinux-7
additional packages that may be useful
[extras]
name=AliYun-$releasever – Extras – mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/alinux/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/alinux/RPM-GPG-KEY-ALinux-7

epel.repo の設定は以下の通り。日本にミラーがあるのかな?

[root@sun yum.repos.d]# cat epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 – $basearch
enabled=1
failovermethod=priority
baseurl=http://jp.mirrors.cloud.aliyuncs.com/epel/7/$basearch
gpgcheck=0
gpgkey=http://jp.mirrors.cloud.aliyuncs.com/epel/RPM-GPG-KEY-EPEL-7[

Aliyun Linux独自のパッケージが利用できるかはまた別の機会に調べてみることにします。 

とりあえず、”Aliyun Linux”が無事立ち上がりましたので次の工程に進みます。

Alibaba Cloud CLIをインストールする

目的はAlibaba Cloud CLI の実行環境を作ることでした。 次に、CLI環境のインストールに進みます。

公式ドキュメントを参考に進めることにします。

公式ドキュメントのURLはこちら

”ソースコードをコンパイルする”とあります。 makeコマンドでコンパイルするようですね。 私が仕事を始めた頃はSolaris全盛であらゆるソフトをコンパイルしていました。 当時はコンパイラのGCCを一晩かけてコンパイルするところがスタートでした。そのあと、X-WindowをコンパイルしてCDE(Solaris標準のデスクトップ環境)を置き換えて、wnnやcannnaやkinput2、emacsをインストールしていたことを思い出して懐かしい気分です。

とりあえず、進めてみます。多分”git”コマンドはインストールされていないんだろうなと予想してwhichで確認しつつ、yumでインストールします。

では、公式ドキュメントどおりに進めてみます。 rootで実行していることは無視してください。

[root@sun src]# export GOPATH=/usr/local
[root@sun src]# mkdir github.com
[root@sun src]# mkdir github.com/aliyun
[root@sun src]# cd $GOPATH/src/github.com/aliyun
[root@sun aliyun]# git clone http://github.com/aliyun/aliyun-cli.git
Cloning into ‘aliyun-cli’…
remote: Enumerating objects: 41, done.
remote: Counting objects: 100% (41/41), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 13689 (delta 10), reused 28 (delta 10), pack-reused 13648
Receiving objects: 100% (13689/13689), 14.94 MiB | 10.21 MiB/s, done.
Resolving deltas: 100% (8897/8897), done.

[root@sun aliyun]# git clone http://github.com/aliyun/aliyun-openapi-meta.git
Cloning into ‘aliyun-openapi-meta’…
remote: Enumerating objects: 4632, done.
remote: Counting objects: 100% (4632/4632), done.
remote: Compressing objects: 100% (280/280), done.
remote: Total 4632 (delta 4483), reused 4495 (delta 4346), pack-reused 0
Receiving objects: 100% (4632/4632), 613.89 KiB | 0 bytes/s, done.
Resolving deltas: 100% (4483/4483), done.
[root@sun aliyun]# pwd
/usr/local/src/github.com/aliyun
[root@sun aliyun]# cd aliyun-cli/
[root@sun aliyun-cli]# ls
bin config integration meta README_zh.md
CHANGELOG.md Gopkg.lock LICENSE openapi resource
cli Gopkg.toml main oss suite_test.sh
command i18n Makefile README.md vendor
[root@sun aliyun-cli]# make install
go get github.com/aliyun/aliyun-openapi-meta
make: go: Command not found
make: [deps] Error 127 (ignored)
go get -u github.com/jteeuwen/go-bindata/…
make: go: Command not found
make: *** [deps] Error 127

失敗しました。 ” make: go: Command not found”ということなのでgoをインストールすることにします。

”yum install go”でgoコマンドが使えるようになりました。 yumなりapt-getなり便利ですね。

再度”make install”を実行します。

はい、Errorということで失敗です。 よくあることです。

初心に帰ってドキュメントを確認することにします。

Download installer (Recommended)
Download the installer, then extract the installer. You can move the extracted aliyun executable file to the /usr/local/bin directory or add it to the $PATH.
Download link: (3.0.9)
Mac
Linux
Windows (64 bit)

https://github.com/aliyun/aliyun-cli

バイナリが配布されていますね。ダウンロードして展開して、/usr/local/binにコピーするだけで利用可能になるとのこと。 今回はエラーのトラブルシューティングは早々にあきらめてバイナリインストールすることにします。 少し悔しいのですが。

[root@sun aliyun-cli]# cd /usr/local/src
[root@sun src]# ls
github.com
[root@sun src]# mkdir aliyun
[root@sun src]# cd aliyun/
[root@sun aliyun]# ls
[root@sun aliyun]# wget https://aliyuncli.alicdn.com/aliyun-cli-linux-3.0.9-amd64.tgz
–2019-02-13 22:44:12– https://aliyuncli.alicdn.com/aliyun-cli-linux-3.0.9-amd64.tgz
Resolving aliyuncli.alicdn.com (aliyuncli.alicdn.com)… 202.47.28.99, 202.47.28.98
Connecting to aliyuncli.alicdn.com (aliyuncli.alicdn.com)|202.47.28.99|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 9466759 (9.0M) [application/octet-stream]
Saving to: ‘aliyun-cli-linux-3.0.9-amd64.tgz’
100%[======================================>] 9,466,759 –.-K/s in 0.1s
2019-02-13 22:44:15 (61.6 MB/s) – ‘aliyun-cli-linux-3.0.9-amd64.tgz’ saved [9466759/9466759]
[root@sun aliyun]# tar xzf aliyun-cli-linux-3.0.9-amd64.tgz
[root@sun aliyun]# ls
aliyun aliyun-cli-linux-3.0.9-amd64.tgz

無事展開できました。”aliyun”を/usr/local/binのコピーしてインストールは完了です。 簡単なのは嬉しいと思いつつ、自分のスキルが劣化していく気もします。

[root@sun aliyun]# ls -l
total 34192
-rwxr-xr-x 1 root wheel 25539909 Jan 24 14:30 aliyun
-rw-r–r– 1 root root 9466759 Jan 24 14:30 aliyun-cli-linux-3.0.9-amd64.tgz
[root@sun aliyun]# cp -a aliyun /usr/local/bin
[root@sun aliyun]# which aliyun
/usr/local/bin/aliyun

インストール完了です。

最後にAlibaba Cloud CLIを実行して終わりにします。とりあえずヘルプを見てみます。

[root@sun /]# aliyun
Alibaba Cloud Command Line Interface Version 3.0.9
Usage:
aliyun [–parameter1 value1 –parameter2 value2 …]
Commands:
configure configure credential and settings
oss Object Storage Service
auto-completion enable auto completion
Flags:
–mode use --mode {AK|StsToken|RamRoleArn|EcsRamRole|RsaKeyPair} to assign authenticate mode
–profile,-p use --profile <profileName> to select profile
–language use --language [en|zh] to assign language
–region use --region <regionId> to assign region
–access-key-id use --access-key-id <AccessKeyId> to assign AccessKeyId, required in AK/StsToken/RamRoleArn mode
–access-key-secret use --access-key-secret <AccessKeySecret> to assign AccessKeySecret
–sts-token use --sts-token <StsToken> to assign StsToken
–ram-role-name use --ram-role-name <RamRoleName> to assign RamRoleName
–ram-role-arn use --ram-role-arn <RamRoleArn> to assign RamRoleArn
–role-session-name use --role-session-name <RoleSessionName> to assign RoleSessionName
–private-key use --private-key <PrivateKey> to assign RSA PrivateKey
–key-pair-name use --key-pair-name <KeyPairName> to assign KeyPairName
–secure use --secure to force https
–force use --force to skip api and parameters check
–endpoint use --endpoint <endpoint> to assign endpoint
–version use --version <YYYY-MM-DD> to assign product api version
–header use --header X-foo=bar to add custom HTTP header, repeatable
–body use --body $(cat foo.json) to assign http body in RESTful call
–pager use --pager to merge pages for pageable APIs
–output,-o use --output cols=Field1,Field2 [rows=jmesPath] to print output as table
–waiter use --waiter expr=<jmesPath> to=<value> to pull api until result equal to expected value
–dryrun add --dryrun to validate and print request without running.
–quiet,-q add --quiet to hide normal output
–help print help
Sample:
aliyun ecs DescribeRegions
Use aliyun --help for more information.
[root@sun /]#

以上