プログラミング学習のメモ書き

テクノロジーとか音楽とか読んだ本とかなんか色々の自分用めも。

VScode Remote containerでの時間同期の話とDockerのtimezone設定方法

先日構築したVScode Remote containerで意気揚々とgo言語をやってたんだけど、time.Nowで時間取得したら全然コンピューターの時間が違うのだった。

 

Dockerについて調べたところコンテナ内の時間は基本ローカルOSに同期しているらしい。コンテナ内のターミナルでdateコマンドを打つとtimezoneがUTCだった。

root@docker:# date
Mon May 25 08:56:26 UTC 2020

 

結論から話すと

DockerfileにAsia/Tokyoの設定を追加した。

環境変数の設定とシンボリックリンクの設定をするだけ!!

# Timezone Setting
ENV TZ='Asia/Tokyo'
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

 

調べるとDockerのtimezone論議は色々情報が錯綜している模様

これを見るとDockerfileに環境変数シンボリックリンクの設定をすると、ディストリビューションに左右されないほとんどのLinuxで使用できるtimezoneの設定ができるみたいだ!!賢い!!!ちなみにAnserの一番上に来ているものです。

serverfault.com

 

 

実行した詳細は以下の通り。

VScode Remote containerのDockerfileにAsia/Tokyoの設定を追加した。

# Timezone Setting
ENV TZ='Asia/Tokyo'
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

 

対象のコンテナを開くとDockerfileがあるのでこれを編集し、設定を入れました。VScode Remote containerの開発環境を作った話はこちら

f:id:ki-wi:20200525175032p:plain

 

左下の緑のところからコンテナのリモートを終了し、再度VScodeのコンテナを開くと「Rebuild」するか尋ねられるので実行する。開くまでちょっと時間かかるので少し待つ。

 

無事にJSTになった!!よかった!!

root@docker:# date
Mon May 25 17:57:27 JST 2020

 

あとがき

またもやDockerの勉強になった。少しずつ設定を覚えていこう。今回はコンテナ内での設定方法にしたけど、「docker run」コマンドでDocker起動時に設定する方法も良さそう。これは使う人次第だろうね。今の所はせっかくの仮想環境なのでコンテナ内で解決!!

 

 

UbuntuとVSCode Remote DevelopmentでGo言語の仮想開発環境を構築した(他言語対応可)

Go言語の仮想開発環境の構築

僕は2012年の貧弱なmac環境にも優しいツールVSCode言語学習を色々やっていたが、 Go言語での開発環境がよくわからなくなったので、今回意を決して仮想化環境で 簡単に開発環境が構築できるようにした!!今回VScodeの設定部分はしつこくキャプチャして説明している。多分大丈夫!!ボブマーリもそう言ってた。

 

目的

ローカル環境に影響を与えず仮想開発環境を簡単に作ったり消したりしたい。

 

概要

VScode拡張機能Remote Developmentを使えば、ローカルのVScodeからコンテナ化された仮想環境へ簡単に接続できる。

  

方法

macbookを母体にしてparallelsという仮想化アプリに、Ubuntuをインストールしている。VM VirtualBoxUbuntuインストールしても同様に実行できると思う。ここら辺は昔からよくあるやつなのでサクッと構築。ただもしUbuntu使ったことなくて、インストールするんだったら日本語Remixのisoイメージがおすすめです。日本語キーボード設定なんかのストレスがないので良いですよ。僕はこれでやってます。

今回の仮想環境構築はUbuntuだけどmacでもあんまり変わらないと思う。parallelsはいいツールなので機会があればいつか紹介したい。やる事は簡単!UbuntuVScodeとその拡張機能Remote DevelopmentそしてDockerをインストールしてVScodeでコンテナを構築する。 

 

OS

Ubuntu18.04.1

 

構築手順

1.コンテナ化の為のDockerをUbuntuにインストール

 

Dockerの公式にUbuntuへのインストールが書いてあるのでこれを参考にした。

https://docs.docker.com/engine/install/ubuntu/

 

このDockerインストールは公式を元に、自分の実行したコマンド書いていますが、詳細情報も含め公式のホームページを見ながらやった方が良いかもです。。

 

推奨されているのでここではリポジトリを利用してDockerをインストールしました。

 

1-1.リポジトリの設定。

HTTPS経由でリポジトリからapt出来るように必要なパッケージをインストール。

$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

 

1-2.Docke公式GPGキーを追加。

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

  

1-3.フィンガープリントの確認。

フィンガープリントの末尾8桁「0EBFCD88」を含むキーが存在することを確認。

$ sudo apt-key fingerprint 0EBFCD88

pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]

 

1-4.x86_64/amd64チップセットcpu用の安定したリポジトリを設定。

ホームページアーキテクチャ毎のコマンドが記載してある。

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

 

1-5.Docker Engineのインストール

$sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

  

1-6.Docker Engineのインストール確認。

成功していたらエラーなくコマンドが実行されます。

このコマンドはデフォルトでDockerにインストールされているものを実行するのでこのコマンドを打てば良い。

