Rubyと筋肉とギターとわたし

筋トレが仕事です

Docker初心者が超絶簡単にDockerfileをまとめてみた その2

前回のブログの続き

smot93516.hatenablog.jp

前回使わなかった命令の中でよく使うものを紹介したいと思います。

実行環境

前回と一緒。

  • ubuntu16.04.1(elementary OS 0.4.1 Loki)
  • Docker version 17.12.0-ce

MAINTAINER命令

Dockerfileをチームで共有して開発する場合、誰がこのDockerfileを作ったのかを明示的にしておくようにします。

チームとしてはわかった方が嬉しいですよね。
多分Dockerfileとかコピペするだろうから意味ないと思うけど。

イメージ作成に直接関係があるかといえば、なんとも言えないです。
自分しか触らないのであれば書く必要は無いですね、きっと。

一応書き方。

MAINTAINER <名前>

# 例えばこんな感じ
MAINTAINER motty93 rdwbocungelt5@gmail.com

必要になったら書き方ググればいいと思います〜まあ無くても大丈夫かな。



WORKDIR命令

ディレクトリ移動の命令。
ディレクトリがなければ、自動的にディレクトリが作成されます。

FROM ubuntu

WORKDIR work

WORKDIR shop

RUN pwd

pwdの結果は/work/showです。

主にRUNCMDENTRYPOINTCOPYADD命令実行時の作業ディレクトリを指定するときに使います。

Rails環境を作った時にも使ったので、別の記事でそれはあげたいと思います。

VOLUME命令

(※1)マウントポイントを作成して外部マウント可能な(※2)ボリュームを作成する命令。

よく、データの永続化で使われます。
てかほとんどそれ。

FROM cenos:latest

RUN yum install -y httpd
RUN mkdir /var/log/httpd

CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

VOLUME /var/log/httpd

こんな感じにすると、apacheのログがVOLUMEで指定されたディレクトリへ溜まっていきます。
詳しくはdocker-composewordpress環境を作成するときに、データの永続化でやってみたいと思います。


※1 マウント:OSに読み書きできるように認識させる
※2 ボリューム:マウントされた領域のこと



ADD命令 & COPY命令

どちらかといえばCOPY命令を使った方がいいらしい。

第一引数に、ホストOS(自分のPC)のディレクトリ/ファイルを、第二引数にコンテナ内のディレクトリを指定します。

こんな感じ。

FROM centos

RUN mkdir app

# index.htmlはDockerfileと同じディレクトリにあるものと仮定します
ADD index.html /app

COPY index.html /app

要は、自分のPCのにあるファイルやらディレクトリやらをコンテナ内に持っていくって感じです。

コンテナ起動してから作成すればいいやん!って思った方、いると思います。

前回も書いたんですが、直接コンテナに入って行ったことは、コンテナを停止するとイメージを作成した状態まで戻ってしまいます(場合によります)。

だからイメージを作成する命令(Dockerfile)を書いてあげるんですよ(これで何回かハマりました、Dockerを理解していない証拠・・・)。

ENV命令

環境変数の設定です。

WORKDIR命令などのディレクトリを指定する命令と一緒に使われることがしばしばです。

FROM centos

RUN $DIR /dir

WORKDIR /usr/$DIR

COPY index.html /usr/$DIR

ここで環境変数を設定しておけば、コンテナを作成しても有効なままです。
設定されている値はdocker inspectで参照できます。

EXPOSE命令

特定のポートをコンテナが実行された時に読み取るようにdockerに教えてあげる命令です。

問題なのが、この命令があってもホストのブラウザからコンテナにアクセスできないんですよ。

なので、-pオプションで開くポートを指定する必要はあります。

FROM centos

RUN yum install -y httpd

EXPOSE 3000

CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

こんな感じで

$ docker run -d -p 3000 イメージ名

で起動できます。

いじょー

とりあえず主要なものだけピックアップして簡単に説明してみました。

初心者の説明なので、全く当てにならないかもしれないですが、参考にできるところだけ見てみてください。

今度はdocker-composeでいろんな環境を作ってみたいと思います。

お疲れ様でした!



Docker初心者が超絶簡単にDockerfileをまとめてみた その1

