aokcub::Blog

/PIC|dsPIC|Perl/

Gitlab + Nginx + SSL + サブディレクトリ

で動かしたかったので設定した。結果。です。

https://example.com/gitlab みたいに。

GitlabをインストールするとNginxも一緒についてくるみたいですが,もともとサーバにはNginx入れててSSL対応もしていたので,それは使わずに。

いろいろ探ってたけど,公式のドキュメント見たらかなり楽にできました。

環境

既にNginx+SSLでwebページ運用中の前提で書きます。

GitLabインストール

こちらを参考に。1番の部分はすでに入っていたので2番からやりました。
Installation methods for GitLab | GitLab

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
sudo yum install -y gitlab-ce

設定

こちらを参考に。「Using a non-bundled web-server」の部分です。
NGINX settings - GitLab Documentation

Nginxユーザにgitlabのグループを与えてやって,Nginxから飛ばすようにすればよいらしい。(雑)

sudo usermod -G gitlab-www nginx

sudo vi /etc/gitlab/gitlab.rb

Gitlabのアドレス指定を書き換える。

external_url 'https://example.com/gitlab'

以下の部分を書き換えてバンドルのNginxを殺し,既存のNginxからアクセスを受け付けるようにする。

nginx['enable'] = false
web_server['external_users'] = ['nginx']

ページ中の3, 4番は同じサーバ内で動かす場合は不要っぽい。

nginx.conf設定

こちらを参考に。
web-server/nginx · master · GitLab.org / GitLab recipes · GitLab
もともとHSTS有効にしていたので,一番下のgitlab-omnibus-ssl-nginx.confを使いました。

upstream gitlab-workhorse {
  server unix:/var/opt/gitlab/gitlab-workhorse/socket fail_timeout=0;
}

Gitlab用にlocationディレクティブを追加

location /gitlab {
    root /opt/gitlab/embedded/service/gitlab-rails/public;

    proxy_http_version 1.1;
    client_max_body_size 0;
    gzip off;

    ## https://github.com/gitlabhq/gitlabhq/issues/694
    ## Some requests take more than 30 seconds.
    proxy_read_timeout      300;
    proxy_connect_timeout   300;
    proxy_redirect          off;

    proxy_set_header    Host                $http_host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-Ssl     on;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto   $scheme;
    proxy_pass http://gitlab-workhorse;
}

起動

sudo gitlab-ctl reconfigure
sudo gitlab-ctl start

起動後数分は502が出るようです。 f:id:aokcub:20171105013757p:plain

めでたしめでたし。続きは明日にして寝る。 f:id:aokcub:20171105013837p:plain

めも:Getopt::Longで一つのオプションに複数の引数を受け取る

タイトルの日本語が怪しい。


最近ちょっとしたCG関係のツール作ってて,

perl ~/convert_layers.pl  -i input.exr -w 16394 8192 4096

みたいな形で,複数の数値受け取りたいということがありました。

perl ~/convert_layers.pl  -i input.exr -w 16394 -w 8192 -w 4096

ではなく。



CPAN読むと,こうすればできそう。

  use Getopt::Long qw/:config posix_default no_ignore_case gnu_compat bundling/

  ...

  my %opts = (
    input => 'temp.0001.exr',
    output => 'out',
    width => [],
  );
  GetOptions(\%opts, (
    "input|i=s",
    "output|o=s",
    "width|w=i{,}"
  ));

結果
f:id:aokcub:20160723001526p:plain
oh...?



結論。オプションからbundlingを消せ。

  use Getopt::Long qw/:config posix_default no_ignore_case gnu_compat/

  ...

オプションの意味理解せずに使ってたことバレちゃう。
f:id:aokcub:20160723001422p:plain
やったね!



以上

NDS#39 Niigata.pm tech talkにいってきた

こんにちは。2週間遅れですが、年越し前に書いちゃいます。

12月13日に開かれたNDS#39 Niigata.pm tech talkにいってきました。

NDS#39 Niigata.pm tech talk - connpass

2年ぶり...なのかな?

本当はちょっとした勉強をかねて空路で行くつもりでしたが、あいにくの悪天候で陸路切り替え。 案の定、乗る予定だった便は新潟空港へ着陸できず小牧へ引き返していました。乗っていたらたぶん懇親会しか参加できなかった。

f:id:aokcub:20141213100834j:plain

太平洋側はこんなにいい天気だったのに...

f:id:aokcub:20141213123443j:plain

トンネルを抜けたら...

f:id:aokcub:20141213130007j:plain

新潟の冬、懐かしいですね。