$ sudo docker run hello-world

 

1-7.Dockerをシステム起動時に起動するように設定。

$ sudo systemctl enable docker

 

1-8.Dockerグループにユーザーを追加。

Dockerデーモンは基本root権限で実行されるので一般ユーザーはsudoをつけて利用するみたいだけど、ユーザーをdockerグループに所属させるとsodoなしでも実行できると書いてあったので実行。ドキュメントにはdockerグループ作成って書いてあったけど最初から存在していたので、そのままdockerグループに追加した。

 

$ sudo usermod -aG docker $USER

 

1-9.ログインし直してテストコマンドを実行。

実行しているOSの環境が仮想環境の場合はログインのし直しではなくOS再起動が必要。Linux/Unixの場合はログインし直さなくても下記コマンドにて即時反映可能。

$ newgrp docker

 

sudoなしでエラーが出なければ問題なし。

$ docker run hello-world

 

これでDockerの設定は終了です。公式ドキュメントLinux構成に関する詳細書いてあります。

 

2.GolangUbuntuにインストール

下記手順に従いUbuntuにGoをインストールして下さい。

https://golang.org/dl/

 

3.VScodeUbuntuにインストール

https://azure.microsoft.com/ja-jp/products/visual-studio-code/

対象のOSを選択し、ダウンロード。

そのまま何も考えずにインストール。

 

4.インストールしたVScode拡張機能をインストール

4-1.VScode日本語化

VScodeを開き左下の拡張機能のボタンを押し、検索画面にjapaneseと打てばJapanese Language Packが出てくるので、インストールボタンを押しインストール。画像はインストール後なのでアンインストールボタンに変わってしまっている。

f:id:ki-wi:20200523203402p:plain


4-2.Remote Development

同様Remote Developmentも検索しインストールする。これも画像はインストール後なのでボタンはアンインストールになっている。関連した拡張機能もインストールしてくれるので従おう。優しさ。

f:id:ki-wi:20200523203358p:plain

 

4-3.Docker

同様Dockerも検索しインストールする。これも画像はインストール後なのでボタンはアンインストールになっている。

f:id:ki-wi:20200524155456p:plain

  

5.Remote Developmentを使ったコンテナ構築

まずは適当な所にフォルダを作成する。

僕はデスクトップに作った。

※開発言語の設定やプログラムの内容によっては、途中必要プログラムのインストールや再起動の指示が出て来るので、インストールや再起動のボタンを押して下さい。

 

5−1.フォルダーを開くで作成したフォルダを選択し、左下の緑色のところをクリック。

f:id:ki-wi:20200523222547p:plain

 

5-2.検索画面の「Remote-Containers:Add Develop 〜」を選択。

f:id:ki-wi:20200523222834p:plain

 

5-3.次の検索画面になるので「s」を入力し、「show All Definitions...」を選択。

f:id:ki-wi:20200523223243p:plain

 

5-4.全ての項目から選択が出来るようになるので「Go」を入力し選択。

Go以外の言語もここで選択すれば言語のインストールされたコンテナが作成できます。

f:id:ki-wi:20200523223450p:plain

 

5-5.なんか色々ファイルが出てくるけど右下の「Reopen in Container 」を選択ししばし待つ。初回はimegeのビルドがあるから少し長い。ちなみに他の環境からこの環境に戻るときもフォルダを開くをすると自動で「Reopen in Container 」が出てくるので選択するとこの環境が開ける。フォルダ毎に環境を作成していると考えるとわかりやすいのかな。

f:id:ki-wi:20200523223614p:plain

 

5-6.無事goを実行できた!!containerでインストールされたgoのバージョンは1.14.1。goファイルはこのフォルダ直下に作って実行できた。Ubuntuで作成したフォルダはコンテナの/workspace配下にマウントされている。ちなみに4-4で選んだ言語をgo以外のものにすると他の言語も簡単に環境が作れます。python3を試したけど簡単にできました。※実行時に必要ファイルがあればインストールのポップアップが出るかもです。

f:id:ki-wi:20200523225932p:plain

 

あとがき

dockerがずっと使いたくて機会がなかったので今回使えてよかった。なかなか手間取った。。 今回ローカルの仮想環境上に立てたけどリモートサーバに構築し接続するのもやってみたいですね。

 

 

 

5/25懺悔

当初UbuntuOSの環境構築の際にGolangはインストールしていなかったのです。最初は普通に使えていましたが、使っていたら下記エラーが出てしまいました。使えるけど気になって調べるとUbuntu側にもGolangのインストールをすると解消しました。取り急ぎgolangインストールの旨を構築手順に追加しました。

github.com

 

 

Raspberry Pi 3 Model BとOpenMediaVaultでtime machineサーバーを構築した

突然だけども僕はMacBook Pro (13-inch, Mid 2012)を使っている。

こんな感じの構成だ。中のストレージはSSDHの2TBで700GBくらいの使用状況。

ハードウェアの概要

