Vagrant + GitLabの環境構築

1. はじめに

4月になって新しいプロジェクトが始まります。
正確には、4月から始まる予定だったのですが、残念なことに実質開始できるのは5月からという状況に。。。
ただ、VCSやITSなどの開発環境の構築などやれることはあるので、ちまちまとやっていこうかと考えています。
そこで、

  • 残念ながら今の部署にあるのはsvnの環境だけということ
  • 新しいプロジェクトは、ぼく+1名のミニマムな体制になりそうなこと

ということから、お手軽にGitLabを仮想環境上に構築してしまおうと思い立ちました。
ここでは、はじめてのVagrant、はじめてのGitLab、加えて少しおまぬけなぼくということで少しハマったところをまとめておきます。

2. 前提条件

  • Windows上に構築できること

(ぼくに与えられた端末がWindowsなもんで)

3. 手順

1. Vagrant + VirtualBox

プロバイダーにはVirtualBoxを使用します。

公式

Vagrant by HashiCorp

Oracle VM VirtualBox

2. GitLab on Ubuntu

以下のサイトから、GitLab on Ubuntuな box を探し出して使用することにしました。

A list of base boxes for Vagrant - Vagrantbox.es

> mkdir -p vagrant\gitlab
> cd vagrant\gitlab
> vagrant box add gitlab https://atlas.hashicorp.com/webysther/boxes/gitlab-ce-ubuntu-x64-14.04/versions/1.0/providers/virtualbox.box
> vagrant init gitlab

上記で作成した vagrant\gitlab フォルダにあるVagrantファイルを以下のように修正する

     config.vm.network "public_network", ip: "192.168.33.10" # ネットワークの設定はそれぞれの環境に適切なもので

最後に、

$ vagrant up

これで仮想環境を起動して、ブラウザで

http://192.168.33.10

にアクセスすればよいはずなのですが。。。

502エラー

f:id:o_masaaki:20170405110618p:plain