前回の記事で簡単なDockerfileを初めて作ってみました。

ですが、全くDockerfileの書き方について触れてなかった、というよりスルーしていたのでちょっとまとめてみたいと思います。
他にDockerfileの記事を書いている人はだいたいわかりにくい・・・

多分簡単です。慣れれば。

Dockerfileってなによ

簡単に言えば、「コンテナを作るときの説明書」および「手順書」のこと

Dockerfileのおかげで以下

  • dockerイメージを作成
  • コンテナ内で行うコマンド操作
  • 環境変数の設定
  • コンテナ内で動作させるデーモン実行

をビルド時に実行してイメージを作成したりします。

ね!簡単でしょ?

Dockerfileの命令一覧

命令 説明
FROM ベースイメージの指定
MAINETAINER Dockerfileの作成者情報
RUN コマンド実行
VOLUME ボリュームのマウント
ADD ファイル/ディレクトリの追加
COPY ファイルのコピー
CMD デーモン実行
ENTRYPOINT デーモン実行
LABEL ラベルの設定
USER ユーザの指定
EXPOSE ポートのエクスポート
WORKDIR 作業ディレクトリの指定
ENV 環境変数の設定
ONBUILD ビルド完了後に実行される命令

上の表がDockerfileの命令です。 これを元にやっていきます。

今回はほんと簡単な命令しか書きません。
次回以降暇があれば記事にします。



実行環境

  • ubuntu16.04.1(elementary OS 0.4.1 Loki)
  • Docker version 17.12.0-ce

準備

わかりやすいようにディレクトリの準備をします。

$ cd ~ && mkdir docker-practice && cd !!$ && touch Dockerfile

homeディレクトリに移動してdocker-practiceディレクトリ作成&移動、Dockerfileを作成します。

FROM命令

DockerfileではコンテナはどのDockerイメージから生成するかという、「ベースイメージ」が必要なので、それをFROM命令で書いてあげます。

FROM イメージ名
or
FROM イメージ名:タグ名
or
FROM イメージ名@ダイジェスト

上記の形で書きます。
が、上2つだけ覚えておけばとりあえず大丈夫です。

たとえば、最新のubuntuイメージを取ってきたい場合は

FROM ubuntu:latest

でおk。超簡単。

試しにイメージを作ってみますか。
docker build -t <イメージ名> <Dockerfileのディレクトリ>で実行してみる(<イメージ名>:<タグ名>でタグをつけることができます)。

# 作成したDockerfileと同じディレクトリにいるはずなので"."でおk
$ docker build -t test .
Sending build context to Docker daemon  2.048kB
Step 1/1 : FROM ubuntu:latest
latest: Pulling from library/ubuntu
d3938036b19c: Pull complete 
a9b30c108bda: Pull complete 
67de21feec18: Pull complete 
817da545be2b: Pull complete 
d967c497ce23: Pull complete 
Digest: sha256:9ee3b83bcaa383e5e3b657f042f4034c92cdd50c03f73166c145c9ceaea9ba7c
Status: Downloaded newer image for ubuntu:latest
 ---> c9d990395902
Successfully built c9d990395902
Successfully tagged test:latest

まあまあ時間かかりました。

ちゃんとDockerfileを元にイメージが作成されているか確認してみる。

$ docker images
REPOSITORY              TAG                IMAGE ID               CREATED           SIZE
test                                latest              c9d990395902        2 days ago          113MB
ubuntu                           latest              c9d990395902        2 days ago          113MB

できてますね。

他のディレクトリにあるDockerfileを指定する時は、ディレクトリパスをdocker buildの最後に書いてあげてください。

今書いたDockerfileを元に別のイメージ名にしてdocker buildしてみると、前よりかなり早くbuildが完了するはず。
これは、ubuntu:latestベースイメージがローカル環境にダウンロードされているためです。

同じイメージを使用するときはかなり早くbuildできます。

RUN命令

コンテナ上で実行するコマンドの命令です。
CentOS系のyumUbuntu系のapt-getを元に検索かけていけばいいと思いますよ(多分)。

さっきのイメージを元にApacheを入れてみたいと思います。