機種名: MacBook Pro
機種ID: MacBookPro9,2
プロセッサ名: Intel Core i5
プロセッサ速度: 2.5 GHz
プロセッサの個数: 1
コアの総数: 2
二次キャッシュ(コア単位): 256 KB
三次キャッシュ: 3 MB
メモリ: 16 GB

 

ずっとDELLの古いデスクトップPCにnetatalkTime Machineサーバーを運用していたのだがふと電気代が気になって調べた。DELL PCの消費電力は50wくらい(家にあったスマートプラグで調べた)。ファイルサーバとして24時間運用するには高いような気がしてきたのだ。下のサイトで調べた。月に1000円くらいかな??24時間入れられなかったので23時間59分で計算した。あとはDELL PCが邪魔になってきたのも大きいかも??

 

www.denkikeisan.com

 

家に余っていたRaspberry Pi 3 Model BでTime MachineサーバーとNASを構築した。NASGUIで操作したくて探すと、OpenMediaVaultが便利そうなのでそれにした。いろいろとmac側も時代の流れでsmb対応にもなっているみたいなのでsambaでやることにした。下記の記事を参考に構築しました。ありがたや。。ストレージはHITACHI 2TB HDDをext4でフォーマット、BUFFALO 4TB HDDはntfsで運用していたのでそのままラズパイにつなげた。 2TBをTime Machine、そして4TBはNASだ。 

 

qiita.com

 

今回使用してうまくいった環境 

macOS High Sierra(10.13.6)

Raspbian Buster Lite(Kernel version:4.19)

OpenMediaVault(Release: 5.4.6-1)

 

簡単な構築の流れ

1.Raspbian Bluster Liteのダウンロード

2.SDカードにOS imageの書きこみ(Etcherを使用)

3.作成したSDカードBoot配下にsshファイルを作成

4.ラズパイにSDを挿入し、HDD,LANケーブルを繋ぐ

5.macのterminalからコマンド”ssh pi@raspberrypi.local”でラズパイにssh接続

6.ラズパイのパスワード設定及び、IPアドレスの固定

7.OpenMediaVaultをインストール

8.固定したIPアドレスmacプラウザからOpenMediaVaultへ接続

9.OpenMediaVaultのsmb設定

10.設定がうまくいっていればmacのTime Machine環境設定に該当HDDが出ているので選択

 

構築中に困ったこと

・ラズパイのSDが中々認識しなかったのでSDカードを頑張って何回か出し入れしたら認識した。ヘッドレス設定したかったけど、確認のためhdmiでモニターに接続したので悔しかった。

・ラズパイに別PCで使用していたBUFFALO製(4TB)のntfsファイルシステムのHDDを差したけど中々マウント出来なかった。HDD自体はOpenMediaVaultで認識していて、色々調べていたのだが時間が経つといつの間にかマウント出来るようになった。権限の設定をし、無事NASとして使用出来ました。これも原因がわからず悔しかった。

 

あとがき 

とにかくサーバー作るのがどんどん簡単になってきているね。

OpenMediaValueはユーザー権限なんかも作りやすいので、複数人で使うNASをお金をかけずに作りたい小規模システムには最適なのではないでしょうか。

もっとスクショとか沢山取って貼ろう。。。

 

ちなみに下記3つの機器合計で消費電力は15wくらいになったよ。

・Rasberry pi 3 Model B

・HITACHI 2TB HDD

・BUFFALO 4TB HDD

 

追記

macの再起動後に接続エラーが発生し、timemachineのbackupに失敗していた。

パケット署名を無効にしたら治った。

appleサポートにsmb接続エラーについての記載あり。

https://support.apple.com/ja-jp/HT205926

 

 

アウトプット頑張る

久々の投稿

 

最近いろいろ勉強してたが、アウトプットに注力しようと思う。

一人で雑多に学習していると論理的思考が出来なくなるような気がしたからなのだ。

無理はよくないので今日はこの辺で!!

CentOS7でGoogleChromeが開けなくて困った話

CentOS7でどうしてもGooleChromeが開けなくてまじ大変だった。

でもね一般ユーザーでログインしたら入れた。

どういうことかと言うとその時僕は"root"ユーザーでログインしてたんだ。Linuxで"root"ユーザーでのChromeはセキュリティ上使用出来ないみたい。俺は無知で馬鹿だったので再起動とか再インストールとかしたけどダメだった。

 

調べたら賢い人はコマンドで実行してた。

Google Chromeをrootで使う | 見よう見まねのブログ

 

このややこしさメジャー級。

 

なぜか"root"ユーザーが必要なのかと言うと"root"ユーザーでChromeリモートデスクトップが使いたかったのだ。

 

Virtualbox環境を"root"権限で構築してて一般ユーザーに設定移すのがめんどくさくて、、、

 

結果VirtualBoxの設定を一般ユーザー側にすることにする、まだやってないけど。

 

2020年5月20日追記

これはユーザー権限で仮想環境構築したのちにまたルート権限でVNC接続環境を構築しました。リモデ環境はもっと進歩すれば良いですね〜。