2015年10月26日月曜日

RedmineでSVNの認証をする

タイトルの通りですが、Redmineを使用する際にSVNの認証をRedmineのデータを使ってやろうということがあると思います。
apacheを使っていればmod_perlを入れて、Redmine.pmをperl/Apacheにコピーする手順がググると出てきます。

このRedmine.pmの認証では
sub RedmineDSN {
  my ($self, $parms, $arg) = @_;
  $self->{RedmineDSN} = $arg;
  my $query = "SELECT 
                 users.hashed_password, users.salt, users.auth_source_id, roles.permissions, projects.status
              FROM projects, users, roles
              WHERE 
                users.login=? 
                AND projects.identifier=?
                AND users.status=1 
                AND (
                  roles.id IN (SELECT member_roles.role_id FROM members, member_roles WHERE members.user_id = users.id AND members.project_id = projects.id AND members.id = member_roles.member_id)
                  OR
                  (cast(projects.is_public as CHAR) IN ('t', '1')
                    AND (roles.builtin=1
                         OR roles.id IN (SELECT member_roles.role_id FROM members, member_roles, users g
                                 WHERE members.user_id = g.id AND members.project_id = projects.id AND members.id = member_roles.member_id
                                 AND g.type = 'GroupNonMember'))
                  )
                )
                AND roles.permissions IS NOT NULL";
  $self->{RedmineQuery} = trim($query);
}

こんなSQLを使っているようです。

一つのプロジェクトに複数のリポジトリを追加したんだけど、認証出来ないよ!
他のプロジェクトと同じような設定にしてるのに、なぜかこのリポジトリだけ認証できないよ!

なんていうことが起きますw

つまり、

「プロジェクトのidentifierとプロジェクトに登録したリポジトリのidentifierが同じじゃないとだめ」


ということになりますね。
このコピーしたRedmine.pmはSVNの認証用にコピーしてるわけだから、RedmineDbWhereClauseなんかちまちま変更しないで、いっそのこと直接手を加えてやればいいのです。


AND projects.identifier=?

この部分を

AND EXISTS (SELECT 'x' FROM repositories WHERE project_id = projects.id AND identifier = ?)

に変更して、apachectrl gracefulを実行すれば完了!
※PerlにコピーしたRedmine.pmを修正してください。

2015年10月25日日曜日

WindowsのVirtualBoxにCentOS7をインストールする -その2

インストールしたての状態だとイマイチ使いにくいです。
いろいろとパッケージ入ってないですしねー
とりあえず、以下のコマンドくらいはしておきます。
yum install net-tools

そしてVirtualBoxでLinuxターミナルってなんか使いにくいのでCygwinでSSHしたいw
■方法その1(アダプター1で接続)

VirtualBoxマネージャーの設定からネットワークを選択して、「ポートフォワーディング」選択して、ゲストポート22のレコードを追加します。ホストポートはあいてればなんでもいいです。

Cygwinのターミナルで接続します
$ssh -p 9000 root@localhost

■方法その2(アダプター2で接続)
CentOSでip確認をしてみます。
[root@localhost ~]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::a00:27ff:fe5b:ba34  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:5b:ba:34  txqueuelen 1000  (Ethernet)


enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 08:00:27:75:02:e0  txqueuelen 1000  (Ethernet)


enp0s8のIPが取れていない…

vi /etc/sysconfig/network-scripts/ifcfg-enp0s8

TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=enp0s8
UUID=70b51f34-5882-43eb-b886-5d50bc177349
DEVICE=enp0s8
ONBOOT=yes

ONBOOTがnoだったのでyesに変更してネットワーク再起動します。
systemctl restart network

[root@localhost ~]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255


enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.103  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::a00:27ff:fe75:2e0  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:75:02:e0  txqueuelen 1000  (Ethernet)

IPアドレス確認できたのでCygwinからはそのIPでSSH接続します
ssh root@192.168.56.103

WindowsのVirtualBoxにCentOS7をインストールする

まずはVirtualBoxをダウンロードしてインストールします。
https://www.virtualbox.org/wiki/Downloads
インストーラーにしたがってインストールするだけです。

次に、CentOSをダウンロードします
https://www.centos.org/download/
GUI使わないならMinimal ISOが良いです。

VirtualBoxマネージャーを開いて、「新規」を押します。
名前に「CentOS」って入力するとタイプとか自動で選択されます。
メモリを適当にいじって「作成」押します。

ディスク容量を決めて「作成」押します。

VirtualBoxマネージャーに戻ったら「設定」押します。
ネットワークに「アダプター2」を有効にして、「ホストオンリーアダプター」を選ぶ。
VirtualBoxマネージャーに戻ったら「起動」押します。
ダウンロードしたCentOSのISOを選択して「起動」

そのままエンター
変な画面になるけど放置
言語を選択
「INSTALLAION DESTINATION」をクリック
変更したかったら変更してください。(何もしないでDoneしてOK)
戻ったら「NETWORK & HOST NAME」をクリック
とりあえず両方のEthernetを「ON」にする
戻ったら「SOFTWARE SELECTION」にをクリック
とりあえず「Basic Web Server」選んで適当にチェックしておく
戻ったら「Begin Installation」をクリック
インストールしてる間に、「ROOT PASSWORD」をクリック
簡単なパスワードだったりすると1回「Done」押しただけだと戻れないけど、もう1回「Done」押すと戻れます。
戻ったら「Reboot」クリック

完了!!
とりあえずログインしてみる


2015年10月18日日曜日

Eclipseのプラグインフォルダが無くなった

ちょっとした用事でJavaの開発環境を新しく構築し直すことになって最新のEclipseをダウンロードしてみました。

最近はインストーラーが用意されたんですねー
便利便利ー
(たぶんダウンロードするだけでしょうけどw)

まー、そんなこんなで、セットアップをしていくんですけど、pluginsフォルダがありません!
手動で追加しても反応しない?
pluginsが無い代わりにdropinsというフォルダがあったので、インストールしたいpluginをコピーしてみたらインストールできました。



インストーラーを使ったからなのかと思って調べたけどそれっぽい情報は出てこず。。。
でも、MARSからフォルダ構成が変わったようで、いままでのpluginsはdropinsに置き換わったそうな