すんなり行くと思ったのに(´Д⊂グスン
何が起こっているのか調べるために、MSYSなどのsshを使用できる環境から

$ ssh vagrant@192.168.33.10
...
$ sudo gitlab-ctll status

してみると、

down: postgresql: 1s, normally up, want up; run: log: (pid 986) 486s

PostgreSQLが起動していない。
そこで、

$ sudo tail -n 4 /var/log/gitlab/postgresql/current

ログを確認してみると、

2017-04-04_09:14:28.61833 FATAL:  could not create shared memory segment: Cannot allocate memory
2017-04-04_09:14:28.61833 DETAIL:  Failed system call was shmget(key=5432001, size=1086947328, 03600).
2017-04-04_09:14:28.61833 HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory or swap space, or exceeded your kernel's SHMALL parameter. You can either reduce the request size or reconfigure the kernel with larger SHMALL. To reduce the request size (currently 1086947328 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
2017-04-04_09:14:28.61833       The PostgreSQL documentation contains more information about shared memory configuration.

だって。
なので、もう一度 vagrant\gitlab フォルダにあるVagrantファイルを以下のように修正する

     config.vm.provider "virtualbox" do |vb|
       # Display the VirtualBox GUI when booting the machine
       vb.gui = false
       # Customize the amount of memory on the VM:
       vb.memory = "2048"
       vb.cpus = 2
     end

仮想環境を再起動します。

$ vagrant halt
$ vagrant up

ブラウザで

http://192.168.33.10

にアクセスすると、GitLabのスタートアップ画面が表示されました。

f:id:o_masaaki:20170405113249p:plain

実は、仮想マシンのメモリ容量は事前に確認はしていたんです。
ネットには、

GitLabを動かすには1Gのメモリが必要ですよ~

てな情報があふれていたので、

vagrant init

で吐き出されたVagrantファイルの「vb.memory = "1024"」という記述を見て、メモリ容量は大丈夫という思い込みが失敗でした。

ところが。。。

ログインできない問題

rootアカウントでログインしようとすると、500エラーでログインできません。
GitLab公式見ても、rootアカウントの初期パスワードは「5iveL!fe」とあるのに(ノД`)シクシク

f:id:o_masaaki:20170405114430p:plain

仕方ないので、rootパスワードをリセットすることにします。

$ ssh vagrant@192.168.33.10
...
$ sudo gitlab-rails console production
     > user = User.where(id: 1).first # root アカウント設定モードへ
     > user.password = 'secret_pass' # 新パスワード設定
     > user.password_confirmation = 'secret_pass' # 新パスワード(確認用)
     > user.save! # 設定を保存
     > exit # コンソール終了

これでログインできました。

f:id:o_masaaki:20170405114832p:plain

2つのテーブルから複合キーが重複しないデータをExcelでマクロを使わないで抽出する方法を考えた

1. はじめに

2つのテーブルから複合キーが重複しないデータを抽出する方法を考えた。

2. 前提条件

お気軽に作業できるように、

  • DB(SQL)を使わない
  • プログラミングしない
  • Excel手作業でお手軽に(๑˃̵ᴗ˂̵)

3. 手順

1. 対象となるテーブルを用意する

f:id:o_masaaki:20170224114220p:plain

この例の場合、列「key」と列「value」が複合キー。
また、この方法では、列「key」と列「value」の値を文字列として結合するので、結合した文字列(複合キー)の一意性が満たされる(重複しない)必要がある。

2. 重複判定用の複合キー列を追加する

f:id:o_masaaki:20170224114250p:plain

重複判定用の複合キーの列を追加する。
複合キーの列には、以下のように各キーを&(アンパサンド)で結合する数式を入力する。
例) =B8&C8

3. 重複判定結果用の列を追加する

f:id:o_masaaki:20170224114417p:plain

他方のテーブルに複合キーが存在するか否かを判定結果の列を追加する。
判定結果の列には、以下のように他方の複合キーの範囲に複合キーと一致するデータの件数をカウントする数式を入力する。
例) =IF(COUNTIF($F$33:$F$52,F9)>0,“Yes”,“No”)
  COUNTIF($F$33:$F$52,F9)
    で、指定した範囲($F$33:$F$52)に期待する複合キー(F9)が含まれる件数を取得する。
  IF(…>0,“Yes”,“No”)
    で、重複していたら"Yes", 重複していなければ"No"を表示する。

正直、IF文の部分は見た目だけの処理なんで不要

4. 他方のテーブルに複合キーが存在しないデータを抽出する

f:id:o_masaaki:20170224114528p:plain f:id:o_masaaki:20170224114625p:plain

フィルターを使用するなどして、他方のテーブルに複合キーが存在するか否かを判定する列がNoのデータを抽出する。

Adobe Readerしかインストールされていない端末で特定のページのみを受け渡す方法

1. はじめに

職場などの自由な環境でない場合(ツールがインストールされていない、フリーソフトを使用できないなど)に、PDFファイルの特定のページを他者と共有したい場合の手順を共有する。

2. 前提条件

  • 共有したファイルを受け取った他者が印刷できること
  • OS:Windows
  • Adobe Readerインストール済み
  • その他、PDF編集用の便利なツールがインストールされていない  便利なツールがインストールされている場合は、それを使用してね(はあと)

3. 手順

1. 共有したいPDFファイルをAdobe Readerで開く

f:id:o_masaaki:20170224091548p:plain

2. 印刷ダイアログを開く

f:id:o_masaaki:20170224092032p:plain メニュー「ファイル」-「印刷」を選択する。
もしくは、Ctrl+Pで印刷ダイアログを開く。

3. プリンターを選択する

f:id:o_masaaki:20170224092045p:plain

3-1. プリンターを選択する

プリンターのプルダウンメニューで「Microsoft XPS Document Writer」を選択する

3-2. 印刷するページを選択する

共有するページを表示している場合は「現在のページ」を選択する。
共有するページを表示していない、もしくは複数ページを共有したい場合は「ページ指定」を選択して、印刷範囲を指定する。
ex.) 3ページから5ページを抜き出したい場合は、「3-5」と指定する。

4. 印刷する

f:id:o_masaaki:20170224092138p:plain 印刷ボタンを押下する。

5. XPSビューアーで開く

f:id:o_masaaki:20170224092212p:plain 保存したファイルをダブルクリックする(だけで開くはず)。

群青の夜の羽毛布

「どうしてあなたは、いくつになってもそうなの?」母は苛々した調子で言った。語尾が厳しくさとるの胸を刺す。「話があるのなら、そう言ってくればいいじゃない。機嫌を窺うみたいに、ちらちら人の顔を見て。どうしてそう卑屈なのかしら。」「…ごめんなさい」「どうしてそこで謝るの? もっとハキハキしてちょうだい」再び「ごめんなさい」が喉まで出かかって、さとるは急いで飲み込んだ。

 

 

ここで紹介されていて衝動的に購入した本

honcierge.jp

ストーリーは、ぼくが年齢を重ねているおかげで予想のつく内容ではあったんやけど、登場人物のバックグラウンドであったり、それぞれが抱えている闇や関係性が丁寧に描かれていてよくできた作品やった。
人間の狂気がテーマに描かれているだけあって非常に重い雰囲気で物語が進んでいき、読み進めていくのが辛くなるんやけど、不思議とストーリーの中に引き込まれてしまいって一気に読みきっちゃった。

また狂気とは別に、ぼくには主人公であるさとる(という名の女性。なぜ男性の名前なのかについても作中で描かれている)の置かれた境遇や彼女の持っている性質なのか性格なのか、それがどことなく気になった。

女の子達は、静かにさとるを無視した。そして気が向いた時に、からかったり嗤ったりした。
もう一度読むかどうかと問われると難しいな〜。今すぐ読み返すというのはちょっとしんどい。時間をおいてまた年齢を重ねた後でなら、また異なる味わいを楽しむことができるのかもしれない。 

 

 

Install archlinux on VirtualBox

archlinuxをインストールして、Xを起動するまでの作業メモ

基本的には、Installation guide - ArchWikiで書かれている内容のままです~

Pre-installation

enable efi mode

# loadkeys jp106

Verify the boot mode

# ls /sys/firmware/efi/efivars

Connect to the Internet

# ping -c 3 www.archlinux.org

Update the system clock

# timedatectl set-ntp true

以下のコマンドで、設定内容を確認できます~

# timedatectl status

Partition the disks

# cgdisk /dev/sda

適当にパーティションを作成

たとえば。。。

 

 

Format the partitions

# mkfs.vfat -F32 /dev/sda1

# mkfs.ext4 /dev/sda2

Mount the file systems

# mount /dev/sda2 /mnt

# mkdir /mnt/boot

# mount /dev/sda1 /mnt/boot

Installation 

Select the mirrors

# vim /etc/pacman.d/mirrorlist

## 2yy で2行コピー
## P でペースト
## ^ で行頭に移動
## gg でファイルの先頭に移動

# pacman -Syy

Install the base packages

# pacstrap /mnt base base-devel

Configure the system

Fstab

# genfstab -U /mnt >> /mnt/etc/fstab

Chroot

# arch-chroot /mnt

Time zone

# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# hwclock --systohc

Locale

# vi /etc/locale.gen

## Uncomment en_US.UTF-8 UTF-8 and ja_JP.UTF-8 UTF-8

 

# locale-gen

 

# vi /etc/locale.conf

--------------------------------------------------
LANG=en_US.UTF-8
--------------------------------------------------

 

# vi /etc/vconsole.conf

--------------------------------------------------
KEYMAP=jp106
--------------------------------------------------

Hostname

# echo {hostname} > /etc/hostname

 

# vi /etc/hosts
--------------------------------------------------
127.0.0.1 localhost.localdomain localhost}
::1 localhost.localdomain localhost}
127.0.0.1 {hostname}.localdomain {hostname}
--------------------------------------------------

Network configuration

# systemctl enbale dhcpcd  

Root password

# passwd
New password: {新しいパスワードを入力}
Retype new password: {新しいパスワードを再入力}

Boot loader

# pacman -S grub dosfstools efibootmgr
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck
# grub-mkconfig -o /boot/grub/grub.cfg
# mkdir /boot/EFI/boot
# cp /boot/EFI/arch_grub/grubx64.efi /boot/EFI/boot/bootx64.efi

Reboot

# exit
# umount -R /mnt
# reboot 

 ただし、rebootしちゃうとインストールディスクを抜くタイミングがなくなるんで、

# shutdown now

してインストールディスクを抜いてから起動した方がいいかな?

System administration

Users and groups

# useradd -m -G wheel -s /bin/bash {user name}
# passwd {user name} 

Privilege escalation

# visudo
--------------------------------------------------
## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL
--------------------------------------------------

Package management

yaourt

$ sudo vi /etc/pacman.conf
--------------------------------------------------
#[testing]
#Include = /etc/pacman.d/mirrorlist

[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch
--------------------------------------------------

 

$ sudo pacman -Syy yaourt

VirtualBox guest additions

Install the Guest Additions

$ sudo pacman -S virtualbox-guest-utils
:: THere are 2 providers available for VIRTUALBOX-GUEST-MODULES:
:: REpository community
1) virtualbox-guest-dkms 2) virtualbox-guest-modules-arch

Enter a number (default=1): 2 <= 2 を選択する

Load the Virtualbox kernel modules

$ sudo modprobe -a vboxguest vboxsf vboxvideo

GUI(Xorg)

Xorg

$ sudo pacman -S xorg-server xorg-server-utils xorg-xinit xterm
$ startx

f:id:o_masaaki:20170124131744p:plain

Xの起動を確認できたら、Xを抜ける

$ exit

  

あとは、awesome - ArchWikiなり、xmonad - ArchWikiなり入れてけばいっかな?

Install archlinux on VirtualBox - prologue -

1年近く自社を離れて作業して久しぶりに戻ってきたら、新しいノートPCを与えられました。

なもんで、環境を作り直したときの作業メモメモ。

Windowsさんがステキすぎるんで、相変わらずArchlinux on VirtualBoxです。

名前とオペレーティングシステム

仮想マシンに適当な名前をにつけます。

f:id:o_masaaki:20170124104928p:plain

モリーサイズ

あとでGUI環境も構築するんで、メモリはできるだけ割り当てたい。。。 

f:id:o_masaaki:20170124104942p:plain

ハードディスク

 ハードディスクを追加~

f:id:o_masaaki:20170124110246p:plain

ハードディスクのファイルタイプ

 デフォルトでOK

f:id:o_masaaki:20170124110300p:plain

物理ハードディスクにあるストレージ

 デフォルトで進んじゃえ~

f:id:o_masaaki:20170124110313p:plain

ファイルの場所とサイズ

 用途に合わせて。。。

f:id:o_masaaki:20170124110354p:plain

EFIを有効化(一部のOSのみ)

f:id:o_masaaki:20170124135527p:plain

起動ディスクを挿入

 Arch Linux - Downloadsからインストールディスクをダウンロードして、仮想マシンに挿入~

f:id:o_masaaki:20170124110433p:plain

 

 起動

途中、真っ暗な画面で固まるけど、焦らない。しばらく我慢していると1~2分でプロンプトが表示されるから大丈夫

f:id:o_masaaki:20170124115828p:plain

これからがインストール本番!!

2016年にぼくに起きたこと

2016年も残すところあと数時間。

振り返ってみると今年は素敵な出会いがたくさんあったなあ(´ ▽`).。o♪♪

今の会社に転職してからずっと自社で組込システムの開発をしてたんやけど、今の会社に移ってから初めて客先常駐での作業をしてん。しかも今まで開発したことのないWebサービスの開発。多少...いや、かなりの不安を感じながらも初めてづくしの開発にワクワクもしてたっけ。

そこで出会ったお客さんたちはとても素敵な人たちで、その人柄、スキル、働き方にいたるまでとてもいい刺激を受けたな。そこで知り合った人に誘われてフットサルを再開することができたことも、間違いなく今年の大きな出来事の一つやった。

その人とは、一緒にフットサルをした後、お酒を飲みながらお互いが持っている理想のエンジニア像やリーダー論、自分たちのキャリアプランについて語り合ったことは、とてもいい経験になった。この現場での作業は半年ちょっとやったけど、間違いなくこれまでのエンジニア人生の中で一番の経験。

また、高校の同級生たちと再会できたことも大きかったな。

これまでは意識的に高校の頃のいろんなことを避けてたように思う。

でも、同級生に誘われた飲み会に思い切って参加したことで、高校時代には交流することの無かった子たちとたくさん知り合うことができた。

同じクラスやったおっさん連中との再会も楽しかったし、初めましてやと思っていた子が、実は幼稚園、小学校の途中まで同じやったこと。しかも同じ団地内に住んでいたことまで分かったりして驚いた〜

改めて泉陽の女の子たちはかわいらしくて素敵な女の子ばっかりやと再認識させられたっけ(๑˃̵ᴗ˂̵) 同級生の女の子たちからは、口を揃えて高校時代のぼくは「話しかけたら怒られそうやった」と言われてしまい、今更ながらショックを受けたわ(−_−;)

おっさん連中は...まあ、あんなもんやな(^^;;

サッカー部の連中とも少し会うことができた。それが縁で11人のフルコートのサッカーも再びやることができたのも嬉しかったヽ(´▽`)/ やり始めた頃は、これまでの不摂生と体力のなさからヘトヘトになってしまったけど、今ではもう…相変わらずヘロヘロやな、やっぱり( ̄▽ ̄;)

でも、これを機会にだいぶ体が元に戻りつつあるように思う。これからも継続して呼んでもらえるように、体を作っていきたいと思えるようになったし。

今年は前半に受けたよい影響からか、今までもぼくでは考えられないような挑戦もした。あろうことか、コミュ障のぼくがTOCfE国際認定プログラムのファシリテーター(グループサポーター)に応募しちゃった(//∇//)テへ いろいろと大変なことも多かったんやけど、TOCfEに携わる人はほんといい人ばかり。みなさんに助けられたおかげで、なんとかやりきることができていい経験になったな〜 この経験がこれからのぼくをいい方向に変えてくれると嬉しい♪( ´▽`)

 

これまでいいことばかりを挙げてきたけど、もちろん、いいこともあれば悪いこともあるわけで...

パワハラのようなことが平然と行われるプロジェクトに送り込まれた時には、随分としんどい思いをした。いろいろあって途中でそのプロジェクトから抜けることになったんやけど、残されたメンバーたちは引き続きしんどい思いをしているということを思うと、とてもつらい結果になった... こんな残念な結果にならへんように、これまでいろいろと学んできたはずやのに、それを活かせなかったことが悔しかった|||(-_-;)||||||

人の悪意に気づかないふりして、でも、気づいてしまった時の恐怖や絶望、虚無感に打ちひしがされそうになったりもしたけど、支えてくれる人の存在がほんとにありがたかったな。

 

最後にもう一つ、今年は忘れられない出会いが。

ぼくは中学生の時もサッカー部で、相変わらずヘラヘラとサッカーをしてた。その時の同級生に、とても優しくてみんなから愛されるキャラクターの同級生がおったんよ。その当時からぼくは無愛想やったらしくて、その子はぼくのところに駆け寄ってきて、「おかき、怒ってるの?」と屈託のない笑顔で聞いてきたっけ。何も考えてなくボーっとしていたぼくは不意を突かれて、「う、ううん、なんも考えてへんねん(//∇//)テへ」とこたえるのが精一杯やったなあ。

ドリブルが得意やったその子とはお互いにフェイントを考えて試しあったりしてたっけ。今でもその子が考えた「バナナフェイント」は鮮明に覚えていて、最近再開したフットサルやサッカーで「バナナフェイント」を懐かしんで練習しててん。その子とは同じクラスになったことはなかったからサッカーの思い出がほとんどなんやけど、今年またフットサルとサッカーを再開したことでいろいろと思い出してたわ。

そんな矢先、高校の同級生とその子のお姉さんとが知り合いやということが分かって、紹介してもらってん。当時、同級生やった他のサッカー部員とも再会できたし、本当、世間は狭いなと思ったな。

残念ながらその子との再会は叶わなかったけど、嬉しい出会いになったわ。

 

2016年は間違いなくいい年やったと振り返ることができる一年やった。

2017年もこんな感じで振り返ることができる年になりますように。