で、本題(にすべき)トーク内容なんですが、他の方のブログ参照でお願いします、というか、残念ながらあまり追いつけなかった;;;;

というわけでここから雑文。

実はこの2年くらいプログラミングから意識が遠ざかってました。就職してからの仕事が、無縁ってほどじゃないけどソフトウェアから離れたところになってて、そのせいかなんとなく。(そこでちゃんとやらない奴はダメだ、と言われるかもしれない。それはその通りだと思う) 今年CGばっかり作ってて、そのプロセス最適化のために細かいのを書いてたりはしたけど、完全にCGの人になってた。

でもNUTにいたころから新潟の勉強会コミュニティがすごく好きで、そこに行けばなにかトリガが出来るんじゃないかなーって思いながら参加しました。結果、まだ完全にはってわけじゃないですが、少しずつ気持ちが戻ってきた。

猫型さんやcivicさんをはじめ皆さん暖かく迎えてくれて本当によかった。本当に嬉しかった。ありがとうございます。 次回は「ちょっとこんなの作ってみた」くらいでもいいから話せるネタを持っていきたい。

何書きたかったんだ自分。うん、Niigata.pm/NDS最高ってことです。

というわけでこれから年越しコーディングします。皆さんよいお年を!

ひとつのPainted Shaderで複数の植物を植えわけ

実験してみてうまくできたので書いてみた的な話,

ノードネットワークを使うものは初心者向けじゃない気がするのであのシリーズには入れない...

  1. 地形を作った後Painted Shader起動.Colorを変えて赤(255, 0, 0),緑(0, 255, 0),青(0, 0, 255)でそれぞれ塗り塗り.

f:id:aokcub:20130526180940j:plain

f:id:aokcub:20130526180946j:plain

  1. ノードネットワーク上で右クリック→Create Function→Convert→X to scalarしてX to scalarを追加.同様にY to scalar, Z to scalarを追加. それをPainted Shaderのノードに接続.

f:id:aokcub:20130526180951j:plain

  1. Populationを3種類追加.このままだと同じところに3種類ごっちゃに生える.

f:id:aokcub:20130526181015j:plain

  1. 3種類のPopulationに,Use density shaderのところからさっき追加したX to scalar, Y to scalar, Z to scalarをそれぞれアサイン. 今回だとAL12にはX,AL01にはY,AL05にはZみたいな感じ.

f:id:aokcub:20130526181021j:plain

  1. 再度インスタンス生成

f:id:aokcub:20130526181029j:plain

  1. レンダリングするとこんな感じで,Painted shaderの塗り分けに合わせて植物の生えるエリアが変わってる.

f:id:aokcub:20130526181043j:plain

当然だけどDistribution shaderなどとblendすれば高さや傾きなどの条件も加えることができる.

今回は3種類だったけどたぶんもっと増やすことはできる.今度やってみる.

いじょう.

Painted Shaderを使ったPopulationの分布指定

Terragen2 入門 もくじ

はじめに

今回はPainted shaderでお絵描き感覚で草木を生やす方法について書きます. Painted shaderはβ版で追加された機能です.というともう4年くらい前の話ですが,Terragen 2に関する日本語チュートリアル記事はβ以前にリリースされていたTechnology Preview時代に書かれたサイトが多いため,ほとんど取り上げられていません.日本語化マニュアルさんを除くとある程度解説したのは日本語サイトでは初.だと思う.