FROM ubuntu:latest

# apt-getパッケージ管理のupdateとapache2のインストール
RUN apt-get update && apt-get install -y apache2 

aptコマンドは使えませんでした。
↑ いけたけど、WARNING: apt does not have a stable CLI interface. Use with caution in scripts.が出てあんま推奨されてないっぽい。

じゃあbuildしましょう。

# リビルドするときはタグ名を後ろにつけたらおk
$ docker build -t test:latest .
・
・
・
Step 1/2 : FROM ubuntu:latest
 ---> c9d990395902
Step 2/2 : RUN apt-get update && apt-get install -y apache2
 ---> Using cache
 ---> 5a2551cf2ad8
Successfully built 5a2551cf2ad8
Successfully tagged test:latest

Apacheインスコが終了しました。

ちょっと確認

本当に入っているかどうか、コンテナの中に入って確認してみます。

$ docker run -it c9d990395902 /bin/bash
# 

これでさっきのイメージIDを元にコンテナの中に入れます。

# apache2 -v
Server version: Apache/2.4.18 (Ubuntu)
Server built:   2017-09-18T15:09:02

ちゃんとApache入ってました\(^o^)/

ここでctrl + p + qを押せばコンテナを起動したまま出ることができますが、今回はその必要もないのでexitコマンドで出ます。
exitだとコンテナ起動と終了を一緒にやってくれます。

ちなみに

直接コンテナに入ってから、apt-getで何かパッケージをインスコした場合、exitで出てしまうとそのインスコはなかったことになります。

これは、imageがbuildした際の状態を保っているからです。

なので、「あれ〜この前インスコしたのになぁ〜」ってなったときはこの可能性が多いです。
要注意です。まじで。

CMD命令

デーモン実行。
イメージを元に生成したコンテナ内でコマンドを実行するために使うやつ。

ちなみにこいつはDockerfile内で一つしかかけない。複数書いた場合は、最後のだけが実行される。

さっきのDockerfileの最後に、Apacheサーバーを立てるコマンドを記載してみます。

FROM ubuntu:latest

# apt-getパッケージ管理のupdateとapache2のインストール
RUN apt-get update && apt-get install -y apache2

# デーモン起動
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

ここでちょっと詰まったのですが、デーモン起動の際に/usr/sbin/apache2では起動しませんでした。
要注意です。

CentOSの場合は/usr/sbin/httpdです。

コンテナを起動

docker runでポート指定(-pオプション) & デタッチド(-dオプション)で起動します。

$ docker run -d -p 80:80 test

or

$ docker run -p 80:80 -d test

長い文字列が出ると思います。
なにか問題があればメッセージが出るはず。

本当に起動してるか確認しましょー。

docker psコマンドで。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
78fe3aafeada        test                "/usr/sbin/apachectl…"   4 seconds ago       Up 3 seconds        0.0.0.0:80->80/tcp   nervous_morse

動いてなければここで表示されないです。 今回はちゃんと表示されているので問題なしです。

特定のものだけ表示したい場合はフォーマットを指定すればおk。
例えばこんな感じ。

$ docker ps --format={{.Image}} {{.Command}} {{.Ports}}

こうすれば、イメージ名と実行したコマンド、ポートが表示されます。参考程度に。

画面の確認

ポートを80 -> 80に開放しているので単純にlocalhostでアクセスできます。

f:id:rdwbocungelt5:20180416101239p:plain

問題なさげ!

終わり

次回はファイルの追加やボリュームの指定、ポートのエクスポート等を簡単なDockerfileを元に作成したいと思います。

みんなDockerfileかけるようになろう(自問自答)。

ubuntuで初めてのDockerfile

今まで人が作ったDockerfileを使ってdocker buildしていてほとんど触れていなかったのですが、それもDockerfileを作るのが難しいという勝手な苦手意識からでした。

ですがそうも言っていられないので、もっとdockerとお友達になるために超簡単なDockerfileを作成してみたいと思います。

環境

  • ubuntu16.04.1(elementary OS 0.4.1 Loki)
  • docker 17.12.0-ce

予想以上に簡単だった

最近Linuxに触れたからというのもあるとは思うのですが、結構簡単でした。

