2016年8月16日火曜日

GnuCashで日本の株とか


素晴らしい物を作っている人がいたので使い方をメモっておく。

http://liosk.blog103.fc2.com/blog-entry-185.html
http://liosk.blog103.fc2.com/blog-entry-204.html
日本の株価とかがgnucashで取って来ることができる。

最新は↓にあるようだ。
https://github.com/LiosK/Finance--Quote--YahooJapan

インストール方法も書いてあるけど、
ユーザの環境変数をいじらないと行けないので、
どっちかというと古いやり方の方が好み。
よって以下のようにした。


1. GnuCash / Finance::Quoteインストール


# apt install gnucash

(libfinance-quote-perlは勝手に入るようだ。)

2. Finance::Quote::YahooJapanインストール


↓でインストール先を調べておく。
$ dpkg -L libfinance-quote-perl

必要なファイルはYahooJapan.pmだけのようなので、ダウンロードして以下に置く。

/usr/share/perl5/Finance/Quote/YahooJapan.pm

で、これが読み込まれるように/usr/share/perl5/Finance/Quote.pmの184行目あたり、
YahooJapanを追加する。

             Yahoo::USA YahooYQL ZA_UnitTrusts YahooJapan/; }

あとはgnucashを起動したら読み込まれているので、↓のやり方で使える。
http://liosk.blog103.fc2.com/blog-entry-185.html

2016年8月6日土曜日

apache2のuserdirとsuEXEC


Ubuntu 16.04 LTSを新たに入れたところsuphpはすでに無くなっていたようだ。興味がなくなったのでやめるっぽい。(勘弁してくれ)
ずっとアップグレードで運用していたのでわからなかった。
以前やっていた方法ではダメなのでepgrec再構築を兼ねてメモを残す。

userdir上でphpをユーザ権限で動かそうとして色々やってみたがどうにもならん。意味不明すぎる。
仕方ないのでvirtualhostで動かした。

方針

1. virtualhostを新たに定義、使いたいユーザだけSuexecUserGroupで実行ユーザを決める。
2. ユーザ用のcgi-binを用意、phpのラッパーを置く
3. phpをそのラッパーで開く

インストール


apache2
apache2-suexec-custom


(libapache2-mod-suphpはお亡くなりになったらしい)
mysql-server
php
php-cgi
php-mbstring
phpmyadmin

virtualhost

/etc/apache2/sites-available/001-user.confを作る

# conf-enabled/serve-cgi-bin.confがベース -------- ①
<IfModule mod_alias.c>
    <IfModule mod_cgi.c>
        Define ENABLE_USR_LIB_CGI_BIN
    </IfModule>

    <IfModule mod_cgid.c>
        Define ENABLE_USR_LIB_CGI_BIN
    </IfModule>




    <IfDefine ENABLE_USR_LIB_CGI_BIN>
        # ユーザごとのcgi-binをつくる
        ScriptAliasMatch ^/~(.*)/cgi-bin/(.*) "/home/$1/cgi-bin/$2"
        <Directory "/home/*/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +FollowSymlinks
            Require all granted
        </Directory>
    </IfDefine>

</IfModule>

<VirtualHost *:80>
    # 000-default.confとuserdir.confがベース
    DocumentRoot /var/www/html
    ServerName hogehoge # サーバ名
    SuexecUserGroup user1 user1 # suexecで動かすユーザ
    UserDir public_html
    UserDir disabled root

    # 000-default.confとuserdir.confがベース
    <Directory /home/user1/public_html>
        AllowOverride All
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI FollowSymLinks
        <Limit GET POST OPTIONS>
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            Require all denied
        </LimitExcept>
    </Directory>
</VirtualHost>



※/etc/hostsにサーバ名を書いて、それでアクセスする


userdir.confを編集

virtualhostの設定と重複するので、userdir.confの方のuserdirを無効にする。

/etc/apache2/mods-enabled/userdir.conf を編集
<IfModule mod_userdir.c>
    UserDir public_html
    UserDir disabled root user1 #ユーザを無効にする。


suexec


suexecを有効にする。
a2enmod suexec
 suexecでphpを実行する。ユーザディレクトリごとにphpをおいてそれを実行することで、phpをユーザ権限で動作させる。
/etc/apache2/suexec/www-dataを以下のように設定

/home
public_html
①で設定したcgi-binにphpのラッパーを置く
・実行権限をつける
・他ユーザからの書き込みアクセスはNG: chmod g-w

cat php
#!/usr/bin/php-cgi

.htaccess

AddHandler cgi-script .cgi
AddHandler php-script .php
Action php-script /~user1/cgi-bin/php


a2ensite 001-user
a2enmod userdir
a2enmod actions
a2enmod auth_digest


いろいろ試行錯誤しすぎて漏れがあるかもしれない