Painted shader自体はオブジェクトだけでなく地形,雲,陰影等どこでも使えるShaderです.本来ならShaderがどのように働いているのかを取り上げてからにすべき気がしますが,それはまた今度書くつもりです.気力があれば(おい

「ちょうてきとうなTerragen 2かいせつ」シリーズ第11話の続きみたいな感じですが,少し応用になってあのシリーズのコンセプトに反するかなと思ったので別で. あと,あの雰囲気でこの話を書くのちょっと辛かった

試してみる

さて,このシーンでは今,BL02a_Sweet_Birch.tgoのpopulationが置かれています.

1

ここでこのような順序でPainted shaderを作り,そのダイアログを開きます.

2

3

出ましたね.とりあえず何も考えずに"Brush size in meters"を100に,"Flow"を1にしてください.

4

5

それができたら,3Dプレビュー上部のボタンから下の図のようにたどってください.

6

なんか雰囲気変わりましたね.

7

そのまま地形の上でマウスの左ボタンを押しながら動かしましょう.

白い線が引けましたね.

8

線を消そうと思ったら"Eraser mode"に切り替えることで消せます.もう一度描くにはその上の"Paint mode"に戻します.

9

10

全部消したければPainted shaderダイアログの"Clear"を押せばいいです.

11

さて,今このままだと線を少し引くたびにプレビューの再描画が始まり,少しうざいです.そこで,プレビューの描画が落ち着くまで少し待ちます(だいたいRendering detailが80になるくらいまで)

12

そこまで待ったらプレビュー左上の"Pause"ボタンを押します.すると,プレビューのレンダリングが一時停止します.

13

その状態で好きなように線や絵を描きましょう."Brush size in meters"を変えると線の太さを変えられます.

14

終わったらプレビュー左上の"Pause"ボタンを押し,描画を再開させておきます.そして,"Stop painted shader"でPainted Shaderから抜けます. ここまでやったらもう何が起きるか予想がつくと思いますが,"Populate Now"ボタンで木を生やしましょう.

15

はい,この通り.

16

"Invert density shader"にチェックを入れることで,「塗ったところには生やさない」こともできます.

17

実例

Painted shaderを使った草木の配置の実例を示すために,ちょっと前にアップしたこのCGを取り上げます.

Waterfront (deviantART)

このシーンでは6種類の草花,木をPopulationを使って配置しています(注:フリー版では一度に使えるのは3種類までです).

20

このうち,1, 2, 6についてはDistribution shaderを使って高さを制限するだけでできますね.しかし3, 5についてはそれではできません.

そこでPainted shaderを使っています.

3番の草(カメラの後方上部から俯瞰):

21

5番の花(同上):

22

さて,ここまではDistribution shaderまたはPainted shaderをそれぞれ単独で使っています.ここで,4番の草について見てみましょう. 下の図は4番の草の配置です.

23

Distribution shaderを使って水面の少し上から,1番の木が生え始める高さの少し上までの範囲に配置しています.その上で,5番の花が生えているところは生やさないようにしています.これは,Distribution shaderで4番の草に高さの範囲を指定したうえで,"blend by shader"として5番の花の"Painted shader"を反転したもの(Invert blendshaderのチェック)して指定しています."blend"なので,つまりこの二つのshaderが混ぜ合わさった結果になります.

24

25

<補足>

実際の動作としては,まず"Painted shader"の範囲を見ます.その反転なので,「ここには生やさないぞ!」という情報が"Distribution Shader"に伝わります.そして,その生やさない範囲と,"Distribution shader"で指定した範囲(ここでは高さ)の情報が合わさり,上の図のようにぽっかり空いた空間が生まれます.

</補足>

このように,Painted shader(やDistribution shader,または他のシェーダー)をうまく組み合わせることで,植物の複雑な棲み分けを実現することができます.

Painted shaderノードのパラメータ

書こうと思ったけど日本語化マニュアルさんの"シェーダー"の章に説明があったので省略. 普通は"Use absolute brush"を使って描くことになると思います.

30

公式WikiでのPainted shader nodeの説明はこちら.

http://www.planetside.co.uk/wiki/index.php?title=Painted_Shader

その他

Painted shaderはpopulationだけでなく,大気やシェーダーについても使うことができます.これらについてはやったことが無いので触れません.このあたりのページが参考になると思います(英語).

http://www.planetside.co.uk/wiki/index.php?title=Painted_Shader_Guide

http://www.mrlamppost.com/tg2/guides/paintsky.htm

昔のCGIを動かしたいときの

メモ。

Niigata.LL用に過去に書いたCGIをPlack::CGI::WrapCGIで動かしたくて、

$ cpanm Plack その他いろいろ

psgiかいて(参考

# app.psgi
use Plack::Builder;
use Plack::App::WrapCGI;
use Plack::App::File;

builder {
    mount "/cgi_bschlib/index.cgi" => Plack::App::WrapCGI->new(script => './cgi_bschlib/index.cgi', execute => 1)->to_app;
};

じっこう

$ plackup -r
HTTP::Server::PSGI: Accepting connections at http://0:5000/
Can't locate URI/Escape.pm in @INC (@INC contains:/etc/perl/usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2/usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at /home/taka/pl/cgi_bschlib/index.cgi line 5.
BEGIN failed--compilation aborted at /home/taka/pl/cgi_bschlib/index.cgi line 5.

おおう? モジュールがないって言われてるけど、@INCがシステムPerlの5.14.2のほうになってる。 実行(したい)環境はplenvで入れた5.16.4。

なんでー?

ってちょっと悩んでたけど

動かしたいCGIのshebang

#!/usr/bin/perl

のままでした。

#!/usr/bin/env perl

にする。

疑問

本当に書き換える必要あったのだろうか...

いじょう。