- 投稿日:2021-03-15T22:14:42+09:00
【Rails】Webpacker::Manifest::MissingEntryErrorの対処法【Docker】
環境
Ruby 2.6.6
Rails 6.1.1
Docker 20.10.2はじめに
Docker環境でRailsアプリを開発中に、サーバーを起動しhttp://localhost:3000/にアクセスすると発生。
Rails6ではwebpackerが標準サポートとなり、webpakerのインストールにはパッケージマネージャーであるyarnが必要。エラーの解決方法
1)まずyarnで必要なライブラリをインストールする
$ bin/yarn2)次にwebpackでJavaScriptのコンパイルをする
$ bin/webpack3)最後にJS配信用のdevサーバーを起動する。(自動でwatch&コンパイルされる)
$ bin/webpack-dev-serverこれをした後に一応docker-compose up -dで再起動し、localhost:3000にアクセスすると表示されました!
2と3はどちらかだけでも良いかも??参考
- 投稿日:2021-03-15T21:31:21+09:00
Docker使ってみた。
Dockerの仕様。
Dockerfile(アプリコード・ライブラリー・ベースイメージ)
↓(作成)
イメージ
↓(作成・起動)
コンテナ
イメージを作成・作るコマンド
docker image build -t sample/webrick:latest .-t はタグの名前をつける。今回はsample/webric
:latest はバージョン情報
. は今いるディレクトリイメージができたか確認コマンド
docker image lsコンテナの作成・起動コマンド
docker container run今回はこちらのコマンドでやった。
docker container run -p 8000:8000 --name webrick sample/webrick:latest-p 8000:8000 はポート番号の指定。
ローカルの8000ポートをdockerの8000ポートに接続するよー。—name webrick コンテナの名前
sample/webrick:latest イメージの名前とバージョンを追記
コンテナの起動状況の確認コマンド
docker container ls起動中であれば以下のように出てくる。
******-mbp:docker eryumeng$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 87760adc745a sample/webrick:latest "ruby /var/www/main.…" 39 hours ago Up 39 hours 0.0.0.0:8000->8000/tcp webrick ******-mbp:docker eryumeng$また起動中のも停止中のも確認するならば、
docker container ls -aコンテナの停止
docker container stop webrick ///webrickはコンテナの名前コンテナ削除
docker container rm webrick ///webrickはコンテナの名前ログを確認
docker container logs webrick ///webrickはコンテナの名前起動中に他のコマンドを使用したい時
docker container exec webrick ruby -v ///webrickはコンテナの名前・またruby -vを使用。使用していないコンテナの削除
docker system prune -a //今使っていないものを一気に削除Dockerfile
CMD [ "/bin/bash" ]コンテナ起動(あと色々)
docker container run -it -p 4567:4567 --name sinatra -v ${PWD}/src:/var/www sample/sinatra:latest-it は上記のCMD [ "/bin/bash" ]を実行するために。
${PWD}/src:/var/www こちらをしないと新しくファイルが作られた時に、もう一度イメージから作成しないといけなくなる。またリアルタイムでファイルの変更が見られる
src/var/wwwを参照しますよーと言っている。
上記のならないように。
Dockerfile
FROM ruby:2.7 WORKDIR /var/www COPY ./src /var/www RUN bundle config --local set path 'vendor/bundle' RUN bundle install CMD ["bundle","exec", "ruby", "app.rb"]イメージを作り。
docker image build -t sample/sinatra:latest .コンテナ起動とローカルサーバー起動
docker container run -p 4567:4567 --name sinatra -v ${PWD}/src:/var/www sample/sinatra:latest学んだことで次はDockerでRailsを構築していきまーす。
今回はここまで。
ありがとうございました。
- 投稿日:2021-03-15T21:15:16+09:00
【未経験者】PHPとLaravelそれぞれで類似ポートフォリオ作ってみた
はじめに
こんにちは、おーもとと申します。エンジニアに転職をするため学習している初学者です。
私は車が好きで、「近年の若者の車離れ」という問題にフォーカスしたアプリを制作しようと思いました。
色々あって、生のPHPとLaravelの二通りの類似ポートフォリオを制作したので、記事にしてみました。制作背景
若者が車を持たない理由には様々な理由があると思いますが、
「欲しいと思えるほど魅力を感じる車に出会っていないからなのでは?」
と思い、
・かわいいやかっこいいというスタイル
・大きさ
・国産か外車か
・アウトドアや街乗りという用途
これらの項目に当てはまる車を、結果として表示するアプリを制作することにしました。
(これらの特徴は全て私が定めているため、投票などにより特徴を決める機能をつけたいです)11月 PHPでアプリ開発
10月からPHPの学習を始めていたので、そのアプリはPHPで制作しました。
カーセンサーAPIを使用して、車の情報を取得します。
解説動画:https://www.youtube.com/watch?v=ZXbgUtjxKM8
機能
ユーザー登録関連
⚪︎ ログイン
⚪︎ ログアウト
⚪︎ 新規登録
⚪︎ ユーザー件数を表示車の検索機能
⚪︎ 車の見た目→「かわいい」「かっこいい」「シンプル」「おしゃれ」「レトロ」
⚪︎ 車のサイズ→「ふつう」「すごくおおきい」「おおきい」「ちいさい」
⚪︎ 車の製造国→「国産車」「外車」
⚪︎ 車の用途 →「街乗り」「アウトドア」「スポーツ」カーセンサーAPI連携
⚪︎ DBにある車情報と合致した車情報を取得
⚪︎ cronでキャッシュファイル自動生成苦労した点
検索結果の画像表示高速化
検索の度にAPIからデータを取得していたので、電波の悪い場所では結果の表示に1分以上かかっていました。
そのため、毎日APIからデータを取得するバッチ処理をcronで自動化し、キャッシュ化することで、ユーザーにストレスのない速度で結果を表示させることができました。EC2へデプロイ
公式ドキュメントを参考にしデプロイしました。
その際、インフラの知識が不足していたため、デプロイに一週間以上かかりました。APIのサービス終了!!
転職活動を始めようとした際、一週間後にカーセンサーAPIサービスが終了すると知りました。
急いで提供元へ問い合わせたところ、
「完全に提供が終了すること」「24時間以上のキャッシュデータの保有も禁止」、ということを告げられました。
その後、他の車データAPIの提供元を調べましたが他にありませんでした。
画像だけでもどうにかならないかと思い、ト◯タや◯産などの画像利用規約を確認しましたが、
営利目的ではない&提供元のURLなどの情報を記載する
としても、利用は禁止でした。
そのためLaravelの勉強も兼ねて、画像問題を解決できるアプリの制作に取り掛かりました。1月 Laravelでアプリ開発
12月末からLaravelの学習を始め、1月からアプリの制作に取り掛かりました。
前回のPHPで制作したポートフォリオとの違い
画像の取得にAPIを用いていましたが、ユーザーから愛車の画像を提供してもらう方針に変更し、機能の追加などを行いました。
完成
アプリのURL:https://pf-kurushira.com
(スマホサイズにも対応しています)
使用技術
使用言語
⚪︎ HTML
⚪︎ CSS
⚪︎ SCSS
⚪︎ PHP 7.4.14
⚪︎ Laravel 6.20.11インフラ
⚪︎ Github Actions 自動デプロイ
⚪︎ Docker 20.10.2 / docker-compose 1.27.4
⚪︎ nginx 1.18
⚪︎ mysql 5.7.31 / PHPMyAdmin
⚪︎ AWS ( EC2, ALB, ACM, S3, RDS, Route53, VPC, EIP, IAM)インフラ構成図
機能一覧
機能 概要 ユーザー管理機能 新規登録・ログイン・ログアウトができます 簡単ログイン機能 ログイン画面のゲストログインをクリックすることで、ゲストユーザーとしてログインできます おすすめ車種検索機能 条件を選択すると、それにあった車種一覧を表示します 検索履歴機能 直近の検索履歴・結果を表示します 画像提供機能 ユーザーの所有している車の画像を提供できます 提供した画像の削除機能 提供した画像を削除できます 提供画像一覧表示機能 自身が提供した画像一覧を表示します。 ユーザー情報編集機能 ご登録いただいたユーザー名・メールアドレスを変更できます Twitterシェア機能 車の検索結果をツイートすることができます レスポンシブ機能 スマホサイズ(320~540px)にも対応しています DB設計
各テーブルについて
テーブル名 説明 users 登録ユーザー情報 cars 登録車情報 histories 直近の検索結果の情報 car_images 提供画像の情報 苦労した点
ユーザー情報編集ページのバリデーション
LaravelのAuth機能のバリデーションを使いまわそうとしましたが、ブラックボックスになっていて苦労しました。
→新しくバリデーションを作成。S3からオブジェクト削除
画像の削除機能でDBからだけでなく、S3からもオブジェクトを削除する必要があり苦労しました。
→解決方法を記事にしました
laravel6でS3に画像アップロード&削除今後の課題
機能
機能 概要 英訳機能 Google Cloud Translation APIを利用して翻訳 通報機能 ユーザーの投票で不適切な画像を削除 技術
⚪︎ テスト
⚪︎ Dockerを用いた本番環境の構築
⚪︎ ECSへデプロイ参考にした学習教材など
PHP/Laravel
・【Udemy】PHP+MySQL(MariaDB) Webサーバーサイドプログラミング入門
・【書籍】詳細!PHP 7+MySQL 入門ノート
・【書籍】PHPフレームワークLaravel入門 第2版
・【書籍】PHPフレームワーク Laravel実践開発
・Laravel6.0(PHP7.3)+MySQL+Laradockで簡易的なECサイトを作るAWS
・【Udemy】AWS:ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得
Docker
・【超入門】20分でLaravel開発環境を爆速構築するDockerハンズオン
さいごに
生のPHPでひとつPFを制作したのは、基礎力が身についたので良かったと思います。
今回ポートフォリオ完成を優先したため、ECSではなくEC2へデプロイしました。
まだ課題も多いですが、ブラッシュアップしていきたく思っています。
長くなりましたが、ここまで読んでくださりありがとうございました!!
- 投稿日:2021-03-15T20:46:31+09:00
Docker,PHP,MySQLで構築した環境におけるDBホスト名の調べ方
以下の記事を参考に、Docker,PHP,MySQLの開発環境を構築した。
記事の手順にしたがって開発環境は構築できたのだが、mysqliでDBに接続する際に、ホスト名が分からない事態に遭遇。
ホスト名は、DBに接続して以下のコマンドを入力する事で確認できる。
mysql> show variables like 'hostname';
今回はDocker環境なので、DBコンテナに入ってから上記コマンドを入力する必要がある。
入力するコマンドは以下の通り。// DBコンテナに接続 docker-compose exec db bash // DBに接続 root@2918fd6815ab:/# mysql -u root -p → パスワードを入力 // ホスト名を表示 mysql> show variables like 'hostname';以上のコマンドで、ホスト名を確認できる。
- 投稿日:2021-03-15T20:05:38+09:00
nvidia-dockerをdocker-composeで動かす
はじめに
- 動作環境
- OS: Ubuntu 20.04.2 LTS (focal)
- GPU: GeForce GTX 960
- 前提
- docker, docker-compose, nvidia-docker-runtime は導入済み
docker-compose.yamlの書き方例(ver3系)
docker-compose.yamlversion: '3.8' services: sample: image: nvidia/cuda:11.2.1-base command: nvidia-smi deploy: resources: reservations: devices: - driver: nvidia capabilities: [utility, compute, video]各パラメータの詳細は公式を参考に.
動作確認
$ docker-compose version docker-compose version 1.28.5, build unknown : $ docker-compose up Starting sample_sample_1 ... done Attaching to sample_sample_1 sample_1 | Mon Mar 15 10:05:43 2021 sample_1 | +-----------------------------------------------------------------------------+ sample_1 | | NVIDIA-SMI 460.39 Driver Version: 460.39 CUDA Version: 11.2 | sample_1 | |-------------------------------+----------------------+----------------------+ sample_1 | | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | sample_1 | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | sample_1 | | | | MIG M. | sample_1 | |===============================+======================+======================| sample_1 | | 0 GeForce GTX 960 Off | 00000000:0E:00.0 Off | N/A | sample_1 | | 30% 53C P2 38W / 130W | 652MiB / 4042MiB | 46% Default | sample_1 | | | | N/A | sample_1 | +-------------------------------+----------------------+----------------------+ sample_1 | sample_1 | +-----------------------------------------------------------------------------+ sample_1 | | Processes: | sample_1 | | GPU GI CI PID Type Process name GPU Memory | sample_1 | | ID ID Usage | sample_1 | |=============================================================================| sample_1 | +-----------------------------------------------------------------------------+ sample_sample_1 exited with code 0docker-composeのバージョンに注意
docker-composeのバージョンが古い場合、以下のようなエラーが出る.
$ docker-compose version docker-compose version 1.25.0, build unknown : $ docker-compose up ERROR: The Compose file './docker-compose.yaml' is invalid because: services.sample.deploy.resources.reservations value Additional properties are not allowed ('devices' was unexpected)docker-composeのGitHub によると、1.28から上の書き方に対応した模様.
(作者はaptで入れたら1.25だったので、とりあえずpipで入れなおしました)
ver2系(おまけ)
ちなみに、ver2系では以下のように書く.
docker-compose.yamlversion: '2.4' services: sample: image: nvidia/cuda:11.2.1-base command: nvidia-smi runtime: nvidia environment: NVIDIA_VISIBLE_DEVICES: all NVIDIA_DRIVER_CAPABILITIES: utility,compute,videoただし、ver2系ではreplicas等がサポートされていない.
あと、コンテナのために環境変数 NVIDIA_* を入れるのも気持ち悪い(個人の感想です).
なので、どんどんver3形式で書いていきましょう.
- 投稿日:2021-03-15T19:32:03+09:00
Docker環境のLaravelアプリをHerokuデプロイした後、画像をS3を利用して表示できるようにする
概要
Docker、Laravel、Heroku、S3(AWS)の勉強がてら画像アップロードができる掲示板アプリを作ったのですが、S3での画像表示にてこずったので備忘録として記事にしました。
この記事はあくまで本番環境でS3を使用して画像表示をするための記事ですので、ローカル環境で画像アップロード機能が仕上がっている事が前提となります。
自分はこちらの記事を参考に画像アップロード機能を作りました↓
https://note.com/koushikagawa/n/n74380a1f3643アプリケーションについて
簡単な掲示板アプリです。
新規投稿ページです↑
詳細ページにて画像が表示されます↑
トップページには画像を表示しないので省略します。AWS
AWSの登録等は省略します。S3に移動しバケットを作成します。
バケット名を入力します↑
バケットの設定をこのようにして「バケットを作成」を押します。コード
画像アップロードに関係するコードを載せていきます。
create.blade.php<form action="/posts" method="post" enctype="multipart/form-data"> {{ csrf_field() }} <input type="file" name="image_url"> @if ($errors->has('image_url')) <div>{{ $errors->first('image_url') }}</div> @endif </form>postsテーブルの画像のカラム名もimage_urlにしています。変えた方がわかりやすかったかもしれないですね。
PostController.phppublic function store(request $request) { $post = new Post(); $post->body = $request->body; // ローカル // $time = date("Ymdhis"); // $post->image_url = $request->image_url->storeAs('public/post_images', $time.'_'.Auth::user()->id. '.jpg'); $image = $request->file('image_url'); $path = Storage::disk('s3')->putFile('/', $image, 'public'); $post->image_url = $path; $post->user_id = $id; $post->save(); return redirect()->to('/'); } public function show(Post $post) { $user_id = $post->user_id; $user = DB::table('users')->where('id', $user_id)->first(); return view('posts.detail', [ 'post' => $post, 'user' => $user, // ローカル // 'image_url' => str_replace('public/', 'storage/', $post->image_url) 'image_url' => $post->image_url ]); } public function update(request $request) { $id = $request->post_id; $post = Post::findOrFail($id); $post->body = $request->body; if($request->hasFile('image_url')) { // ローカル // Storage::delete('public/post_images/' . $post->image_url); // $time = date("Ymdhis"); // $post->image_url = $request->image_url->storeAs('public/post_images', $time.'_'.Auth::user()->id. '.jpg'); $image = $request->image_url; Storage::disk('s3')->delete($image); //画像削除 $path = Storage::disk('s3')->putFile('/', $image, 'public'); $post->image_url = $path; } $post->save(); return redirect()->to('/'); }detail.blade.php@if ($image_url) // ローカル // <img src="/{{ $image_url }}" width="250px" height="250px"> <img src="https://バケット名.s3.ap-northeast-1.amazonaws.com/{{ $image_url }}" width="250px" height="250px"> @endifローカルのコードも一応載せています。無視してもらって結構です。
HerokuにAWSの環境変数を設定
terminal% heroku config:set AWS_ACCESS_KEY_ID=◯◯◯◯◯◯◯◯◯◯ % heroku config:set AWS_BUCKET=バケット名 % heroku config:set AWS_DEFAULT_REGION=ap-northeast-1 % heroku config:set AWS_SECRET_ACCESS_KEY=△△△△△△△△△△アクセスキーとシークレットキーをそれぞれ入力します。
terminal% git push heroku mainこれで本番環境で画像が表示できました。
- 投稿日:2021-03-15T19:32:03+09:00
S3を利用して画像を表示できるようにする
概要
Docker、Laravel、Heroku、S3(AWS)の勉強がてら画像アップロードができる掲示板アプリを作ったのですが、S3での画像表示にてこずったので備忘録として記事にしました。
この記事はあくまで本番環境でS3を使用して画像表示をするための記事ですので、ローカル環境で画像アップロード機能が仕上がっている事が前提となります。
自分はこちらの記事を参考に画像アップロード機能を作りました↓
https://note.com/koushikagawa/n/n74380a1f3643アプリケーションについて
簡単な掲示板アプリです。
新規投稿ページです↑
詳細ページにて画像が表示されます↑
トップページには画像を表示しないので省略します。AWS
AWSの登録等は省略します。S3に移動しバケットを作成します。
バケット名を入力します↑
バケットの設定をこのようにして「バケットを作成」を押します。コード
画像アップロードに関係するコードを載せていきます。
create.blade.php<form action="/posts" method="post" enctype="multipart/form-data"> {{ csrf_field() }} <input type="file" name="image_url"> @if ($errors->has('image_url')) <div>{{ $errors->first('image_url') }}</div> @endif </form>postsテーブルの画像のカラム名もimage_urlにしています。変えた方がわかりやすかったかもしれないですね。
PostController.phppublic function store(request $request) { $post = new Post(); $post->body = $request->body; // ローカル // $time = date("Ymdhis"); // $post->image_url = $request->image_url->storeAs('public/post_images', $time.'_'.Auth::user()->id. '.jpg'); $image = $request->file('image_url'); $path = Storage::disk('s3')->putFile('/', $image, 'public'); $post->image_url = $path; $post->user_id = $id; $post->save(); return redirect()->to('/'); } public function show(Post $post) { $user_id = $post->user_id; $user = DB::table('users')->where('id', $user_id)->first(); return view('posts.detail', [ 'post' => $post, 'user' => $user, // ローカル // 'image_url' => str_replace('public/', 'storage/', $post->image_url) 'image_url' => $post->image_url ]); } public function update(request $request) { $id = $request->post_id; $post = Post::findOrFail($id); $post->body = $request->body; if($request->hasFile('image_url')) { // ローカル // Storage::delete('public/post_images/' . $post->image_url); // $time = date("Ymdhis"); // $post->image_url = $request->image_url->storeAs('public/post_images', $time.'_'.Auth::user()->id. '.jpg'); $image = $request->image_url; Storage::disk('s3')->delete($image); //画像削除 $path = Storage::disk('s3')->putFile('/', $image, 'public'); $post->image_url = $path; } $post->save(); return redirect()->to('/'); }detail.blade.php@if ($image_url) // ローカル // <img src="/{{ $image_url }}" width="250px" height="250px"> <img src="https://バケット名.s3.ap-northeast-1.amazonaws.com/{{ $image_url }}" width="250px" height="250px"> @endifローカルのコードも一応載せています。無視してもらって結構です。
HerokuにAWSの環境変数を設定
terminal% heroku config:set AWS_ACCESS_KEY_ID=◯◯◯◯◯◯◯◯◯◯ % heroku config:set AWS_BUCKET=バケット名 % heroku config:set AWS_DEFAULT_REGION=ap-northeast-1 % heroku config:set AWS_SECRET_ACCESS_KEY=△△△△△△△△△△アクセスキーとシークレットキーをそれぞれ入力します。
terminal% git push heroku mainこれで本番環境で画像が表示できました。
- 投稿日:2021-03-15T18:56:54+09:00
docker-composeの.envファイルの認識場所が変わった
どうやら最近、(おそらく2021/3/5リリースのdocker desktop for windows v3.2.1から)docker-composeの.envファイルの認識場所が変わったようです。特にVSCodeでRemote - Containersを使っている人は注意が必要です。
解決策
いままで
.env
ファイルはdocker-compose
コマンドを実行したときのディレクトリ(ワーキングディレクトリ)にある必要があったのですが、今度からはdocker-compose.yml
と同じ階層に保存してください。環境
備考 OS Windows10 docker desktop for windows 3.2.1 docker-compose 1.28.5 VSCode 1.54.1 Remote - Containers v0.163.2 前提知識
.env
ファイルとはdocker-compose.yml
中でホストの環境変数を使っているときに、ホストに使いたい環境変数が設定されていない場合の回避策として使えるファイルです。.env
ファイルについて書いた過去記事あるので参考にしてください。
変更点
いままでこの
.env
ファイルはdocker-compose
コマンドを実行したときのディレクトリ(ワーキングディレクトリ)にないと認識しなかったのですが、今度からはdocker-compose.yml
と同じ階層にないと認識しなくなったようです。例えば、
docker-compose.ymlweb: image: "webapp:${TAG}".envTAG=v1.5
の2つを
dc_test/ └ test_directory/ ├ .env └ docker-compose.ymlと同じディレクトリに保存すれば、
dc_test
階層からコマンドを打ったとしても、dc_test> docker-compose -f test_directory/docker-compose.yml config web: image: webapp:v1.5
と今まで通り使えます。
VSCodeのRemote Containerで.envファイルを使っている人
VSCodeでRemote - Containersを使って、
devcontainer.json
からdockerComposeFile
の項でdocker-compose.yml
を指定し、リモートコンテナを立ち上げていて、その際プロキシを設定するためなどに.env
ファイルを使っている方も多いと思います。いままではVSCodeのルートディレクトリに
.env
ファイルを置く必要があったと思いますが、今からは.envファイルはdocker-compose.yml
と同じフォルダに置くようにしてください。
- 投稿日:2021-03-15T16:40:55+09:00
Raspberry Piでデータの可視化をしてみる[Grafana]
Raspberry PiはLinuxベースのOSを乗せられる上に、ひと通りのセンサーが積まれていたりGPIOで容易にモジュールを接続できたりと、何かを測定するのにとても便利です。
csvやJsonなどテキスト形式のファイルに出力されることも多いと思いますが、せっかくのLinux環境なのでラズパイ内でデータの可視化ツールを動かせたら便利そうだなと考えました。
環境
Raspberry Pi 3B+/4B (Raspbian GNU/Linux 10 (buster) armv7l )DockerでデフォルトでインストールされるGrafanaは記事執筆時点(2021/03/15)で
7.4.3
です。準備
Dockerが入っていない場合はインストールしましょう。
$ curl -sSL https://get.docker.com | sh$ docker -v Docker version 20.10.5, build 55c4c88実行
いちいち
sudo
をつけて実行するのは煩わしいので、ログインユーザをgroupに入れて権限を与えておくと良いと思います。sudo docker run -d -p 3000:3000 grafana/grafanaこれで
localhost:3000
にアクセスするとこのような感じでみることができます私の場合はさらに、
- Grafanaでcsvを読み込むためのプラグインを導入したい
- ローカルにあるファイルをDockerコンテナ内から参照(マウント)したい
という2点をクリアしたかったので、以下のように追記して実行しました。sudo docker run -d -p 3000:3000 --name=grafana -e "GF_INSTALL_PLUGINS=marcusolsson-csv-datasource" -v /home/pi:/home grafana/grafanaGrafanaを操作する
ログインについて
初期状態ではID/PASSは
admin/admin
になっています。継続的にコンテナを運用するならば入力後に変更しておくと良いでしょう。データソースの選択
このバージョン(7.4.3)においては
Configuration(右側の歯車マーク)->Data Sources->利用するプラグインの選択('csv'を検索)->LocalファイルPathを入力
といった手順でソースを読み込みます。
この場合のPathはDocker内にマウントしているソースファイルの場所になります。
(私の例では/home/result.csv
)ダッシュボードの作成
データソースが読み込めたら左の+パネルより
Dashboard->Add new panel
と進み、
先ほど読み込んだcsvがデフォルトで表示されているはずなので、csvのヘッダー行に指定している要素を入力していきます。今回私が使ったデータは自宅のWifiのDL時の速度を計測したもので、
- 日時と日付が入力されているdate
のカラムをTime
型
- 実際の測定値が入ったdownload
のカラムをNumber
型
でそれぞれ読み込みSwitch to table view
をクリックすると
Y軸、X軸に対応して値がグラフが出力されます。なお、Edit画面右側の方でグラフの種類や軸(Axis)の調整ができます。
V7.4からはフォーカス時の横棒表示が使いやすくなったりしているみたいです。一度作成したpanelはドラッグ操作で細かい時間軸での表示などができます。
また、作成したダッシュボードはSave後、左上のShareボタンで(公開環境であれば)リンクを作成することができます。スマートフォン環境にも最適化された表示がされるので便利です。
issue
- 常に最新のデータを表示させるためにはどうしたらええんや...? ->last〇〇 で指定すると良さそう
- メトリクスの自動送信とかしたい
ちなみに
Google先生で検索してみると、 Grafanaの他には、
代替案 Grafana Datadog. ... Splunk. ... logstash. ... Graylog. ... Fluentd. ... Prometheus. ... Nagios Log Server. ... Scalyr.のような感じでデータ可視化ツールがあるよと教えてくれました。
この中のいくつかは今回活用したGrafanaのようにDockerイメージが提供されていて同じ使い勝手で利用できるものもあるかと思います。
(ただし、SplunkのようにARMv7用のイメージが提供されていなかったりするので注意)
それぞれのツール同士を連携させる方法もあったりしますのでご自身の好みで色々遊んでみると楽しいかと思います。
最近ではGoogle Data Studioも俄かに流行の兆しを見せていて、一層導入のハードルは下がってい流のではないでしょうか。こちらはBig Queryやメールへのメトリクス画像送信など自社サービスとの連携も強力です。それでは良いビジュアライズライフを!
参考にした記事
grafanaのcsvプラグインを使ってみた - 忘れそうな内容をメモしています
コンテナ起動時のオプション読み込みを参考にしました。10分で理解するGrafana - Qiita
DockerでのGrafana運用やPromehteusとの連携などもう少し詳しくまとめてあります。
- 投稿日:2021-03-15T16:19:11+09:00
Docker 初心者チートシート
Docker 初心者のためのチートシート
このページは随時更新していきます。
ターミナルでのコマンド一覧です。ログイン
$ docker loginPullする
$ docker pull {IMAGE_NAME:TAG_NAME}Docker imageのリストの確認
$ docker imagesコンテナに入る
// すでにあるコンテナに入る $ docker exec {CONTAINER_NAME} // 動いているコンテナに入る $docker exec -it {CONTAINER_NAME} bashRunの一覧
// imageからコンテナを作る $ docker run {IMAGE_NAME} // imageからコンテナを作ってから入る $ docker run -it {IMAGE_NAME:TAG_NAME} bash // すでにあるコンテナを指定してrun $ docker run --name {CONTAINER_NAME} -it {IMAGE_NAME:TAG_NAME} bashコンテナの確認
$ docker ps -aファイルの作成
touch {FILE_NAME}コンテナから出る
// 完全に出る $ exit // 「コンテナを動かしたままにしたい」「止めたくない」という場合 command + p + q (コマンドでなく、ショートカット)リスタート
$ docker restart {CONTAINER_NAME or ID}コミット
$ docker commit {CONTAINER_NAME or ID} {NEW_Docker_image_NAME}
- 投稿日:2021-03-15T15:38:10+09:00
Docker composeでngrokを簡単に使う方法(QOL爆上がりな件)
docker-composeで開発をしていて、お手元のスマートフォンでの確認や、他の人にサービスを見てもらう際に、
毎度デプロイすることは難あり。
そういった時に、ngrok
を使用すると、簡単にローカル環境を外部に一時的に公開することができる。今回はLaravelの開発においての使用とし、開発環境はdockerである。
laravelが8000ポートで、
データベースが3000ポートとしている。また、
brew install ngrok
を済ませていることが前提。手順
1 Dockerを起動しておく
docker-compose up -d2 ngrokを起動する
ngrok http 8000このコマンドでngrokが起動する。
この時の注意点は、
docker自体にngrokなど特に何もインストールする必要はなく、
起動したいサーバーのポート番号を指定する。laravelアプリは
localhost:8000
だから、
ngrok http 8000
となる。
データベースのポート番号、3000は指定する必要はないと確認している。そうすると、ngrokの起動画面に切り替わり、
forwarding
と記載されているurlが実際にchromeなどでアクセス
する際のurlになる。ngrokの使用を停止する時は、
controll + c
で止まる。これ使ってQOL爆上がりです。
- 投稿日:2021-03-15T14:42:23+09:00
Dockerで作成したLaravelで「bash: composer: command not found」と出たときの対処法
Dockerって環境構築が簡単に行えてすごく便利ですよね。
特にデータベースとかわざわざインストールしなくてもできてしまいますもんね。
そんなDockerで
composer
を使ってあるものをインストールしようとしたのですが、下記のようなエラーが起きました。bash: composer: command not foundDockerのコンテナ外では
composer
コマンドを打てるのですが、コンテナ内では打てませんでした。結論から言いますと、Dockerのイメージをビルドするときにcomposerをインストールすれば解決します。
Dockerのphpを構築する
Dockerfile
で以下の記述を加えて下さい。ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_HOME /composer ENV PATH $PATH:/composer/vendor/bin RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \ && php composer-setup.php \ && php -r "unlink('composer-setup.php');" \ && mv composer.phar /usr/local/bin/composer一応僕の
Dockerfile
のコードを載せておきますね。FROM php:7.4-fpm-buster COPY ./backend /work COPY ./docker/php/php.ini /usr/local/etc/php/php.ini LABEL maintainer="ucan-lab <info@u-can.tech>" SHELL ["/bin/bash", "-oeux", "pipefail", "-c"] # tinker(psysh) ARG PSYSH_DIR=/usr/local/share/psysh ARG PSYSH_PHP_MANUAL=$PSYSH_DIR/php_manual.sqlite ARG PHP_MANUAL_URL=http://psysh.org/manual/ja/php_manual.sqlite # timezone ARG TZ=Asia/Tokyo # composer ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_HOME /composer ENV PATH $PATH:/composer/vendor/bin RUN apt-get update && \ apt-get -y install git unzip libzip-dev libicu-dev libonig-dev libjpeg-dev libpng-dev libfreetype6-dev && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ docker-php-ext-install intl pdo_mysql zip bcmath && \ docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ && \ docker-php-ext-install gd # Install Composer RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \ && php composer-setup.php \ && php -r "unlink('composer-setup.php');" \ && mv composer.phar /usr/local/bin/composer # Install Node.js RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - \ && apt-get update \ && apt-get install -y nodejs RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime RUN apt-get install -y cronこんな感じでコンテナ内に入り、
composer -V
と打ちバージョンが返ってくれば成功です。以上、「Dockerで作成したLaravelで「bash: composer: command not found」と出たときの対処法」でした!
Thank you for reading
- 投稿日:2021-03-15T12:20:22+09:00
Docker環境構築後にVS Codeで「The git repository at 'Appディレクトリ' has too many active changes, only a subset of Git features will be enabled.」に見舞われる
環境
Ruby on Rails 6.0.3
ruby 2.6.3
MacOS Catalina 10.15.7困ったこと
ローカルでVS CodeでDockerのコンテナ作りをしていたら、VS CodeのメニューバーのSource Control(編集したファイルの変更前後を表示してくれるナイスなやつ)が
5k+
になって、そのうちgitが壊れました。それからというもの画面右下に下記メッセージが表示されるようになりました。
The git repository at 'Appディレクトリ' has too many active changes, only a subset of Git features will be enabled.
(意訳:gitリポジトリの変更が多すぎるから、一部のgit機能しか使えなくなってるよ。)
そして、左のメニューバーの編集したファイルの差異を示してくれる箇所が時計マークでワークしなくなり、左下にgitのブランチ名を表示してくれなくなりました。。。VS codeを再起動しても変わらずです。
実はこの問題に見舞われるのは2度目なのですが、1度目どう解決したかメモしておらず(LaravelのプロジェクトをGitHubにアップするのに試行錯誤した話)、ネットにもあまり情報がなく困り果てており、もうこのアプリではVS Codeのこの機能は諦めて全てターミナルでgit statusして凌ぐか...と思っていた矢先、弊社の最強先輩陣が助けてくれました。
解決
vendor/bundleを.gitignoreに含めてコミットしたら直りました!
このディレクトリはbundleをinstallする場所。
Dockerの環境構築した時に、5k以上のファイルがここにインストールされてしまったのかなと推察しております。too many changes(変更が多すぎる)ということで怒られているので、.gitignoreが適切に設定されているかを疑うのがいいのかもしれません。
- 投稿日:2021-03-15T12:18:51+09:00
<Golang+Nginx+MySQL>Macローカル上にDocker Composeでアプリを立ち上げてみた
Dockerアプリケーションのアーキテクチャー
ざっくりとやること・できることの説明
- docker-composeでNginxとGo言語のAPI, DBとしてMySQLのコンテナを3つ立ち上げる
- Nginxのindex.htmlからGo言語で書いたREST API(go-ginのフレームワーク使用)を経由して、DBに問い合わせ
- DBにCRUD(gormのフレームワーク使用)ができることを確認
- ※DockerとDocker Composeはインストールされているものとする。
バージョン確認
確認してみたら、以下のバージョンでした。
Docker version 20.10.2 docker-compose version 1.27.4 golang:1.14.7-alpine3.12 mysql:5.7 nginx:1.17.3-alpine※厳密にはバージョンの依存関係とかも考えないといけないが、一旦ローカルで動かすので、スルーしますm(__)m
フォルダ構成
docker-local ├── .env ├── api │ └── src │ ├── main.go │ ├── model ── model.go │ └── config ── config.go ├── db │ ├── conf ── my.cnf │ └── db-data ├── docker │ └── nginx │ ├── Dockerfile │ └── nginx.conf ├── docker-compose.yml └── web ├── env │ └── nginx ── site.conf └ src ── index.htmlディレクトリとファイルの用途解説
名前 種類 説明 docker-local フォルダ dockerローカルアプリケーションの親フォルダ .env ファイル docker-composeで使う環境変数のファイル api フォルダ APIのフォルダ src フォルダ ソースフォルダ main.go ファイル goを起動するときのファイル model/model.go ファイル DBとやりとりする時のファイル
struct, dao系のメソッドを記載config/config.go ファイル DBの接続情報等を記載 db フォルダ DBに関するフォルダ conf/my.cnf ファイル 任意のDB設定を記載。マウント用 db-data フォルダ DBのデータをsyncするマウント用 docker フォルダ Dockerfileたちを格納するフォルダ nginx フォルダ NginxのimageをビルドするDockerfileを格納 Dockerfile ファイル nginxのimage nginx.conf ファイル nginxの設定ファイル docker-compose.yml ファイル docker containerを一括でコントロールするyamlファイル web フォルダ フロントのファイルを格納 env フォルダ 環境設定ファイルを格納 nginx/site.conf ファイル nginxのserver設定ファイル
IPアドレス、ポート、ルーティングなど設定src/index.html ファイル 画面表示用ファイル Docker Composeの中身
version: "3.8" services: nginx: image: infra-challenge:nginx-20210312 # command: build: context: ./docker/nginx dockerfile: Dockerfile container_name: nginx ports: - 80:80 volumes: - ./web/env/nginx:/etc/nginx/conf.d - ./web/src:/var/www/html depends_on: - api logging: driver: "none" restart: always networks: - services api: image: golang:1.14.7-alpine3.12 command: go run main.go --host 0.0.0.0 --port 8080 container_name: api ports: - 8080:8080 volumes: - ./api:/go/src/github.com/infra-challenge/api - /Users/username/go:/go working_dir: /go/src/github.com/infra-challenge/api/src environment: - APP_STAGE=local - LOG_LEVEL=debug - MYSQL_CONNECTION depends_on: - db restart: always networks: - services db: image: mysql:5.7 # build: ./docker/mysql container_name: db ports: - 3306:3306 volumes: - ./db/conf/my.cnf:/etc/mysql/conf.d/my.cnf - ./db/db-data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD - MYSQL_DATABASE - MYSQL_USER - MYSQL_PASSWORD healthcheck: test: ["CMD-SHELL", "mysqlshow -u ${MYSQL_USER} -p${MYSQL_PASSWORD}"] interval: "5s" retries: 10 logging: driver: "none" restart: always networks: - services networks: services: external: name: local_infra_challenge_networks主な属性の解説
docker compose
の文法バージョンは3.8
だよservices
配下に、コンテナの定義を書いていく。今回はnginx, api, dbの3つnginx
はDockerfile
を使うから、image名は任意で、build
の属性を指定。
context
はDockerfileのある相対パス、dockerfile
はDockerfile名- ※ファイル名が
Dockerfile
となっていたら、build: ./docker/nginx
としてもOKcontainer_name
を指定すると、docker stop
とかするときに、idじゃなくて名前を指定すれば制御できるので便利ports
は<ホスト(Macローカル)>:<ゲスト(Dockerコンテナ)>
でポートを接続volumes
は<ホスト(Macローカル)>:<ゲスト(Dockerコンテナ)>
でマウントフォルダを指定
- マウントとは、フォルダ同士を共有してsync(同期)すること。
depends_on
は他のコンテナが起動成功でき次第〜みたいなやつ- apiとdbは、自分でDockerfileは用意せずに、
Docker-Hub
公式のimageを使っているenvironment
に環境変数を指定する。
docker-compose.yml
と同階層に.env
ファイルを置き指定- DBでは
healthcheck
を行い、起動しているか随時確認- ネットワークを組むことで、コンテナ間通信が可能となり、APIからDBに問い合わせができるようになった
ネットワークについて
作ったネットワークの情報を確認してみると、下記のようなObjectが返ってきますね〜
"Subnet": "172.19.0.0/16",
の中で、Containers(nginx, api, db)がIPアドレスを振られて存在しているのがわかります。
ちなみに、networks
だけでなくlinks
という属性もあり、links
を使うと、一方的にコンテナ間通信ができるようになる設定もあるので、TPOによって使い分ける◎
公式docker:links$ docker network inspect local_infra_challenge_networks [ { "Name": "local_infra_challenge_networks", "Id": "f6a978e6f3aa803be061418c1c7081d132c9538c207ea08b1d732fc55ba2b917", "Created": "2021-03-12T03:57:20.0697997Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.19.0.0/16", "Gateway": "172.19.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "7a81d8c6f965a07ce446aa0983180bbb4775187ed6873a9e26dbc9540f623392": { "Name": "nginx", "EndpointID": "09336c1acc58f9b75ea3ced604a7d82b168a5f0cd132ae4f2fffd267a416b022", "MacAddress": "02:42:ac:13:00:04", "IPv4Address": "172.19.0.4/16", #<-これ!! "IPv6Address": "" }, "842244244bf00593e25317dd1cafb35ae03cfbc5246a87c666c6434a6ad7540d": { "Name": "db", "EndpointID": "3810c5b1b5f87b3ba4331320fcb2106696f3dcd157a771f9de63aeffc3a14720", "MacAddress": "02:42:ac:13:00:02", "IPv4Address": "172.19.0.2/16", #<-これ!! "IPv6Address": "" }, "c0906b3fc86d92f4b89474b7647e85a36e489469f83905c94785f2f278807532": { "Name": "api", "EndpointID": "e291176e7bd08040c2486d0409dab009a724fb7e3f0da3a5a9585cb23344a999", "MacAddress": "02:42:ac:13:00:03", "IPv4Address": "172.19.0.3/16", #<-これ!! "IPv6Address": "" } }, "Options": {}, "Labels": {} } ]コンテナ間通信をするときは、コンテナ名でエンドポイントを指定することができるから便利
# db:3306 の部分 <コンテナ名:ポート> MYSQL_CONNECTION=local:local@tcp(db:3306)/infra-challengeマウントについて
nginx
volumes: - ./web/env/nginx:/etc/nginx/conf.d - ./web/src:/var/www/html
- nginxには
default.conf
というものがあり、それを自分の設定に書き換えたいので、./web/env/nginx
で書き換えてる/var/www/html
以下がdockerコンテナ内のnginxフォルダ構成になる(する)ので、index.htmlがあるディレクトリを同期api
volumes: - ./api:/go/src/github.com/infra-challenge/api - /Users/username/go:/go
- とりあえずGo Pathが通っているところをdockerコンテナ側にマウントしてる。
- APIのファイル等も同期
db
volumes: - ./db/conf/my.cnf:/etc/mysql/conf.d/my.cnf - ./db/db-data:/var/lib/mysql
- MySQLのデータの格納先が
/var/lib/mysql
になるので、ホストの./db/db-data
に同期して、コンテナを除去してもデータが消えないようにする- 自分のDB設定、例えば、
character-set
とかcollation
とかをマウントして上書き# my.cnf [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [mysql] default-character-set=utf8mb4いざ、Docker Composeで起動してみる!!
コマンド
$ cd /Users/username/src/github.com/infra-challege/docker-local $ docker network create --driver bridge local_infra_challenge_networks [~省略~] $ docker-compose build --no-cache [~省略~] $ docker-compose up -d --remove-orphans Creating db ... done Creating api ... done Creating nginx ... done $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8fxxxb102ed4 infra-challenge:nginx-20210312 "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp nginx 8fxxx25640e6 golang:1.14.7-alpine3.12 "go run main.go --ho…" 6 seconds ago Up 4 seconds 0.0.0.0:8080->8080/tcp api e5xxxe97320e mysql:5.7 "docker-entrypoint.s…" 6 seconds ago Up 5 seconds (health: starting) 0.0.0.0:3306->3306/tcp, 33060/tcp db
- docker-composeファイルがある階層に移動
networks
属性を指定したので、そのネットワークを作成する。- nginxはDockerfileをつかってimageを作成するので、ビルドする必要がある。
--no-cache
オプション:構築時にイメージのキャッシュを使わない。- docker-compose upで起動
-d
オプション:バックグラウンド実行--remove-orphans
オプション:Composeファイルで定義されていないサービス用のコンテナを削除Webページにアクセスできるか確認
コンテナ終了コマンド
$ docker-compose down Stopping nginx ... done Stopping api ... done Stopping db ... done Removing nginx ... done Removing api ... done Removing db ... done止まりました。
ハマったポイント
go run main.go
した後に、起動はしていたがポート設定がミスっていて、APIにアクセスできなかった。
- 「なんかうまくいかないな〜〜汗」ってなったので、VSCodeから一旦APIサーバーを止めて再起動して、通信がうまくいったけど、それはコンテナ間通信ではなかった、、、
- コンテナ上ではなくローカルでAPIサーバーが立ち上がってしまい、通信できていると勘違いしてしまった。
index.html
の画面表示するポートとAPI
を司るポートそれぞれが別だったので、その調整にハマった。- nginxには、サーバー設定が必要だった。
nginx.conf
とdefault.conf
というファイルが存在しこれのIPアドレス、ポート等を設定しないといけないので、前もってnginxの知識をいれておかないと簡単には動かなかった# site.conf (default.confの上書き) server { listen 80; listen 8080; # APIで8080ポートも使ってる関係で、これも必要だった server_name localhost; root /var/www/html; location / { index index.html index.htm; root /var/www/html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/html/error; } }まとめ
docker-compose.ymlでコンテナを起動して、Dockerアプリケーションを作る感覚がつかめたので、楽しかったですわい!
コンテナのコントロールってすごい簡単で、サクサク動くから、せっかちな自分でも全然苦じゃない。
マスターしていきたいなああああ以上、ありがとうございました!
- 投稿日:2021-03-15T11:39:42+09:00
Dockerとdocker-composeを使ったRails APIモードの環境構築
Dockerとdocker-composeを使い、Rails6をAPIモードで動かす環境を構築しました。最後に動作確認もしています。
*
rails new
をする際のオプションの説明を追記しました。
前提
Docker & docker-composeをインストール済み
動作環境
- macOS Catalina 10.15.7
- Ruby 2.7.1
- Ruby on Rails 6.0.3
- Docker 20.10.2
- docker-compose 1.27.4
ディレクトリを作成します。
mkdir rails_api_docker cd rails_api_docker
GemfileとDockerfileを作成します。
Gemfilesource 'https://rubygems.org' gem 'rails', '6.0.3'DockerfileFROM ruby:2.7.1-alpine3.11 ENV BUNDLER_VERSION=2.1.4 WORKDIR /usr/src/app COPY Gemfile . RUN apk update && \ apk add --no-cache \ linux-headers \ libxml2-dev \ curl-dev \ make \ gcc \ libc-dev \ g++ \ sqlite-dev \ tzdata && \ gem install bundler && \ bundle install COPY . .インストールするbundlerのバージョンを指定するために
ENV
で環境変数を定義しています。
Dockerfileを元にDockerイメージを作成します。
docker build -t rails_api:6.0.3 .
作成したイメージからコンテナを起動し、Railsアプリケーションを作成します。
docker run --rm -v $(pwd):/usr/src/app -w /usr/src/app rails_api:6.0.3 rails new . --skip-keeps -M -C -S -J -B
オプション 説明 --skip-keeps .keepファイルを作成しない -M Action Mailer, Action Mailbox, Action Text関連のファイルを作成しない -C Action Cable関連のファイルを作成しない -S Sprockets, Spring, listenを使用しない -J JavaScript, turbolinksを使用しない -B bundle installを実行しない
docker-composeでコンテナを起動します。
docker-compose up
localhost:3000
にアクセスします。起動画面が表示されれば成功です。
APIの動作確認
起動中のコンテナにログインします。
docker-compose exec api sh
今回は簡単にするため
scaffold
を使ってcontrollerとmodelを作成します。rails g scaffold User name:string
/db/seeds.rb
に以下を追記してテストデータを作成します。seeds.rbUser.create name: "Euclid"
DBを初期化し、テストデータを反映させます。
rails db:create rails db:migrate rails db:seed
/app/controllers/users_controller.rb
のindexアクションを以下に変更します。users_controller.rbdef index @users = User.all render json: @users end
localhost:3000/users
にアクセスして以下が表示されれば成功です。
読んでいただきありがとうございました!ご指摘やご意見などありましたらコメントしていただけると嬉しいです?
- 投稿日:2021-03-15T10:37:41+09:00
Ruby初心者の自分がmruby触ってみた
こんにちは、smpeotnです。
今回は、mruby3.0がリリースされたとういことなので、ちょろっと触ってみようかなと思います。mrubyってなんでしょう?
正直、自分も今日まで知らなかった。
朝、mruby3.0リリースされたってよって記事を見て初めてこうゆうものがあるんだと知りました。
- 省メモリ
- 言語仕様が小さい
- 軽量なRuby言語処理系言語
- LuaのようにかんたんにC・C++に組み込むことができる
なるほど。。。。使い方によっては色々できそうだ!
環境構築してみる
DockerでRuby環境をまずは:こうゆうときDockerって便利ですよね
DockerfileFROM ruby:2.5 RUN mkdir /datadocker-compose.ymlversion: '3' services: ruby: build: . tty: true #コンテナを起動しっぱなしにする volumes: - .:/data# 起動 !! % docker-compose up -dhttps://github.com/mruby/mruby/blob/master/doc/guides/compile.md
ここに書かれてる内容を確認して必要なミドルウェアのインストールとかする
- ruby 2.5
- gcc
- ar% docker-compose exec ruby /bin/bashroot@4c1ad477fc54:/# which gcc /usr/bin/gcc root@4c1ad477fc54:/# which ar /usr/bin/ar root@4c1ad477fc54:/# which ruby /usr/local/bin/ruby root@4c1ad477fc54:/# gcc --version gcc (Debian 8.3.0-6) 8.3.0 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. root@4c1ad477fc54:/# ar --version GNU ar (GNU Binutils for Debian) 2.31.1 Copyright (C) 2018 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) any later version. This program has absolutely no warranty. root@4c1ad477fc54:/# ruby --version ruby 2.5.8p224 (2020-03-31 revision 67882) [x86_64-linux]Build Compile.
root@4c1ad477fc54:/data/data/mruby-3.0.0# rake -v ..... root@4c1ad477fc54:/data/data/mruby-3.0.0# ls -al ./bin/ total 23296 drwxr-xr-x 7 root root 224 Mar 12 15:26 . drwxrwxr-x 38 root root 1216 Mar 12 15:25 .. -rwxr-xr-x 1 root root 5990688 Mar 12 15:25 mirb -rwxr-xr-x 1 root root 3773904 Mar 12 15:25 mrbc -rwxr-xr-x 1 root root 5970456 Mar 12 15:26 mruby -rwxr-xr-x 1 root root 1031 Mar 12 15:25 mruby-config -rwxr-xr-x 1 root root 6040224 Mar 12 15:26 mruby-strip root@4c1ad477fc54:/data/data/mruby-3.0.0# ./bin/mruby --version mruby 3.0.0 (2021-03-05) # パス通す root@4c1ad477fc54:~# export PATH=/data/data/mruby-3.0.0/bin:$PATH root@4c1ad477fc54:~# mruby --version mruby 3.0.0 (2021-03-05)これはDockerfileに書けばいいよね...
DockerfileFROM ruby:2.5 RUN mkdir /data RUN apt-get update && apt-get install -y vim RUN apt-get install -y wget RUN mkdir -p /usr/src/mruby WORKDIR /usr/src/mruby RUN wget https://github.com/mruby/mruby/archive/3.0.0.zip -O mruby-3.0.0.zip && \ unzip mruby-3.0.0.zip && \ cd ./mruby-3.0.0 && \ rake -v ENV PATH $PATH:/usr/src/mruby/mruby-3.0.0/bin WORKDIR /usr/src/mruby/mruby-3.0.0Hello World.(https://github.com/mruby/mruby/wiki/Hello-World)
hello.c#include <stdio.h> #include <mruby.h> #include <mruby/compile.h> int main(void) { mrb_state *mrb = mrb_open(); if (!mrb) { /* handle error */ } puts("Executing Ruby code from C!"); mrb_load_string(mrb, "p 'hello world on mruby! this is ruby code.'"); mrb_close(mrb); return 0; }root@ddd2a0d85a35:/usr/src/mruby/mruby-3.0.0# gcc -Iinclude hello.c build/host/lib/libmruby.a -lm -o hello.out root@ddd2a0d85a35:/usr/src/mruby/mruby-3.0.0# ./hello.out Executing Ruby code from C! "hello world on mruby! this is ruby code."できた!!!!!
Docker簡単。ここまでできれば色々検証できるで
- 投稿日:2021-03-15T10:37:41+09:00
Ruby初心者の自分がmruby触ってみた(環境構築)
こんにちは、smpeotnです。
今回は、mruby3.0がリリースされたとういことなので、ちょろっと触ってみようかなと思います。mrubyってなんでしょう?
正直、自分も今日まで知らなかった。
朝、mruby3.0リリースされたってよって記事を見て初めてこうゆうものがあるんだと知りました。
- 省メモリ
- 言語仕様が小さい
- 軽量なRuby言語処理系言語
- LuaのようにかんたんにC・C++に組み込むことができる
なるほど。。。。使い方によっては色々できそうだ!
環境構築してみる
DockerでRuby環境をまずは:こうゆうときDockerって便利ですよね
DockerfileFROM ruby:2.5 RUN mkdir /datadocker-compose.ymlversion: '3' services: ruby: build: . tty: true #コンテナを起動しっぱなしにする volumes: - .:/data# 起動 !! % docker-compose up -dhttps://github.com/mruby/mruby/blob/master/doc/guides/compile.md
ここに書かれてる内容を確認して必要なミドルウェアのインストールとかする
- ruby 2.5
- gcc
- ar% docker-compose exec ruby /bin/bashroot@4c1ad477fc54:/# which gcc /usr/bin/gcc root@4c1ad477fc54:/# which ar /usr/bin/ar root@4c1ad477fc54:/# which ruby /usr/local/bin/ruby root@4c1ad477fc54:/# gcc --version gcc (Debian 8.3.0-6) 8.3.0 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. root@4c1ad477fc54:/# ar --version GNU ar (GNU Binutils for Debian) 2.31.1 Copyright (C) 2018 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) any later version. This program has absolutely no warranty. root@4c1ad477fc54:/# ruby --version ruby 2.5.8p224 (2020-03-31 revision 67882) [x86_64-linux]Build Compile.
root@4c1ad477fc54:/data/data/mruby-3.0.0# rake -v ..... root@4c1ad477fc54:/data/data/mruby-3.0.0# ls -al ./bin/ total 23296 drwxr-xr-x 7 root root 224 Mar 12 15:26 . drwxrwxr-x 38 root root 1216 Mar 12 15:25 .. -rwxr-xr-x 1 root root 5990688 Mar 12 15:25 mirb -rwxr-xr-x 1 root root 3773904 Mar 12 15:25 mrbc -rwxr-xr-x 1 root root 5970456 Mar 12 15:26 mruby -rwxr-xr-x 1 root root 1031 Mar 12 15:25 mruby-config -rwxr-xr-x 1 root root 6040224 Mar 12 15:26 mruby-strip root@4c1ad477fc54:/data/data/mruby-3.0.0# ./bin/mruby --version mruby 3.0.0 (2021-03-05) # パス通す root@4c1ad477fc54:~# export PATH=/data/data/mruby-3.0.0/bin:$PATH root@4c1ad477fc54:~# mruby --version mruby 3.0.0 (2021-03-05)これはDockerfileに書けばいいよね...
DockerfileFROM ruby:2.5 RUN mkdir /data RUN apt-get update && apt-get install -y vim RUN apt-get install -y wget RUN mkdir -p /usr/src/mruby WORKDIR /usr/src/mruby RUN wget https://github.com/mruby/mruby/archive/3.0.0.zip -O mruby-3.0.0.zip && \ unzip mruby-3.0.0.zip && \ cd ./mruby-3.0.0 && \ rake -v ENV PATH $PATH:/usr/src/mruby/mruby-3.0.0/bin WORKDIR /usr/src/mruby/mruby-3.0.0Hello World.(https://github.com/mruby/mruby/wiki/Hello-World)
hello.c#include <stdio.h> #include <mruby.h> #include <mruby/compile.h> int main(void) { mrb_state *mrb = mrb_open(); if (!mrb) { /* handle error */ } puts("Executing Ruby code from C!"); mrb_load_string(mrb, "p 'hello world on mruby! this is ruby code.'"); mrb_close(mrb); return 0; }root@ddd2a0d85a35:/usr/src/mruby/mruby-3.0.0# gcc -Iinclude hello.c build/host/lib/libmruby.a -lm -o hello.out root@ddd2a0d85a35:/usr/src/mruby/mruby-3.0.0# ./hello.out Executing Ruby code from C! "hello world on mruby! this is ruby code."できた!!!!!
Docker簡単。ここまでできれば色々検証できるで
- 投稿日:2021-03-15T05:55:20+09:00
Dockerサーバーの余ったリソースをXMRigでマイニングしてみた
前書き的なもの
自宅サーバーとしてXeon E5-2630Lを積んだラックサーバー(FUJITSU PRIMERGY RX200S7)の運用を始めて早3か月、Web、アプリケーション、NASと色々な用途で使用していましたがマシンパワーの割に小規模でリソースの1割を使用できているかどうかな状況だったので、余ったリソースでマイニングしてみました。
備忘録的なもの...(笑)
Docker上で構築することで環境に左右されずにとりあえず動くのと、マシンリソースの明確な制限と区分けがDockerで簡単にできるので今回構築してみました。
内容としてはUbuntu18.04のベースイメージ上にXMRigを引っ張ってきてコンパイルするだけ。
Dockerのインストール
異なるマシン環境、OSでも動いてくれる!素晴らしい!!
ということで、Dockerのインストールから始めましょう。
Docker導入済みな方は次の項目へ。
手順は特に変わったこともなく公式通りにインストールします。
以下、公式の手順通り → https://docs.docker.com/engine/install/debian/
↓ 作業に必要なパッケージのインストール
apt Install$ sudo apt update $ sudo apt -y install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ gnupg-agent \ software-properties-common*[-y]オプションでインストール時の確認スキップ、後の工程で" gnupg "がインストールされてないと怒られる事が多いので追加。
↓ Docker公式からGPG Keyの取得
Add GPG Key$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -↓ 公式がkeyを確認しろと言ってるので一応確認
Key check$ sudo apt-key fingerprint 0EBFCD88 pub 4096R/0EBFCD88 2017-02-22 Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid Docker Release (CE deb) <docker@docker.com> sub 4096R/F273FCD8 2017-02-22↓ aptにリポジトリ追加、環境によって2行目の[arch=amd64]を[arch=arm64]とかに書き換える
Intel,AMD CPU$ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/debian \ $(lsb_release -cs) \ stable"ARM CPU$ sudo add-apt-repository \ "deb [arch=arm64] https://download.docker.com/linux/debian \ $(lsb_release -cs) \ stable"↓ Dockerのインストール
Docker Install (1)$ sudo apt update $ sudo apt install docker-ce docker-ce-cli containerd.io*バージョン指定したい場合は以下のコマンドで調べて各パッケージ名の後に[ =Version ]指定でインストール
詳細については公式へDocker Install (2)$ apt-cache madison docker-ce $ apt-cache madison docker-ce-cli $ sudo apt install docker-ce=<VERSION_STRING> \ docker-ce-cli=<VERSION_STRING> \ containerd.io↓ お約束のHello Worldで確認、特に怒られなければ問題ない。
Docker Check$ sudo docker run hello-worldDockerFileを用意してイメージ作成
今回利用するXMRigをUbuntu18.04のベースイメージ上でソースからコンパイルしてイメージ作成、コンテナ作成して実行するだけでマイニングできるようにします。
XMRigのソースはGithubから→https://github.com/xmrig/xmrig
↓ DockerFileを好きなように書く
DockerfileFROM ubuntu:18.04 # Default git repository ENV GIT_REPOSITORY https://github.com/xmrig/xmrig.git # Innstall packages RUN apt-get update \ && set -x \ && apt install -qq --no-install-recommends -y build-essential ca-certificates cmake git libhwloc-dev libuv1-dev libssl-dev \ && git clone $GIT_REPOSITORY \ && echo "#ifndef XMRIG_DONATE_H" | tee /xmrig/src/donate.h \ && echo "#define XMRIG_DONATE_H" | tee -a /xmrig/src/donate.h \ && echo "constexpr const int kDefaultDonateLevel = 0;" | tee -a /xmrig/src/donate.h \ && echo "constexpr const int kMinimumDonateLevel = 0;" | tee -a /xmrig/src/donate.h \ && echo "#endif /* XMRIG_DONATE_H */" | tee -a /xmrig/src/donate.h \ && cd /xmrig \ && cmake . \ && make \ && cd - \ && mv /xmrig/xmrig /usr/local/bin/ \ && rm -rf /xmrig \ && apt purge -y -qq build-essential cmake git libhwloc-dev libuv1-dev libssl-dev \ && apt clean -qq ENTRYPOINT ["/usr/local/bin/xmrig"] CMD ["--donate-level","0","-o","monerohash.com:2222","-u","WALLET_ADDRESS","-p","x","-k"]今回はUbuntu18.04のベースイメージ上にgitでXMRigのソースを引っ張て来てコンパイルし、実行に不要なファイルをきれいにするだけ。
一応使い方としては、CMD行の" -o "オプションの値" monerohash.com:2222 "に自分の参加したいマイニングプールの指定するアドレス:ポートを、" -u "オプションの値" WALLET_ADDRESS "をMoneroの場合はMyMoneroなどで作成した自分のウォレットのアドレスを入力するだけ。
途中の" echo | tee "はXMRigの作者が寄付としてデフォルトで1%(1%なら100分に1分程度)の時間ごとに作者のアカウントでマイニングするようになっており、ソースのヘッダーファイルを書き換えてデフォルト寄付を無効にしている。
寄付を無効にしている理由としては、マイニングプールによってはブロックを掘り当てた際にプールに参加してマイニングしていないと報酬を得られないので、寄付マイニング中にプールでブロックを掘り当てると報酬が得られない可能性がある為。
↓ 作成したDockerFileをサーバーに何かしらで送る
DockerFile Send$ scp Dockerfile User@ServerAddless:/xmrig
↓ scpで転送が面倒ならsshでvimコピペも可
DockerFile vim$ mkdir /xmrig $ vi /xmrig/Dockerfile↓ DockerFileをBuildしてイメージ作成、build中にmakeしてるので結構時間かかる
Docker Build$ cd /xmrig $ docker build -t xmrig .↓ 作成したイメージの確認、作成した名前のイメージが表示されればOK
Docker Image List$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE xmrig latest 74e3b5a9434b 10 seconds ago 354MBイメージからコンテナ作成して実行
作成したイメージを指定してdocker runすれば自動的にXMRigがマイニングしてくれます。
↓ docker runでコンテナ作成して実行
Docker Run$ docker run -d --name xmrig --restart=always xmrigXMRigの稼働状況など見たい場合はDockerのログから参照
↓ dockerのコンテナログからXMRigの出力確認
Docker Logs$ docker logs xmrig * ABOUT XMRig/6.10.0 gcc/7.5.0 * LIBS libuv/1.18.0 OpenSSL/1.1.1 hwloc/1.11.9 * HUGE PAGES supported * 1GB PAGES disabled * CPU Intel(R) Xeon(R) CPU E5-2630L 0 @ 2.00GHz (1) 64-bit AES L2:1.5 MB L3:15.0 MB 6C/12T NUMA:1 * MEMORY 4.8/15.6 GB (31%) * DONATE 0% * ASSEMBLY auto:intel * POOL #1 monerohash.com:2222 algo auto * COMMANDS hashrate, pause, resume, results, connection * OPENCL disabled * CUDA disabled [2021-03-14 18:22:15.660] net use pool monerohash.com:2222 107.191.99.221 [2021-03-14 18:22:15.660] net new job from monerohash.com:2222 diff 50000 algo rx/0 height 2316997 [2021-03-14 18:22:15.660] cpu use argon2 implementation SSSE3 [2021-03-14 18:22:15.662] msr msr kernel module is not available [2021-03-14 18:22:15.662] msr FAILED TO APPLY MSR MOD, HASHRATE WILL BE LOW [2021-03-14 18:22:15.663] randomx init dataset algo rx/0 (12 threads) seed c065bc1e5406f242... [2021-03-14 18:22:15.663] randomx allocated 2336 MB (2080+256) huge pages 0% 0/1168 +JIT (0 ms) [2021-03-14 18:22:25.066] randomx dataset ready (9403 ms) [2021-03-14 18:22:25.066] cpu use profile rx (6 threads) scratchpad 2048 KB [2021-03-14 18:22:25.069] cpu READY threads 6/6 (6) huge pages 0% 0/6 memory 12288 KB (3 ms) [2021-03-14 18:22:27.353] cpu accepted (1/0) diff 50000 (265 ms) [2021-03-14 18:22:46.715] net new job from monerohash.com:2222 diff 75000 algo rx/0 height 2316997 [2021-03-14 18:22:49.526] cpu accepted (2/0) diff 75000 (233 ms) [2021-03-14 18:23:16.935] net new job from monerohash.com:2222 diff 112501 algo rx/0 height 2316997 [2021-03-14 18:23:25.040] cpu accepted (3/0) diff 112501 (191 ms) [2021-03-14 18:23:25.102] miner speed 10s/60s/15m 1845.8 n/a n/a H/s max 1846.2 H/s"new job"でプールからジョブが降ってきて"accepted (1/0) diff 50000 (265 ms)"のように承認されていれば正常に稼働してマイニングできています。
デフォルトで1分毎にハッシュレートが表示されるようになっているので、それを見ながらチューニングするのが普通なのですが自動で最適化されるようでなかなかの数字出ているのでそのまま使えると思います。
ちなみに上記ログを見てもらうとわかるように当環境では6コア/12スレッドCPUを使用しており、自動で最適化され半分の6スレッドしか使用していませんがこれ以上スレッドを割り当ててもハッシュレートがそこまで伸びませんでした。
↓ docker statsでコンテナのCPU使用率などを確認
Docker Stats$ docker stats --no-stream CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 97b858fafab4 xmrig 599.88% 2.305GiB / 15.57GiB 14.80% 40.1kB / 19.3kB 0B / 0B 12CPUは6コア/12スレッドなので1200%が上限ですが半分の600%前後で推移しています。
後書き的なもの
とりあえず数日運用してみましたが、他のサービスやアプリケーションにも影響与えずに安定してくると平均2kH/s出ているので様子見しようと思います。
稼働時のサーバー消費電力が平均125Wなので赤字ではありますが、この消費電力で2kH/s出ていればまぁ上々かと。
余裕があれば後日、XMR-Stakと比較もしてみます。
そのうちサーバー増設しようかなと思ってるので、その際にはk8s環境も構築して試してみたいです。
- 投稿日:2021-03-15T01:00:00+09:00
ROS2Javaをビルドする
はじめに
とある研修の教材作りにROS2を使用してはどうか、たまたま周りにJavaできる人多いよねという事で、私が手始めにROS2Javaを触ってみることにしました。
(この記事は身内向けの記事ですが、他にROS2Javaを試してみたい方にも参考になるかもしれないので投稿しました。)
まずはROS2Javaのリポジトリを見て、自分のMacBook Airにインストールしてみようと思いましたがbrew/pipで入れる依存モジュールやROS/ROS2の依存モジュールのバージョンの組み合わせが悪いのかビルドがうまくいきませんでした。
今回はいろいろ試行錯誤してできたビルド手順をまとめておきたいと思います。
macのローカルではなくUbuntu18.04のDockerコンテナ内でのビルドになります。環境
- OS : macOS 10.15.7
- CPU : 1.2 GHz クアッドコアIntel Core i7
- Docker : 20.10.0
ビルド手順
Docker Imageのダウンロード
これを研修で使うにあたり、参加者のそれぞれのPCのローカルでROS2Javaをビルドするものならば環境の違いでビルドが通らないことが往々にして発生しうるだろうということで、Dockerコンテナ内でビルド環境を作ってこれを配布した方がいいと思いました。
既にビルド環境が整っているUbuntuのImageを見つけたので、これを使用することにします。docker pull theosakamg7/ros2_java_docker:ubuntu-ros2javaコンテナ起動
念のためコンテナ内のビルドに使用するディレクトリをローカルにマウントしておきます。
ローカルにマウント用のディレクトリを作っておきます。mkdir volume
起動のための
docker-compose.yml
を用意します。docker-compose.ymlversion: '3' services: ros2java_ubuntu: image: theosakamg7/ros2_java_docker:ubuntu command: bash -c "/bin/bash" tty: true stdin_open: true volumes: - ./volume:/home/travisコンテナ内に入りましょう。
docker-compose up -d docker-compose exec ros2java_ubuntu bashビルド作業
amentのビルド
amentとはcmakeベースのビルドツールです。
ROS2をビルドする際に使用します。
まずは作業ディレクトリを作っておきましょう。cd /home/travis/ mkdir ament_ws/src cd ament_ws touch ament_java.reposament_java.reposに以下を記述します。
ament_java.reposrepositories: ament/ament_cmake: type: git url: https://github.com/ament/ament_cmake.git version: 0.5.1 ament/ament_index: type: git url: https://github.com/ament/ament_index.git version: 0.5.1 ament/ament_lint: type: git url: https://github.com/ament/ament_lint.git version: 0.5.2 ament/ament_package: type: git url: https://github.com/ament/ament_package.git version: 0.5.2 ament/ament_tools: type: git url: https://github.com/esteve/ament_tools.git version: win32-platform ament/googletest: type: git url: https://github.com/ament/googletest.git version: 4b6e624e78ba3d43c1602ffc80478ee7253e0b04 ament/osrf_pycommon: type: git url: https://github.com/osrf/osrf_pycommon.git version: 0.1.5 ament/uncrustify: type: git url: https://github.com/ament/uncrustify.git version: 0.66.1 ament_java/ament_java: type: git url: https://github.com/esteve/ament_java.git version: mastervcsを用いてソースコード一式をダウンロードし、amentをビルドします。
なお、vcsはDocker Imageにプリインストール済みなのでいきなり使えます。vcs import src < ament_java.repos src/ament/ament_tools/scripts/ament.py build --symlink-install --isolatedROS2Javaのビルド
cd /home/travis mkdir ros2java_ws/src cd ros2java_ws touch ros2_java_desktop.repos公式リポジトリのREADME通りではビルドエラー吐きまくるので、試行錯誤しました。。。
2021/03/13現在以下の依存モジュールのバージョンでビルドできました。
ros2_java_desktop.repos
に以下を記述します。ros2_java_desktop.reposrepositories: eProsima/Fast-CDR: type: git url: https://github.com/eProsima/Fast-CDR.git version: v1.0.7 eProsima/Fast-RTPS: type: git url: https://github.com/eProsima/Fast-RTPS.git version: 7a0b0fe7ca8d2c4ea41e36744c6024c263a6505a ros/class_loader: type: git url: https://github.com/ros/class_loader.git version: 1.1.0 ros/console_bridge: type: git url: https://github.com/ros/console_bridge.git version: ad25f7307da76be2857545e7e5c2a20727eee542 ros2/console_bridge_vendor: type: git url: https://github.com/ros2/console_bridge_vendor.git version: 1.3.0 ros2/ament_cmake_ros: type: git url: https://github.com/ros2/ament_cmake_ros.git version: 0.5.0 ros2/common_interfaces: type: git url: https://github.com/ros2/common_interfaces.git version: 0.5.0 ros2/example_interfaces: type: git url: https://github.com/ros2/example_interfaces.git version: 0.5.0 ros2/launch: type: git url: https://github.com/ros2/launch.git version: 0.5.2 ros2/libyaml_vendor: type: git url: https://github.com/ros2/libyaml_vendor.git version: 1.0.0 ros2/poco_vendor: type: git url: https://github.com/ros2/poco_vendor.git version: 1.1.1 ros2/tinydir_vendor: type: git url: https://github.com/ros2/tinydir_vendor.git version: v1.0.0 ros2/rcl: type: git url: https://github.com/ros2/rcl.git version: 0.5.1 ros2/rcl_interfaces: type: git url: https://github.com/ros2/rcl_interfaces.git version: 0.5.0 ros2/rclpy: type: git url: https://github.com/ros2/rclpy.git version: 0.5.3 ros2/rcutils: type: git url: https://github.com/ros2/rcutils.git version: 0.5.1 ros2/rmw: type: git url: https://github.com/ros2/rmw.git version: 0.5.0 ros2/rmw_fastrtps: type: git url: https://github.com/ros2/rmw_fastrtps.git version: 0.5.1 ros2/rmw_implementation: type: git url: https://github.com/ros2/rmw_implementation.git version: 0.5.1 ros2/rmw_opensplice: type: git url: https://github.com/ros2/rmw_opensplice.git version: 0.5.2 ros2/ros2cli: type: git url: https://github.com/ros2/ros2cli.git version: 0.5.3 ros2/rosidl: type: git url: https://github.com/ros2/rosidl.git version: 0.5.1 ros2/rosidl_typesupport_opensplice: type: git url: https://github.com/ros2/rosidl_typesupport_opensplice.git version: 0.5.0 ros2/rosidl_typesupport: type: git url: https://github.com/ros2/rosidl_typesupport version: 0.5.0 ros2/rosidl_dds: type: git url: https://github.com/ros2/rosidl_dds.git version: 0.5.0 ros2/rosidl_defaults: type: git url: https://github.com/ros2/rosidl_defaults.git version: 0.5.0 ros2/rosidl_python: type: git url: https://github.com/ros2/rosidl_python.git version: 0.5.2 ros2_java/ros2_java: type: git url: https://github.com/esteve/ros2_java.git version: 62918477f4fb8810d4df0ac9c9e67b885b635d01 ros2_java/ros2_java_examples: type: git url: https://github.com/esteve/ros2_java_examples.git version: 4305e58493bfa37484457b3fe12525cbc0f87319 ros2/unique_identifier_msgs: type: git url: https://github.com/ros2/unique_identifier_msgs.git version: 2.2.0 ros2/test_interface_files: type: git url: https://github.com/ros2/test_interface_files.git version: 124823291a0a7d35e983b2e00abc8803ec4cdbb2ROS2Javaをビルドします。
まだまだ付け焼き刃的な対応が入っているので、追々根本的な調査と修正を行ってから追記する予定です。vcs import src < ros2_java_desktop.repos . ../ament_ws/install_isolated/local_setup.sh # 途中Javaソースコードのコンパイルエラーが起きるので、一旦回避するため変えておく sed -ie 's/client\.waitForService()/true/' ./src/ros2_java/ros2_java_examples/rcljava_examples/src/main/java/org/ros2/rcljava/examples/client/AddTwoIntsClient.java # test_msgsだけビルドエラーが消えなかったので一旦スキップ ament build --symlink-install --isolated --skip-packages test_msgs . ./install_isolated/local_setup.shこれでビルドが完了すればros2コマンドが使用できるはずです。
最後に
ここのリポジトリに作業用のワークスペースを作ったので、よかったら使ってみてください。
https://github.com/sho-hama/building_ros2_java