Geo::IP だと日本と判定できてた普通のプロパイダのIPが
GeoLite2 だとフランスになっちゃう。。。




# fgrep p5-Geo-IP /usr/ports/MOVED
net/p5-Geo-IP||2019-02-16|Has expired: Uses legacy GeoIP 1 format which no longer works; switch to GeoIP 2 where possible
    

ということで乗り換えたのだけど、つらみ。

しかし https://www.maxmind.com/en/geoip-demo だと日本となるな。。。

Geo::IPFree だと日本となるぞ。。。

freebsd-update の components 推測

base.txz しか展開していない jail で kernel/generic が coponents として検出される。


# freebsd-update -b /jails/jail1 --currently-running 11.1-RELEASE -r 11.2-RELEASE upgrade
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching metadata signature for 11.1-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Inspecting system... done.

The following components of FreeBSD seem to be installed:
kernel/generic world/base

The following components of FreeBSD do not seem to be installed:
kernel/generic-dbg world/base-dbg world/doc world/lib32 world/lib32-dbg

Does this look reasonable (y/n)?
    

kernel/generic は次に因るらしい。
https://github.com/freebsd/freebsd/blob/d946d8f14c81df5c94524f0c759db84880bbcae8/usr.sbin/freebsd-update/freebsd-update.sh#L2230

STRICTCOMPONENTS の出番なのかなぁ。

かなぁ

Perl黒魔術 Import::Into ほか

MyApp::Web::Controller::* や
MyApp::Form::* など
名前空間によってインポートするメソッドやベースクラスの定型を
MyApp::Class に纏めてみます。


package MyApp::Class;

use strict;
use warnings;
use feature qw(:5.10);

use B::Hooks::AtRuntime qw(after_runtime);
use File::Spec;
use Import::Into;
use Module::Runtime qw(require_module);
use String::CamelCase qw(decamelize);

my $APP_CLASS = __PACKAGE__ =~ s/::Class$//r; # MyApp
my $APP_HOME  = Cwd::realpath(File::Spec->catdir(File::Basename::dirname(__FILE__), "../.."));
my @COMMONS = (
    [ "Module::Runtime", qw(require_module use_module) ],
);

sub import {
    my ($caller, $filename) = caller;
    $filename = Cwd::realpath($filename);

    if ( $filename =~ /$APP_HOME/ ) {
        my $rel = File::Spec->abs2rel($filename, $APP_HOME);
        # lib/ 以下では package の記述を省略 lib/MyApp/Web/Controller/Root.pm -> MyApp::Web::Controller::Root
        if ( $rel =~ m{^lib/(.*)} ) {
            my $pkg = $1 =~ s{/}{::}gr =~ s/\.pm//r;
            unless ( $caller eq $pkg ) {
                require B::Hooks::Parser;
                B::Hooks::Parser::inject("; package $pkg;");
                $caller = $pkg;
            }
        }
    }

    # uss utf8; use strict; use feature qw(:5.10) を省略
    utf8->import;
    strict->import;
    feature->import(':5.10');

    my %seen;
    my @loads;
    my @imports;
    my @extends;

    if ($caller =~ /^${APP_CLASS}::Web$/) {
        push @imports, ["Moose"];
        push @extends, ["Catalyst"];
    }
    elsif ($caller =~ /^${APP_CLASS}::Form\b/) {
        push @imports, ["HTML::FormHandler::Moose"];
        push @extends, ["HTML::FormHandler"];
    }
    elsif ($caller =~ /^${APP_CLASS}::Web::Controller\b/) {
        push @imports, ["Moose"];
        push @extends, ["Catalyst::Controller"];
    }

    for my $pkg (@loads) {
        require_module($pkg) unless $seen{$pkg}++;
    }
    for my $args (@COMMONS, @imports) {
        my ($class, @args) = @$args;
        require_module($class) unless $seen{$class}++;
        $class->import::into($caller, @args);
    }
    for my $args (@extends) {
        $caller->meta->superclasses(@$args);
    }

    # 律儀に autoclean するには
    # namespace::autoclean->import( -cleanee => $caller );

    # namespace::autoclean だと遅い場合は次でもおけ
    # namespace::clean->import(
    #     -cleanee => $caller,
    #     -except  => 'meta',
    # );

    # Controller は自動で namespace を設定する
    if ( $caller->isa('Catalyst::Controller') ) {
        # use MyApp::Class の最後 1; の後のランタイムフェーズで評価するには after_runtime {}
        after_runtime {
            unless ( exists $caller->config->{namespace} ) {
                my $suffix = Catalyst::Utils::class2classsuffix($caller);
                state $map = {
                    "Controller::Root" => '',
                };
                $caller->config->{namespace} = $map->{$suffix} // decamelize $suffix =~ s/^Controller:://r;
            }
        }
    }

    # 自動で __PACKAGE__->meta->make_immutable
    if ( $caller->isa('Moose::Object') and $caller->meta->is_mutable ) {
        after_runtime {
            $caller->meta->make_immutable;
        }
    }
}