UNIXコマンドをDockerfileに書くことが多いので、Linuxの知識がある前提です。
Macでも同じようなコマンドが使えるのでLinuxを触っておいて損はないと思います。

てか、MacubuntuやらCentOSやらのコンテナ立ててシェルに入ってコマンドの練習すればいいんじゃないですかね。

winは知らん。

Dockerfileを作成する

それぞれ命令の意味はリファレンスが一番わかり易いと思います。

Dockerfile リファレンス — Docker-docs-ja 17.06.Beta ドキュメント

なんか適当なディレクトリを作ってそこにDockerfileを作成します。

$ mkdir ~/docker-pratice && cd !!$ && touch Dockerfile

ベースイメージをCentOS7にしてapacheでサーバーを立ててみます。

$ vim Dockerfile

FROM centos:centos7

RUN yum install -y httpd

CMD ["usr/sbin/httpd", "-D", "FOREGROUND"] 

多分これでおk。単純にCentOS上でapacheをインストールしてサーバー立てる命令を入れただけ。

ビルドするぞお

$ docker build -t docker-practice .
・
・
・
Complete!
Removing intermediate container 1f221c2502d5
 ---> 328e4875d499
Step 3/3 : CMD ["usr/sbin/httpd", "-D", "FOREGROUND"]
 ---> Running in 20abda19727c
Removing intermediate container 20abda19727c
 ---> 9f2a89281a6a
Successfully built 9f2a89281a6a
Successfully tagged docker-practice:lates

ビルド成功したのでイメージが作成されているか確認。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker-practice     latest              9f2a89281a6a        52 seconds ago      334MB

いけてますね\(^o^)/

作成したdockerイメージを起動する

先ほどのイメージでapacheコンテナを立てます。デタッチドでポートを指定して起動すれば行ける。

$ docker run -d -p 80:80 docker-practice

本当に起動しているのかわからんので一応確認。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
754fab174a33        docker-practice     "usr/sbin/httpd -D F…"   10 seconds ago      Up 9 seconds        0.0.0.0:80->80/tcp   gifted_boyd

おお動いてますね。

これでlocalhostにアクセスしてみる。

f:id:rdwbocungelt5:20180411115238p:plain

いけました\(^o^)/

最後に

立てたサーバーのコンテナは閉じるのを忘れないように。

$ docker stop 754fab174a33
#=> docker psで出てきたコンテナID

とりあえずここまで出来たらDockerfile作成できるって言っていいんじゃね?とか偉そうなこと思ってみたりする。

ubuntu(elementary OS)16.04.1へdocker-composeをインストール

smot93516.hatenablog.jp

前回のつづき的な感じです。

というか書き忘れてました\(^o^)/

リファレンスの言うとおり

以下を参照。

Docker Compose のインストール — Docker-docs-ja 17.06.Beta ドキュメント

最新のdocker-composeをcurlで取ってきます。

1.21.0-rc1がプレリリースされてますが安定しているかわかんないので一個前のやつにします。

github.com

$ curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
bash: /usr/local/bin/docker-compose: 許可がありません

許可がないみたいなので、sudoでやっちゃう。

$ curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` > sudo /usr/local/bin/docker-compose
#=> まあまあ時間かかる

いけた!

docker-composeに対して実行権限を与えます。

$ chmod +x /usr/local/bin/docker-compose

ここでchmod: '/usr/local/bin/docker-compose' にアクセスできません: そのようなファイルやディレクトリはありませんと言われました。

見てみると、docker-composeファイルが存在しない。

てなわけで、root権限でcurlします。

$ sudo -i

# curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

# chmod +x /usr/local/bin/docker-compose

# exit  #=>root権限から抜ける

確認

$ docker-compose -v
docker-compose version 1.20.1, build 5d8c71b

無事docker-composeが入りました。

引き続きdocker教科書をやっていきまっす。

ubuntu(elementary OS)16.04.1へdockerをインストール

今更ですが、新しいPCでもdockerの環境が必要となってきたので構築しました。

dockerリファレンスを参考にやっていきます(手順は全くそのままです)。

今回はDockerCE(コミュニティ版)をインスコしていきますよ。

URL http://docs.docker.jp/engine/installation/linux/docker-ce/ubuntu.html

まずは必要なパッケージをインストール

httpsを通してaptが使えるようにします。

$ sudo apt install \
> apt-transport-https \
> ca-certificates \
> curl \
> software-properties-common

リファレンスの方ではapt-getを使っていますが、諸事情によりaptコマンドです。

「再起動が必要」とか言ってくるかもしれないですが、スルーです。

こういった記事があるので参照するといいかもね(しらんけど)。

linuxfan.info

DockerのGPG鍵の追加

curlで取ってくる。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
OK

OKと返ってきた(よーわからんけど)。

fingerprintやらがあるらしいので確認してみる。

$ sudo apt-key fingerprint 0EBFCD88
pub   4096R/0EBFCD88 2017-02-22
      フィンガー・プリント = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub   4096R/F273FCD8 2017-02-22

9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88がちゃんと返ってきました。よかったぁ。

dockerの安定版を設定する

まずは。自分のubuntuが32bitなのか64bitなのか確認。

僕の場合は64bitなのでamd64にのっているコマンドを打ちます。

一応確認方法は以下

$ uname -a
LinuxHP-Spectre-x360-Convertible-13-ac0XX 4.13.0-38-generic #43~16.04.1-Ubuntu SMP Wed Mar 14 17:48:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

x86_64とかamd64と書かれていれば64bit、i686とか書かれていれば32bit。

上のがわかりにくければ以下のコマンド。

$ getconf LONG_BIT
64

32bitであれば32と出てくるはずです(しらんけどな)。

amd64用のコマンド

$ sudo add-apt-repository \
> "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
>    $(lsb_release -cs) \
>    stable"

多分これでおk。

dockerCEのインスコ

aptを更新する。

$ sudo apt update
ヒット:1 http://jp.archive.ubuntu.com/ubuntu xenial InRelease
ヒット:2 http://jp.archive.ubuntu.com/ubuntu xenial-updates InRelease                                                                                                                         
無視:3 http://dl.google.com/linux/chrome/deb stable InRelease                                                                                                                                 
ヒット:4 http://jp.archive.ubuntu.com/ubuntu xenial-backports InRelease                                                                                                                       
ヒット:5 http://dl.google.com/linux/chrome/deb stable Release                                                                                                                         
ヒット:7 http://security.ubuntu.com/ubuntu xenial-security InRelease                                                      
ヒット:8 http://ppa.launchpad.net/elementary-os/stable/ubuntu xenial InRelease              
無視:9 https://download.docker.com/linux/ubuntu loki InRelease                                                         
取得:10 http://packages.elementary.io/appcenter xenial InRelease [6,128 B]                                             
エラー:11 https://download.docker.com/linux/ubuntu loki Release                                
  404  Not Found
ヒット:12 http://ppa.launchpad.net/elementary-os/os-patches/ubuntu xenial InRelease
取得:13 http://packages.elementary.io/appcenter xenial/main amd64 DEP-11 Metadata [63.4 kB]                             
ヒット:14 http://ppa.launchpad.net/webupd8team/java/ubuntu xenial InRelease                            
ヒット:15 https://packagecloud.io/slacktechnologies/slack/debian jessie InRelease                      
パッケージリストを読み込んでいます... 完了
E: リポジトリ https://download.docker.com/linux/ubuntu loki Release には Release ファイルがありません。
N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。

https://download.docker.com/linux/ubuntu 上記URLから404が返ってきてるんですけど。イミフ。

一旦再起動してみた

ダメでした\(^o^)/

なので、こちらを参考にしてみてubuntu最新のdocker-ceをインスコします。

ubuntu17.10にdockerをインストールする方法 : 試行錯誤な日々

まずはリポジトリの削除

add-apt-repository-rオプションをつけるとリポジトリを削除できます。んで、zestyってやつが最新みたいなのでそれを指定してリポジトリを作ってみる。

$ sudo add-apt-repository -r "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
> $(lsb_release -cs) \
> stable"

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
>    zesty \
>    stable"

これでおk。

sudo apt updateだ

$ sudo apt update
ヒット:1 http://jp.archive.ubuntu.com/ubuntu xenial InRelease
ヒット:2 http://jp.archive.ubuntu.com/ubuntu xenial-updates InRelease                                                                                                                         
無視:3 http://dl.google.com/linux/chrome/deb stable InRelease                                                                                                                                 
ヒット:4 http://jp.archive.ubuntu.com/ubuntu xenial-backports InRelease                                                                                                                       
取得:5 https://download.docker.com/linux/ubuntu zesty InRelease [49.8 kB]                                                                                                                     
ヒット:6 http://dl.google.com/linux/chrome/deb stable Release                                                                                                                                 
ヒット:8 http://ppa.launchpad.net/elementary-os/stable/ubuntu xenial InRelease                                                                                                        
取得:9 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]                                                                          
取得:10 http://packages.elementary.io/appcenter xenial InRelease [6,128 B]                                                                             
取得:11 https://download.docker.com/linux/ubuntu zesty/stable amd64 Packages [2,477 B]                                             
ヒット:12 http://ppa.launchpad.net/elementary-os/os-patches/ubuntu xenial InRelease                                               
取得:13 http://packages.elementary.io/appcenter xenial/main amd64 DEP-11 Metadata [64.1 kB]                                                              
ヒット:14 http://ppa.launchpad.net/webupd8team/java/ubuntu xenial InRelease                                                             
ヒット:15 https://packagecloud.io/slacktechnologies/slack/debian jessie InRelease
225 kB を 1秒 で取得しました (117 kB/s)
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています       
状態情報を読み取っています... 完了
パッケージはすべて最新です。

いけたぜぇ。

以下手順通りやっていく。

$ sudo apt install docker-ce

$ docker -v
Docker version 17.12.0-ce, build c97c6d6

無事docker-ceが入りました\(^o^)/

$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete 
Digest: sha256:97ce6fa4b6cdc0790cda65fe7290b74cfebd9fa0c9b8c38e979330d547d22ce1
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

hello-worldもできましたよっと。

引き続きdockerの勉強をやっていきますb

android studioでkotlinのバージョンをあげたらエラー出るので困った

android studioを立ち上げた時にポップアップでkotlinのupdateが出てきたので、なにも気にせずupdateしました。

すると。。。

outdated kotlin runtime

f:id:rdwbocungelt5:20180316191702p:plain

なんか出た。

とりあえずUpdate Runtimeを押してみる。

f:id:rdwbocungelt5:20180316191822p:plain

はあ。。。

自動でkotlinバージョンを変えることはできないので手動でやらないといけないっぽいです。

まずどこを見たか

Gradle Script配下のbuild.gradle(Project:~~)を確認してみます。

f:id:rdwbocungelt5:20180316192026p:plain

kotlinのバージョンは1.1.51と。

実際どうなってんでしょうね。

f:id:rdwbocungelt5:20180316192403p:plain

Tools -> kotlin -> Configure Kotlin Plugin Updatesで見れました。

その後にChecks for updates nowをクリックしてちょっとすると出てきます。

...バージョン違いますね。

てなわけで修正

f:id:rdwbocungelt5:20180316192655p:plain

ext.kotlin_versionを今のバージョンに変えてあげます。

1.1.51から1.2.30へ修正。

すると上になんか出てきます。Sync Nowをクリック。

問題なければ成功します。以下がそれ。Grandle Consoleに出てきます。

f:id:rdwbocungelt5:20180316193131p:plain

おわり

とりあえずいけましたー

すすめるごとにエラー出るので頑張る

【雑記】ubuntuでスーファミやってみた

f:id:rdwbocungelt5:20180321112240p:plain

タイトル通りです。

せっかくの祝日、久しぶりにスーパーマリオRPGがやりたくなったのでやってみました。

本当はSnes9xっていうエミュレーターを入れたかったんですが、やり方がよくわからない早くゲームをしたかったのでZsnesというエミュレーターをいれました。

環境

  • ubuntu 16.04.1 (elementaryOS)

準備

至って簡単です。

以下のコマンドで必要なものが入ります。

$ sudo apt install zsnes

なんかいっぱい依存関係のパッケージが入りました。

ジョイパッドの設定

いつもお世話になっているのがこの子。

f:id:rdwbocungelt5:20180321101556j:plain

buffaloのスーファミコントローラーです。

iBUFFALO USBゲームパッド 8ボタン スーパーファミコン風 グレー BSGP801GY

専用のドライバを入れます。

$ sudo apt install joystick

あと、キー配置とか変更したいときにGUIで操作できるやつも入れちゃいます。

$ sudo apt install jstest-gtk

これでおk。

ちょっと起動してみる

Zsnesのインストールがうまくいっていればアイコンが表示されます。

f:id:rdwbocungelt5:20180321094910p:plain

開くとこんな感じ。

f:id:rdwbocungelt5:20180321095058p:plain

開いた瞬間若干ノイズが入りました。

やっぱり他の記事でも見たとおり音質はあまり良くないみたいですね〜。

なのでそれっぽいSDKをいれます。

$ sudo apt install libsdl1.2debian-oss

これで一度PC再起動します。

起動したら以下のコマンドをターミナルで打って起動するらしい。

$ zsnes -ad sdl

解像度&ジョイパッドの設定

※ここからはジョイパッドを接続した状態で進めていってください。Zsnesにジョイパッドが認識されていなければZsnesを再起動し、再度ジョイパッドを接続してから行ってください。

まず解像度の設定。「option」→「video」を選択します。

f:id:rdwbocungelt5:20180321103505p:plain

するとよくわからん画面が出てくる。

f:id:rdwbocungelt5:20180321103557p:plain

とりあえずSかRのやつを選んでたらよさ気。Fはフルスクリーンモードらしいのでちょっと不便かなと思ってWがついてるやつにしました。

これくらいかな。

f:id:rdwbocungelt5:20180321104106p:plain

次にジョイパッドの設定。「option」→「input」を選択。(その前に)

f:id:rdwbocungelt5:20180321104626p:plain

するとそれっぽい画面が出てきます。

f:id:rdwbocungelt5:20180321104754p:plain

手順通りいきます。upの枠を選択。するとupで使用するボタンを押せと出てくるはず。

f:id:rdwbocungelt5:20180321105053p:plain

言われたとおり、ジョイパッドの上十字キーを押下。

f:id:rdwbocungelt5:20180321105334p:plain

ジョイパッドの上十字キーが割り当てられました!(J03ってなってますね)

同じように全部割り当てます。

f:id:rdwbocungelt5:20180321105705p:plain

こんな感じですね。キーボードのTをターボに割り当ててます。面倒くさい戦闘のときとかに使います。

後で気づいたんですが、「set keys」を押したらupから順に割り当てていくことができますね。枠を選択するの面倒なので、こっちのほうが便利です。

saveの保存先指定

デフォルトがどこになっているかわからないですが、作っていきます。

おそらくですがホームディレクトリに.zsnesフォルダができているはずです。その配下にsaveフォルダを作成します。

$ cd ~/.zsnes

$ mkdir save

$ cd save

$ pwd
/home/user/.zsnes/save
## userのところは表示されたものに適宜置き換えてくださいね!!

次にZsnesで「option」→「path」を選択。

f:id:rdwbocungelt5:20180321110952p:plain

savesとかかれているところに先ほどのパスを入力(なぜか全角になるけど気にしないことにする)。

f:id:rdwbocungelt5:20180321111047p:plain

これで多分準備おk!!!!!

ゲームを起動!

あらゆる手段で用意しておいたROMファイルを読み込みます(ROMはもちろん吸い出してね)。

僕の場合は/home/document/snesrom配下にromファイルを入れるようにしました。好きなようにしていいと思います。

f:id:rdwbocungelt5:20180321112014p:plain

FFVが開きました!!!

f:id:rdwbocungelt5:20180321112240p:plain

マリオRPGも!!

終わりに

escボタンを押せば止まってメニューが出てきます。

f:id:rdwbocungelt5:20180321112404p:plain

快適なゲームライフをどうぞ。


参考

http://d.hatena.ne.jp/seTo/20091117/1258470925

http://www.geocities.co.jp/zsnes_123/zsneshelp/help.html