1;
    


@INC を弄ったり、ソースフィルタを使えば use MyApp::Class も削れるかも。

動くやつは こちら

CentOS6 だと思って /etc/sysconfig/i18n を書き換えても、戻っちゃう。

管理画面からは、初期設定時の Wizard からしか変更できない?


# cat /usr/sausalito/codb/objects/1/.productLanguage
ja_JP
# echo en_US > /usr/sausalito/codb/objects/1/.productLanguage
    

上じゃだめだった。

管理画面の admin の個人プロフィールの言語設定が
/usr/sausalito/codb/objects/1/.productLanguage
/usr/sausalito/locale
/etc/sysconfig/i18n
に反映されるらしい。。。

いつも嵌るので。

grep eth /usr/sausalito/codb/objects/*/.device すると eth0:0 などが見付かるので、直接そこを弄れば解決する。


# grep eth /usr/sausalito/codb/objects/*/.device
/usr/sausalito/codb/objects/11/.device:eth0:0
/usr/sausalito/codb/objects/168/.device:eth2
/usr/sausalito/codb/objects/2/.device:eth0
/usr/sausalito/codb/objects/3/.device:eth1
    

気軽に再起動できない環境では、気を付けてください。

vm-bhyveでBlueOnyxを動かす

* pkg install vm-bhyve grub2-bhyve
* zfs create zroot/vm
* sysrc vm_enable="YES"
* sysrc vm_dir="zfs:zroot/vm"
* service vm start
* vm switch create public
* vm switch add public alc0
* cp -p /usr/local/share/examples/vm-bhyve/*.conf /zroot/vm/.templates/
* vm create -t centos6 -s 30g bq-5208r-6.9

* fetch http://updates.blueonyx.it/pub/BlueOnyx/ISO/BlueOnyx-5208R-CentOS-6.9-20171025.iso
* mdconfig -f ~/BlueOnyx-5208R-CentOS-6.9-20171025.iso
* mount -t cd9660 /dev/md0 /mnt
* ack -C5 kick /mnt/isolinux/isolinux.cfg # grub2-bhyve で BlueOnyx のCDブートメニューを出す方法が分からいので直接選択


label linux
  menu label Install BlueOnyx 5208R (Default Partitions)
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/ks/kickstart.cfg
label small
  menu label Install BlueOnyx 5208R (Small Servers)
  kernel vmlinuz
  append initrd=initrd.img  ks=cdrom:/ks/kick_small.cfg
label expert
  menu label Install BlueOnyx 5208R in Expert Mode
  kernel vmlinuz
  append initrd=initrd.img
    

* umount /mnt
* mdconfig -d -u md0

* vim /zroot/vm/bq-5208r-6.9/bq-5208r-6.9.conf


loader="grub"
cpu=1
memory=1G
network0_type="virtio-net"
network0_switch="public"
disk0_type="virtio-blk"
disk0_name="disk0.img"

uuid="212f5391-848b-11e9-840d-fcaa14e24f0e"

network0_mac="58:9c:fc:03:19:05"
network0_switch="public"

# grub> cat (cd0)/isolinux/isolinux.cfg
grub_install0="linux /isolinux/vmlinuz ks=cdrom:/ks/kickstart.cfg"
grub_install1="initrd /isolinux/initrd.img"

# grub> cat (hd0,msdos1)/grub/grub.conf
grub_run0="linux /vmlinuz-2.6.32-696.13.2.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 console=ttyS0 crashkernel=auto rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM"
grub_run1="initrd /initrd-2.6.32-696.13.2.el6.x86_64.img"
    

* vm -f install bq-5208r-6.9 ~/BlueOnyx-5208R-CentOS-6.9-20171025.iso
* vm -f start bq-5208r-6.9

perl adv
perl adv