ピョッコリンアドベントカレンダーを終えて

サマリ

お友達のピョッコリンさんアドベントカレンダーを主催してくれたので、 賑やかしになればと思い参加しました。主催者が各記事についてコメントをつけてくれているので、 サマリに関してはこちらを。

文章を書いたりネタを探したりするのは結構大変だったけど、 何か書くために勉強しようと思うようになったのがよかったし(目的と手段が入れ替わっている気もするけども)、 何か勉強したらメモ代わりに書こうという気持ちになったのが本当によかった。 何より楽しかったね!

ピョッコリンさん、素敵な企画をありがとう!来年もやろう!

コメント返し

(12/14) Disk I/O性能測定するときに活躍する道具たち

ちなみにこういうのって、ハードディスク換装時期の目安としても意義あったりする?(あるなら入れてみようかなと)

換装時期の目安になるかは微妙です。 個人的にはならんと思う。

fioに関してはディスクをいじめることになるので、換装時期を早めてしまうことにもなりかねない。iostatやblktraceを定期的にとって、変化点を見いだすとかまですれば効果あるかも。ただ、効果に見合わない気がする。

よく聞く話としては、

  • スループットが落ちてきているディスクはそろそろ壊れる
  • もちろん例外はある。HDDだと外周が埋まっているとか、断片化しているとか。SSDだとフラッシュチップ全域にライトした後のライトとか。
  • レスポンスが遅くなってきているディスクはそろそろ壊れる
  • SSDは書いていると遅くなるのであれだけど・・・

なので、体感で遅くなってきたら早々に換装したほうがいいと思う。

壊れるときは突然壊れるので、ある程度覚悟とバックアップや冗長化構成を取る必要がある。 SSDならRAID5(RAID1だと同時に死ぬとかありうる)、HDDならRAID1でもRAID5でも、 クラウドにバックアップしても、何でもよい。予算に合っていて、納得できる形でやるのがいちばん。

(12/16) 秒速でRAM Diskを作成する

(普段使っているので)tmpfsとの違いが知りたい気がした。

単に使うだけなら、tmpfsが圧倒的に便利。 RAM Diskをどうしても使いたいときってぱっと思いつかない・・・ 何だ、何に使うんだ?データベース?

RAM Disk tmpfs
見え方 フォーマットしていないハードディスク(フォーマットしないと使えない) ディレクトリの一部(そのままファイル置ける)
リブート時 消える 消える
メモリの使い方 できた瞬間からディスクサイズ分メモリ量が減る tmpfs以下のファイルによって使用メモリ量が変わる

CentOS7.2 plusのターゲットドライバまわりがおかしい?

サマリ

http://vault.centos.org/7.2.1511/centosplus/Source/SPackages/kernel-plus-3.10.0-327.3.1.el7.centos.plus.src.rpm で、TCM_QLA2XX=mにするとビルドできない。drivers以下のソースで、transport_init_session()の使い方が新旧まざっているせい(だと思う)。

ビルド環境

KVM上のCentOS 7.2でビルド。

% cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
% uname -a
Linux centos-kvm 3.10.0-327.3.1.el7.x86_64 #1 SMP Wed Dec 9 14:09:15 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

ビルド手順

% rpm -ivh kernel-plus-3.10.0-327.3.1.el7.centos.plus.src.rpm 
% cd ~/rpmbuild/
% rpmbuild -bp SPECS/kernel-plus.spec
% cd BUILD/kernel-3.10.0-327.3.1.el7/linux-3.10.0-327.3.1.el7.centos.plus.x86_64
% mv .config config.orig
% cp /boot/config-3.10.0-327.3.1.el7.x86_64 .config
% make menuconfig # TCM_QLA2XXXをmにする
% cp .config ~/rpmbuild/SOURCES/kernel-3.10.0-x86_64.config
% rpmbuild -bb SPECS/kernel-plus.spec

エラーメッセージ抜粋

今回はtransport_init_sessionのところに注目。

 drivers/scsi/qla2xxx/tcm_qla2xxx.c: In function 'tcm_qla2xxx_check_initiator_node_acl':
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1421:2: error: too few arguments to function 'transport_init_session'
   se_sess = transport_init_session();
   ^
 In file included from drivers/scsi/qla2xxx/tcm_qla2xxx.c:47:0:
 include/target/target_core_fabric.h:87:20: note: declared here
  struct se_session *transport_init_session(enum target_prot_op);
                     ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c: At top level:
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1757:2: error: initialization from incompatible pointer type [-Werror]
   .queue_tm_rsp   = tcm_qla2xxx_queue_tm_rsp,
   ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1757:2: error: (near initialization for 'tcm_qla2xxx_ops.queue_tm_rsp') [-Werror]
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1804:2: error: initialization from incompatible pointer type [-Werror]
   .queue_tm_rsp   = tcm_qla2xxx_queue_tm_rsp,
   ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1804:2: error: (near initialization for 'tcm_qla2xxx_npiv_ops.queue_tm_rsp') [-Werror]
 drivers/scsi/qla2xxx/tcm_qla2xxx.c: In function 'tcm_qla2xxx_register_configfs':
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1844:2: error: implicit declaration of function 'TF_CIT_TMPL' [-Werror=implicit-function-declaration]
   TF_CIT_TMPL(fabric)->tfc_wwn_cit.ct_attrs = tcm_qla2xxx_wwn_attrs;
   ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1844:21: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(fabric)->tfc_wwn_cit.ct_attrs = tcm_qla2xxx_wwn_attrs;
 
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1845:21: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(fabric)->tfc_tpg_base_cit.ct_attrs = tcm_qla2xxx_tpg_attrs;
                      ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1846:21: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(fabric)->tfc_tpg_attrib_cit.ct_attrs =
                      ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1848:21: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(fabric)->tfc_tpg_param_cit.ct_attrs = NULL;
                      ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1849:21: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(fabric)->tfc_tpg_np_base_cit.ct_attrs = NULL;
                      ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1850:21: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(fabric)->tfc_tpg_nacl_base_cit.ct_attrs = NULL;
                      ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1851:21: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(fabric)->tfc_tpg_nacl_attrib_cit.ct_attrs = NULL;
                      ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1852:21: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(fabric)->tfc_tpg_nacl_auth_cit.ct_attrs = NULL;
                      ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1853:21: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(fabric)->tfc_tpg_nacl_param_cit.ct_attrs = NULL;
                      ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1884:26: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(npiv_fabric)->tfc_wwn_cit.ct_attrs = tcm_qla2xxx_wwn_attrs;
                           ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1885:26: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(npiv_fabric)->tfc_tpg_base_cit.ct_attrs = NULL;
                           ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1886:26: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(npiv_fabric)->tfc_tpg_attrib_cit.ct_attrs = NULL;
                           ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1887:26: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(npiv_fabric)->tfc_tpg_param_cit.ct_attrs = NULL;
                           ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1888:26: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(npiv_fabric)->tfc_tpg_np_base_cit.ct_attrs = NULL;
 
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1889:26: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(npiv_fabric)->tfc_tpg_nacl_base_cit.ct_attrs = NULL;
                           ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1890:26: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(npiv_fabric)->tfc_tpg_nacl_attrib_cit.ct_attrs = NULL;
                           ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1891:26: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(npiv_fabric)->tfc_tpg_nacl_auth_cit.ct_attrs = NULL;
                           ^
 drivers/scsi/qla2xxx/tcm_qla2xxx.c:1892:26: error: invalid type argument of '->' (have 'int')
   TF_CIT_TMPL(npiv_fabric)->tfc_tpg_nacl_param_cit.ct_attrs = NULL;

drivers/scsi/qla2xxx/tcm_qla2xxx.c:1853:21: error: invalid type argument of '->' (have 'int')
  TF_CIT_TMPL(fabric)->tfc_tpg_nacl_param_cit.ct_attrs = NULL;
                     ^
drivers/scsi/qla2xxx/tcm_qla2xxx.c:1884:26: error: invalid type argument of '->' (have 'int')
  TF_CIT_TMPL(npiv_fabric)->tfc_wwn_cit.ct_attrs = tcm_qla2xxx_wwn_attrs;
                          ^
drivers/scsi/qla2xxx/tcm_qla2xxx.c:1885:26: error: invalid type argument of '->' (have 'int')
  TF_CIT_TMPL(npiv_fabric)->tfc_tpg_base_cit.ct_attrs = NULL;
                          ^
drivers/scsi/qla2xxx/tcm_qla2xxx.c:1886:26: error: invalid type argument of '->' (have 'int')
  TF_CIT_TMPL(npiv_fabric)->tfc_tpg_attrib_cit.ct_attrs = NULL;
                          ^
drivers/scsi/qla2xxx/tcm_qla2xxx.c:1887:26: error: invalid type argument of '->' (have 'int')
  TF_CIT_TMPL(npiv_fabric)->tfc_tpg_param_cit.ct_attrs = NULL;
                          ^
drivers/scsi/qla2xxx/tcm_qla2xxx.c:1888:26: error: invalid type argument of '->' (have 'int')
  TF_CIT_TMPL(npiv_fabric)->tfc_tpg_np_base_cit.ct_attrs = NULL;

drivers/scsi/qla2xxx/tcm_qla2xxx.c:1889:26: error: invalid type argument of '->' (have 'int')
  TF_CIT_TMPL(npiv_fabric)->tfc_tpg_nacl_base_cit.ct_attrs = NULL;
                          ^
drivers/scsi/qla2xxx/tcm_qla2xxx.c:1890:26: error: invalid type argument of '->' (have 'int')
  TF_CIT_TMPL(npiv_fabric)->tfc_tpg_nacl_attrib_cit.ct_attrs = NULL;
                          ^
drivers/scsi/qla2xxx/tcm_qla2xxx.c:1891:26: error: invalid type argument of '->' (have 'int')
  TF_CIT_TMPL(npiv_fabric)->tfc_tpg_nacl_auth_cit.ct_attrs = NULL;
                          ^
drivers/scsi/qla2xxx/tcm_qla2xxx.c:1892:26: error: invalid type argument of '->' (have 'int')
  TF_CIT_TMPL(npiv_fabric)->tfc_tpg_nacl_param_cit.ct_attrs = NULL;

そもそもtransport_init_sessionの何が問題か?

Kernel 3.14までは、transport_init_sessionは引数なしでコールできる。

// http://lxr.free-electrons.com/source/drivers/target/target_core_transport.c?v=3.14より

struct se_session *transport_init_session(void)
{
        struct se_session *se_sess;

        se_sess = kmem_cache_zalloc(se_sess_cache, GFP_KERNEL);
        if (!se_sess) {
                pr_err("Unable to allocate struct se_session from"
                                " se_sess_cache\n");

Kernel 3.15で、引数を取るようになった。

// http://lxr.free-electrons.com/source/drivers/target/target_core_transport.c?v=3.15 より

struct se_session *transport_init_session(enum target_prot_op sup_prot_ops)
{
        struct se_session *se_sess;

        se_sess = kmem_cache_zalloc(se_sess_cache, GFP_KERNEL);
        if (!se_sess) {
                pr_err("Unable to allocate struct se_session from"
                                " se_sess_cache\n");

で、transport_init_sessionでgrepかけてみると、使い方が新旧入り交じっていることがわかる。 ちなみに、transport_init_sessionの本体は新しいほうで定義されているので、 新しいほうに合わせるのが筋なんだろうか・・・でもKernel 3.10ベースだよね・・・?

include/target/target_core_fabric.h
87:struct se_session *transport_init_session(enum target_prot_op);
90:struct se_session *transport_init_session_tags(unsigned int, unsigned int,

drivers/infiniband/ulp/srpt/ib_srpt.c
2596:   ch->sess = transport_init_session(TARGET_PROT_NORMAL);

drivers/scsi/qla2xxx/tcm_qla2xxx.c
1421:   se_sess = transport_init_session();

drivers/target/loopback/tcm_loop.c
979:    tl_nexus->se_sess = transport_init_session(TARGET_PROT_ALL);

drivers/target/sbp/sbp_target.c
213:    sess->se_sess = transport_init_session(TARGET_PROT_NORMAL);

drivers/target/target_core_transport.c
242:struct se_session *transport_init_session(enum target_prot_op sup_prot_ops)
262:EXPORT_SYMBOL(transport_init_session);
295:struct se_session *transport_init_session_tags(unsigned int tag_num,
302:    se_sess = transport_init_session(sup_prot_ops);
314:EXPORT_SYMBOL(transport_init_session_tags);

drivers/target/tcm_fc/tfc_sess.c
214:    sess->se_sess = transport_init_session_tags(TCM_FC_DEFAULT_TAGS,

drivers/target/iscsi/iscsi_target_login.c
346:    sess->se_sess = transport_init_session(TARGET_PROT_NORMAL);

drivers/usb/gadget/tcm_usb_gadget.c
1730:   tv_nexus->tvn_se_sess = transport_init_session();

drivers/vhost/scsi.c
1659:   tv_nexus->tvn_se_sess = transport_init_session();

configファイルのdiff

長いしコマンド引数の順番間違えた・・・

--- .config 2015-12-23 21:43:13.336000000 +0900
+++ config.orig 2015-12-23 21:42:08.274000000 +0900
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 3.10.0 Kernel Configuration
+# Linux/x86_64 3.10.0 Kernel Configuration
 #
 CONFIG_64BIT=y
 CONFIG_X86_64=y
@@ -362,7 +362,7 @@
 CONFIG_X86_X2APIC=y
 CONFIG_X86_MPPARSE=y
 CONFIG_X86_EXTENDED_PLATFORM=y
-# CONFIG_X86_NUMACHIP is not set
+CONFIG_X86_NUMACHIP=y
 # CONFIG_X86_VSMP is not set 
 CONFIG_X86_UV=y
 CONFIG_X86_INTEL_LPSS=y
@@ -1299,6 +1299,7 @@
 CONFIG_BT_MRVL=m
 CONFIG_BT_MRVL_SDIO=m
 CONFIG_BT_ATH3K=m
+# CONFIG_BT_WILINK is not set
 # CONFIG_AF_RXRPC is not set 
 CONFIG_FIB_RULES=y
 CONFIG_WIRELESS=y
@@ -1332,7 +1333,11 @@
 CONFIG_RFKILL=m
 CONFIG_RFKILL_LEDS=y
 CONFIG_RFKILL_INPUT=y
-# CONFIG_NET_9P is not set
+# CONFIG_RFKILL_GPIO is not set
+CONFIG_NET_9P=m
+CONFIG_NET_9P_VIRTIO=m
+# CONFIG_NET_9P_RDMA is not set
+# CONFIG_NET_9P_DEBUG is not set
 # CONFIG_CAIF is not set 
 CONFIG_CEPH_LIB=m
 # CONFIG_CEPH_LIB_PRETTYDEBUG is not set 
@@ -1540,6 +1545,7 @@
 #
 # Texas Instruments shared transport line discipline
 #
+CONFIG_TI_ST=m
 CONFIG_SENSORS_LIS3_I2C=m
 
 #
@@ -1609,7 +1615,12 @@
 CONFIG_SCSI_3W_SAS=m
 # CONFIG_SCSI_ACARD is not set 
 CONFIG_SCSI_AACRAID=m
-# CONFIG_SCSI_AIC7XXX is not set
+CONFIG_SCSI_AIC7XXX=m
+CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
+CONFIG_AIC7XXX_RESET_DELAY_MS=5000
+CONFIG_AIC7XXX_DEBUG_ENABLE=y
+CONFIG_AIC7XXX_DEBUG_MASK=0
+CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
 # CONFIG_SCSI_AIC7XXX_OLD is not set 
 CONFIG_SCSI_AIC79XX=m
 CONFIG_AIC79XX_CMDS_PER_DEVICE=4
@@ -1638,7 +1649,7 @@
 CONFIG_SCSI_UFSHCD_PCI=m
 # CONFIG_SCSI_UFSHCD_PLATFORM is not set 
 CONFIG_SCSI_HPTIOP=m
-# CONFIG_SCSI_BUSLOGIC is not set
+CONFIG_SCSI_BUSLOGIC=m
 CONFIG_VMWARE_PVSCSI=m
 CONFIG_HYPERV_STORAGE=m
 CONFIG_LIBFC=m
@@ -1660,7 +1671,7 @@
 # CONFIG_SCSI_IPR is not set 
 # CONFIG_SCSI_QLOGIC_1280 is not set 
 CONFIG_SCSI_QLA_FC=m
-CONFIG_TCM_QLA2XXX=m
+# CONFIG_TCM_QLA2XXX is not set
 CONFIG_SCSI_QLA_ISCSI=m
 CONFIG_SCSI_LPFC=m
 # CONFIG_SCSI_LPFC_DEBUG_FS is not set
@@ -1896,7 +1907,9 @@
 # CONFIG_NET_DSA_MV88E6123_61_65 is not set
 CONFIG_ETHERNET=y
 CONFIG_MDIO=m
-# CONFIG_NET_VENDOR_3COM is not set
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
 # CONFIG_NET_VENDOR_ADAPTEC is not set
 # CONFIG_NET_VENDOR_ALTEON is not set
 # CONFIG_NET_VENDOR_AMD is not set
@@ -1952,14 +1965,14 @@
 # CONFIG_NET_VENDOR_EXAR is not set
 # CONFIG_NET_VENDOR_HP is not set
 CONFIG_NET_VENDOR_INTEL=y
-# CONFIG_E100 is not set
+CONFIG_E100=m
 CONFIG_E1000=m
 CONFIG_E1000E=m
 CONFIG_IGB=m
 CONFIG_IGB_HWMON=y
 CONFIG_IGB_DCA=y
 CONFIG_IGBVF=m
-# CONFIG_IXGB is not set
+CONFIG_IXGB=m
 CONFIG_IXGBE=m
 CONFIG_IXGBE_HWMON=y
 CONFIG_IXGBE_DCA=y
@@ -1996,13 +2009,14 @@
 CONFIG_MYRI10GE_DCA=y
 # CONFIG_FEALNX is not set
 # CONFIG_NET_VENDOR_NATSEMI is not set
-# CONFIG_NET_VENDOR_NVIDIA is not set
+CONFIG_NET_VENDOR_NVIDIA=y
+CONFIG_FORCEDETH=m
 CONFIG_NET_VENDOR_OKI=y
 CONFIG_PCH_GBE=m
 CONFIG_ETHOC=m
 CONFIG_NET_PACKET_ENGINE=y
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
 CONFIG_NET_VENDOR_QLOGIC=y
 CONFIG_QLA3XXX=m
 CONFIG_QLCNIC=m
@@ -2038,7 +2052,9 @@
 # CONFIG_NET_VENDOR_TEHUTI is not set
 CONFIG_NET_VENDOR_TI=y
 CONFIG_TLAN=m
-# CONFIG_NET_VENDOR_VIA is not set
+CONFIG_NET_VENDOR_VIA=y
+# CONFIG_VIA_RHINE is not set
+CONFIG_VIA_VELOCITY=m
 # CONFIG_NET_VENDOR_WIZNET is not set
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
@@ -2067,6 +2083,7 @@
 CONFIG_MICREL_PHY=m
 CONFIG_FIXED_PHY=y
 CONFIG_MDIO_BITBANG=m
+# CONFIG_MDIO_GPIO is not set
 # CONFIG_PLIP is not set
 CONFIG_PPP=m
 CONFIG_PPP_BSDCOMP=m
@@ -2439,8 +2456,11 @@
 # CONFIG_KEYBOARD_QT1070 is not set
 # CONFIG_KEYBOARD_QT2160 is not set
 # CONFIG_KEYBOARD_LKKBD is not set
+CONFIG_KEYBOARD_GPIO=m
+CONFIG_KEYBOARD_GPIO_POLLED=m
 # CONFIG_KEYBOARD_TCA6416 is not set
 # CONFIG_KEYBOARD_TCA8418 is not set
+# CONFIG_KEYBOARD_MATRIX is not set
 # CONFIG_KEYBOARD_LM8323 is not set
 # CONFIG_KEYBOARD_LM8333 is not set
 # CONFIG_KEYBOARD_MAX7359 is not set
@@ -2468,6 +2488,7 @@
 CONFIG_MOUSE_BCM5974=m
 CONFIG_MOUSE_CYAPA=m
 CONFIG_MOUSE_VSXXXAA=m
+# CONFIG_MOUSE_GPIO is not set
 CONFIG_MOUSE_SYNAPTICS_I2C=m
 CONFIG_MOUSE_SYNAPTICS_USB=m
 # CONFIG_INPUT_JOYSTICK is not set
@@ -2481,7 +2502,9 @@
 CONFIG_INPUT_TOUCHSCREEN=y
 # CONFIG_TOUCHSCREEN_AD7879 is not set
 # CONFIG_TOUCHSCREEN_ATMEL_MXT is not set
+# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
 # CONFIG_TOUCHSCREEN_BU21013 is not set
+# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
 # CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set
 # CONFIG_TOUCHSCREEN_DYNAPRO is not set
 # CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
@@ -2518,6 +2541,8 @@
 # CONFIG_INPUT_MMA8450 is not set
 # CONFIG_INPUT_MPU3050 is not set
 CONFIG_INPUT_APANEL=m
+# CONFIG_INPUT_GP2A is not set
+# CONFIG_INPUT_GPIO_TILT_POLLED is not set
 CONFIG_INPUT_ATLAS_BTNS=m
 CONFIG_INPUT_ATI_REMOTE2=m
 CONFIG_INPUT_KEYSPAN_REMOTE=m
@@ -2527,6 +2552,7 @@
 CONFIG_INPUT_CM109=m
 CONFIG_INPUT_UINPUT=m
 # CONFIG_INPUT_PCF8574 is not set
+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
 # CONFIG_INPUT_ADXL34X is not set
 # CONFIG_INPUT_IMS_PCU is not set
 # CONFIG_INPUT_CMA3000 is not set
@@ -2660,6 +2686,7 @@
 CONFIG_TCG_NSC=m
 CONFIG_TCG_ATMEL=m
 CONFIG_TCG_INFINEON=m
+# CONFIG_TCG_TIS_I2C_ST33 is not set
 # CONFIG_TCG_XEN is not set
 CONFIG_TCG_CRB=m
 CONFIG_TELCLOCK=m
@@ -2669,7 +2696,14 @@
 CONFIG_I2C_BOARDINFO=y
 CONFIG_I2C_COMPAT=y
 CONFIG_I2C_CHARDEV=m
-# CONFIG_I2C_MUX is not set
+CONFIG_I2C_MUX=m
+
+#
+# Multiplexer I2C Chip support
+#
+CONFIG_I2C_MUX_GPIO=m
+CONFIG_I2C_MUX_PCA9541=m
+CONFIG_I2C_MUX_PCA954x=m
 CONFIG_I2C_HELPER_AUTO=y
 CONFIG_I2C_SMBUS=m
 CONFIG_I2C_ALGOBIT=m
@@ -2708,10 +2742,12 @@
 #
 # I2C system bus drivers (mostly embedded / system-on-chip)
 #
+# CONFIG_I2C_CBUS_GPIO is not set
 CONFIG_I2C_DESIGNWARE_CORE=m
 # CONFIG_I2C_DESIGNWARE_PCI is not set
 # CONFIG_I2C_EG20T is not set
+# CONFIG_I2C_GPIO is not set
 # CONFIG_I2C_INTEL_MID is not set
 # CONFIG_I2C_OCORES is not set
 CONFIG_I2C_PCA_PLATFORM=m
@@ -2770,7 +2806,57 @@
 CONFIG_PTP_1588_CLOCK_PCH=m
 CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
 CONFIG_GPIO_DEVRES=y
-# CONFIG_GPIOLIB is not set
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_ACPI=y
+# CONFIG_DEBUG_GPIO is not set
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO drivers:
+#
+# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_IT8761E is not set
+# CONFIG_GPIO_TS5500 is not set
+# CONFIG_GPIO_SCH is not set
+CONFIG_GPIO_ICH=m
+# CONFIG_GPIO_VX855 is not set
+# CONFIG_GPIO_LYNXPOINT is not set
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX7300 is not set
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+# CONFIG_GPIO_ADP5588 is not set
+
+#
+# PCI GPIO expanders:
+#
+# CONFIG_GPIO_AMD8111 is not set
+# CONFIG_GPIO_LANGWELL is not set
+# CONFIG_GPIO_PCH is not set
+# CONFIG_GPIO_ML_IOH is not set
+# CONFIG_GPIO_RDC321X is not set
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MCP23S08 is not set
+
+#
+# AC97 GPIO expanders:
+#
+
+#
+# MODULbus GPIO expanders:
+#
+
+#
+# USB GPIO expanders:
+#
+# CONFIG_GPIO_VIPERBOARD is not set
 # CONFIG_W1 is not set
 CONFIG_POWER_SUPPLY=y
 # CONFIG_POWER_SUPPLY_DEBUG is not set
@@ -2785,6 +2871,7 @@
 # CONFIG_BATTERY_MAX17042 is not set
 # CONFIG_CHARGER_MAX8903 is not set
 # CONFIG_CHARGER_LP8727 is not set
+# CONFIG_CHARGER_GPIO is not set
 # CONFIG_CHARGER_BQ2415X is not set
 CONFIG_CHARGER_SMB347=m
 # CONFIG_BATTERY_GOLDFISH is not set
@@ -2831,6 +2918,7 @@

 CONFIG_SENSORS_G760A=m
 CONFIG_SENSORS_GL518SM=m
 CONFIG_SENSORS_GL520SM=m
+# CONFIG_SENSORS_GPIO_FAN is not set
 # CONFIG_SENSORS_HIH6130 is not set
 CONFIG_SENSORS_CORETEMP=m
 CONFIG_SENSORS_IBMAEM=m
@@ -2882,6 +2970,7 @@
 CONFIG_SENSORS_UCD9000=m
 CONFIG_SENSORS_UCD9200=m
 CONFIG_SENSORS_ZL6100=m
+# CONFIG_SENSORS_SHT15 is not set
 CONFIG_SENSORS_SHT21=m
 CONFIG_SENSORS_SIS5595=m
 # CONFIG_SENSORS_SMM665 is not set
@@ -3007,6 +3096,7 @@
 # CONFIG_SSB_DEBUG is not set
 CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
 CONFIG_SSB_DRIVER_PCICORE=y
+# CONFIG_SSB_DRIVER_GPIO is not set
 CONFIG_BCMA_POSSIBLE=y

 #
@@ -3018,6 +3108,7 @@
 # CONFIG_BCMA_HOST_SOC is not set
 CONFIG_BCMA_DRIVER_PCI=y
 CONFIG_BCMA_DRIVER_GMAC_CMN=y
+# CONFIG_BCMA_DRIVER_GPIO is not set
 # CONFIG_BCMA_DEBUG is not set

 #
@@ -3034,18 +3125,23 @@
 CONFIG_MFD_VIPERBOARD=m
 # CONFIG_MFD_RETU is not set
 # CONFIG_MFD_PCF50633 is not set
+# CONFIG_UCB1400_CORE is not set
 # CONFIG_MFD_RDC321X is not set
 CONFIG_MFD_RTSX_PCI=m
 # CONFIG_MFD_SI476X_CORE is not set
 CONFIG_MFD_SM501=m
+# CONFIG_MFD_SM501_GPIO is not set
 # CONFIG_ABX500_CORE is not set
 # CONFIG_MFD_SYSCON is not set
 # CONFIG_MFD_TI_AM335X_TSCADC is not set
 # CONFIG_TPS6105X is not set
+# CONFIG_TPS65010 is not set
 # CONFIG_TPS6507X is not set
 # CONFIG_MFD_TPS65217 is not set
+# CONFIG_MFD_TPS65912 is not set
 # CONFIG_MFD_WL1273_CORE is not set
 # CONFIG_MFD_LM3533 is not set
+# CONFIG_MFD_TIMBERDALE is not set
 # CONFIG_MFD_TMIO is not set
 CONFIG_MFD_VX855=m
 # CONFIG_MFD_ARIZONA_I2C is not set
@@ -3699,7 +3795,7 @@
 # CONFIG_FB_UDL is not set
 # CONFIG_FB_GOLDFISH is not set
 # CONFIG_FB_VIRTUAL is not set
-# CONFIG_XEN_FBDEV_FRONTEND is not set
+CONFIG_XEN_FBDEV_FRONTEND=m
 # CONFIG_FB_METRONOME is not set
 # CONFIG_FB_MB862XX is not set
 # CONFIG_FB_BROADSHEET is not set
@@ -4251,7 +4347,9 @@
 #
 CONFIG_LEDS_LM3530=m
 # CONFIG_LEDS_LM3642 is not set
-# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_PCA9532=m
+CONFIG_LEDS_PCA9532_GPIO=y
+CONFIG_LEDS_GPIO=m
 CONFIG_LEDS_LP3944=m
 CONFIG_LEDS_LP55XX_COMMON=m
 CONFIG_LEDS_LP5521=m
@@ -4262,7 +4360,9 @@
 # CONFIG_LEDS_PCA9633 is not set
 # CONFIG_LEDS_BD2802 is not set
 CONFIG_LEDS_INTEL_SS4200=m
+# CONFIG_LEDS_LT3593 is not set
 CONFIG_LEDS_DELL_NETBOOKS=m
+# CONFIG_LEDS_RENESAS_TPU is not set
 # CONFIG_LEDS_TCA6507 is not set
 # CONFIG_LEDS_LM355x is not set
 # CONFIG_LEDS_OT200 is not set
@@ -4277,6 +4377,7 @@
 CONFIG_LEDS_TRIGGER_HEARTBEAT=m
 CONFIG_LEDS_TRIGGER_BACKLIGHT=m
 # CONFIG_LEDS_TRIGGER_CPU is not set
+# CONFIG_LEDS_TRIGGER_GPIO is not set
 CONFIG_LEDS_TRIGGER_DEFAULT_ON=m

 #
@@ -4504,7 +4605,8 @@
 # CONFIG_RTS5139 is not set
 # CONFIG_TRANZPORT is not set
 # CONFIG_IDE_PHISON is not set
-# CONFIG_LINE6_USB is not set
+CONFIG_LINE6_USB=m
+CONFIG_LINE6_USB_IMPULSE_RESPONSE=y
 # CONFIG_USB_SERIAL_QUATECH2 is not set
 # CONFIG_VT6655 is not set
 # CONFIG_VT6656 is not set
@@ -4525,6 +4627,7 @@
 # Speakup console speech
 #
 # CONFIG_SPEAKUP is not set
+# CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set
 # CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set
 # CONFIG_STAGING_MEDIA is not set

@@ -4684,8 +4787,17 @@
 CONFIG_JBD2=m
 # CONFIG_JBD2_DEBUG is not set
 CONFIG_FS_MBCACHE=m
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+CONFIG_REISERFS_PROC_INFO=y
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+CONFIG_JFS_FS=m
+# CONFIG_JFS_POSIX_ACL is not set
+# CONFIG_JFS_SECURITY is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
 CONFIG_XFS_FS=m
 CONFIG_XFS_QUOTA=y
 CONFIG_XFS_POSIX_ACL=y
@@ -4774,7 +4886,8 @@
 CONFIG_MISC_FILESYSTEMS=y
 # CONFIG_ADFS_FS is not set
 # CONFIG_AFFS_FS is not set
-# CONFIG_ECRYPT_FS is not set
+CONFIG_ECRYPT_FS=m
+# CONFIG_ECRYPT_FS_MESSAGING is not set
 # CONFIG_HFS_FS is not set
 # CONFIG_HFSPLUS_FS is not set
 # CONFIG_BEFS_FS is not set
@@ -4866,6 +4979,9 @@
 # CONFIG_NCP_FS is not set
 # CONFIG_CODA_FS is not set
 # CONFIG_AFS_FS is not set
+CONFIG_9P_FS=m
+# CONFIG_9P_FSCACHE is not set
+# CONFIG_9P_FS_POSIX_ACL is not set
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="utf8"
 CONFIG_NLS_CODEPAGE_437=y
@@ -5117,7 +5233,7 @@
 CONFIG_SECURITYFS=y
 CONFIG_SECURITY_NETWORK=y
 CONFIG_SECURITY_NETWORK_XFRM=y
-# CONFIG_SECURITY_PATH is not set
+CONFIG_SECURITY_PATH=y
 CONFIG_SECURITY_SECURELEVEL=y
 CONFIG_INTEL_TXT=y
 CONFIG_LSM_MMAP_MIN_ADDR=65535
@@ -5130,7 +5246,12 @@
 CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
 # CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
 # CONFIG_SECURITY_SMACK is not set
-# CONFIG_SECURITY_TOMOYO is not set
+CONFIG_SECURITY_TOMOYO=y
+CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY=2048
+CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG=1024
+# CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER is not set
+CONFIG_SECURITY_TOMOYO_POLICY_LOADER="/sbin/tomoyo-init"
+CONFIG_SECURITY_TOMOYO_ACTIVATION_TRIGGER="/usr/lib/systemd/systemd"
 # CONFIG_SECURITY_APPARMOR is not set
 # CONFIG_SECURITY_YAMA is not set
 CONFIG_INTEGRITY=y
@@ -5145,6 +5266,7 @@
 CONFIG_EVM=y
 CONFIG_EVM_HMAC_VERSION=2
 CONFIG_DEFAULT_SECURITY_SELINUX=y
+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
 # CONFIG_DEFAULT_SECURITY_DAC is not set
 CONFIG_DEFAULT_SECURITY="selinux"
 CONFIG_XOR_BLOCKS=m
@@ -5386,7 +5508,6 @@
 CONFIG_TEXTSEARCH_KMP=m
 CONFIG_TEXTSEARCH_BM=m
 CONFIG_TEXTSEARCH_FSM=m
-CONFIG_BTREE=y
 CONFIG_INTERVAL_TREE=y
 CONFIG_ASSOCIATIVE_ARRAY=y
 CONFIG_HAS_IOMEM=y

KVMメモ(2回目)

はじめに

rpmbuildでカーネルアップデートごっこするためにCentOSを入れたくなったので、 KVMに入れたときのメモ。

その昔にもKVMを単に使うということをしていたけれど、 結構かわっていたので再度メモ。

nbisco.hatenablog.com

環境

まずはこれを入れる

kvm本体とVNCクライアントのnovnc。 novncはブラウザから使える

$ sudo apt install kvm libvirt virtinst virt-viewer --install-recommends 
$ sudo apt install novnc --install-recommends

VMディスク作成

直接/dev/sdXとかを使ってもよいけども、 ディスク1個しかないし、ディスクプールもないので、 標準っぽいqcow2を使う。

$  qemu-img create -f qcow2 centos.img 10G

bridgeの作成

VMにも物理マシンと同じセグメントのIPを割り当てたいので、bridge接続できるようにしておく。

/etc/network% diff -ur interfaces.bk interfaces
--- interfaces.bk 2015-12-23 09:47:39.259176355 +0900
+++ interfaces    2015-12-23 09:54:19.371194634 +0900
@@ -1,3 +1,11 @@
 # interfaces(5) file used by ifup(8) and ifdown(8)
-auto lo
+auto lo br0 eth0
 iface lo inet loopback
+iface eth0 inet manual
+
+allow-hotplug eth0
+iface br0 inet dhcp
+bridge_ports eth0
+bridge_maxwait 0
+bridge_fd 0
+bridge_stp off

VMインストールサマリ

以下のシェルスクリプトを適宜変えて使う。

必要に応じて変えるのはこれ。

  • name:VMの名前
  • ram:VMに渡すメモリサイズ(MB)
  • vcpus:VMに渡すCPUの数
  • os-variant:特に指定しなくてもよかったかもしれないけど、CentOSなのでrhelにした。
  • disk:VM用ディスク。formatをきちんと指定しないと、VM上のOSがディスクサイズを認識できない。
  • cdrom:インストールにつかうISOファイル
#!/bin/bash

sudo virt-install \
    --connect qemu:///system \
    --name centos-kvm \
    --ram 2048 \
    --disk path=/path/to/centos.img,format=qcow2 \
    --graphics vnc,port=5900,keymap=ja,listen=0.0.0.0 \
    --network bridge=br0 \
    --cdrom /path/to/CentOS-7-x86_64-DVD-1511.iso \
    --vcpus 2 \
    --os-type linux \
    --os-variant rhel7 \
    --virt-type kvm \
    --boot cdrom \
    --hvm 

インストール後にしなきゃいけないこと

そのまま再起動すると、CDドライブに何も入っていないよ!みたいな感じでブートしないので、 VMのCDドライブ部分の設定をコメントアウトする (もしかすると、にするだけでもよかったかもしれない)。

$ sudo virsh
virsh# edit centos-kvm
(diffを取り忘れてしまったけど、cdromっぽいことが書いてある部分を根こそぎ消せばよい)

novncで画面を覗く

websockifyコマンドを叩いたあとで、FirefoxなどのブラウザでアクセスすればVNC画面が現れる。 ブラウザでできるなんていい時代になったものですね。

# 以下のコマンドをたたいたあと、localhost:9000/vnc.htmlにアクセスすると、VNC画面が現れる。
$ websocify -D --web=/usr/share/novnc/ 9000 localhost:5900

フライパンでにんじんタルトを作ろう

この記事はピョッコリンアドベントカレンダーのために書かれたものです。

サマリ

オーブンじゃなくてもフライパンでおいしいにんじんタルトが作れる。 写真を撮り忘れるという失態で製作途中の風景がまるでない。

はじめに

おいしいにんじんタルト食べたくない?食べたいよね! 簡単に作れたほうがよくない?いいよね! 電子レンジを使うよりもフライパンで作れたほうが簡単ぽくない?簡単ぽいよね!

というわけで、フライパンでにんじんタルトを作りました。

材料

以下、フライパン1個分(直径24cmくらい)です。

タルト生地

  • 薄力粉 120g
  • 砂糖 40g
  • 卵黄 1個分
  • バター 50g

タルトフィリング

  • にんじん 1本
  • 砂糖 40g
  • 薄力粉 50g
  • 卵 1個
  • 生クリーム 30ccくらい
  • お好みでレモン汁を大さじ1杯(自分のときは入れなかった)

必要な道具

  • フライパン
  • フライパンのふた(ないとつらい)
  • はかり(小麦粉や砂糖を測るのに使う。100円ショップで買える)
  • 金属ざる(薄力粉をふるう用)
  • ピーラー(にんじんの皮むき用。100円ショップで買える)
  • 大根おろし器(にんじん用。100円ショップで買える)
  • ボウル(タルトフィリングを作る用。IKEAのゴムボウルが便利だった)
  • 大きめの透明ビニール袋(ジップロックなどの丈夫なもの。タルト生地を作るのに使う。100円ショップで買える)

作り方

  1. 薄力粉 120gをざるでふるってボウルに入れる
  2. 砂糖 40g、卵黄 1個、バター 50gをボウルに入れる
  3. 軽くまぜた後、大きめの透明ビニール袋に全部入れて、ひたすらこねる。ここの作り方(2)にあるように、 手に付かない程度になるまでがんばってこねる
  4. こね終わったら、ビニール袋の口を縛って乾燥しないようにする(タルト生地はここでほぼ完成)
  5. (ここからタルトフィリング)にんじんの皮をピーラーでむいて、大根おろし器ですりおろす。
  6. すりおろしたにんじんに、砂糖 40g、ふるった薄力粉 50g、卵 1個、生クリーム 30ccを加えてまぜる(タルトフィリングはここでほぼ完成)。
  7. タルト生地をフライパンに広げて、フォークで穴を適度に開ける(出来上がりはここの作り方(3)を参照)
  8. 広げたタルト生地の上に、タルトフィリングを流し込んで、むらがないように広げる
  9. フライパンにふたをして、ごく弱火で焼く
  10. 15~20分くらいでこんがりいいにおいが漂ってくるので、タルトの出来上がり具合を見ながら火を消す。目安は、タルトのふちがきつね色になるくらい。
  11. 火を止めて粗熱を取る。
  12. おいしいにんじんタルトの完成!

注意点

  • 薄力粉は必ずふるってから使おう(粉が固まっていて非常に混ざりにくい)
  • 粗熱取る前に食べてもおいしいけど、タルト生地は冷えるとさくさく感がでるので、待ったほうがいいと思う
  • 生地をこねるときに、ビニール袋に入れずに素手でやってももちろんよいけど、手がよごれないビニール袋のほうが楽でいい
  • タルト生地をフライパンに広げるのが結構難しい。ここさえクリアできれば、手をほとんどよごさずにタルトができる
  • ビニール袋は丈夫なものじゃないと耐えられないので、丈夫なものにしよう
  • ゴムボウルは形に融通がきくので、ビニール袋に入れやすくて便利
  • テフロン加工とかフッ素加工してあるフライパンにはくっつかないので、油は引かなくても大丈夫(ひくと大惨事になると思う)
  • 必ず粉の重さは測ろう。測らなくていいのはにんじんくらい。
  • バターは高いのでケーキ用マーガリンなどで代用してもよい(実際代用した)
  • オーブンだともっとタルトがカリッと焼けるかもしれない。焼いたことはない・・・
  • 冷蔵庫に入れてればけっこう日持ちする。4日目に食べても特に問題はなかった。
  • いちどに食べるのには多すぎる量が焼ける

おわりに

フライパンでも簡単ににんじんタルトが焼ける。 何より自分で作るお菓子はおいしいね!

参考にしたサイト

簡単♪❤米粉de人参タルト❤ by ☆♪シフォン♪☆ [クックパッド] 簡単おいしいみんなのレシピが224万品

モッチリ☆ソフト食感☆人参タルト by MIKIKYO [クックパッド] 簡単おいしいみんなのレシピが224万品

フライパンで焼く人参ケーキ ミックス不要 by niconicoえま [クックパッド] 簡単おいしいみんなのレシピが224万品

フライパンで☆チーズケーキ(タルト) by shokolat [クックパッド] 簡単おいしいみんなのレシピが224万品

今年やったボドゲのメモ

この記事はピョッコリンアドベントカレンダーのために書かれたものです。

はじめに

今年やったボドゲとメモを載せます。

やったボドゲたち

禁断の砂漠(原題:Forbidden Desert)

ゲーム紹介やストーリーなど

遭難した探検隊のメンバーであるあなたは、 砂漠に埋もれている伝説の飛行船を掘り出して脱出しなければなりません。 大変難しいゲームだけど、脳みそが沸騰するくらい楽しい。

www.tgiw.info

感想など

  • 最初のころのぼく「協力ゲーなんてどうせつまんねえよ」
  • 1プレイ後のぼくたち「砂漠から脱出できていないのに晩ごはんに行くとかねえだろ!!!おい!集中力を切らさないために寿司とかピザ取るぞ!!!」
  • 終電のときのぼくたち「砂漠から脱出できていないのに家に帰れるわけねえだろ!集中!!集中!!!」
  • 20時に脱出開始して、28時に脱出成功した。脱出成功時の達成感というか脳内麻薬が出る感じがたまらなかった。
  • 日を置いて再チャレンジしたときも同じパターンにはまって笑うしかなかった。メンバーの脳みそが湧いていたとしか思えない。

Amazonへのリンク

www.amazon.co.jp

Small World

ゲーム紹介やストーリーなど

ファンタジー系種族(エルフとかドワーフとか)を駆使して 土地を支配し、お金を稼ぐゲーム。陣取りゲームの一種です。 シンプルなルールで結構楽しめる。3人~がおすすめ。2人だといまいちかもしれない。

hobbyjapan.co.jp lfz.blog.so-net.ne.jp

感想など

  • 戦線を広げすぎたりすると土地を乗っ取られてしまうし、かといって固まってると稼げないしで、結構いいところを付くのが難しい。
  • 種族の特殊能力に加えて、追加特殊能力という要素がある。追加特殊能力と種族の組み合わせは毎回ランダムに決まるので、似たり寄ったりなゲームにならず何度も楽しめる。
  • 最初に1つ種族を選ぶんだけど、最初に選んだ種族にずっと肩入れしていると勝てないので、うまく次に乗り換える(このゲームでは"衰退"と呼んでいる)必要がある。この衰退のおかげでゲームが少し複雑になっていて面白い。

Amazonへのリンク

www.amazon.co.jp

ワンナイト人狼

ゲーム紹介

村に人狼が紛れ込んでいる。村人たちは人狼を探し出せば勝利。 人狼は逃げ切れれば勝利。3人以上いないと遊べない。

本家人狼は何日かやるのか時間がかかるし人数も必要だけど、 1ゲーム10分程度で終わるくらいに簡略化されている。

1nite-jinro.strikingly.com

感想など

  • シンプルだしちょこっと遊ぶ分には大変よい。もちろん何度やってもよいが、少し物足りなくなってくるかもしれない。
  • お互い全力で騙し合いをするので、友達が信じられなくなる

Amazonへのリンク

www.amazon.co.jp

ダイヤモンスターズ

ゲーム紹介

手持ちの1~5の5枚のカードをお互い出しあい、 ダイヤを5個以上集めるか、同じ種類のモンスターを3体集めれば勝利。 シンプルなルールで、2人でも充分楽しめる。

www.g-rounding.com

感想など

  • ルールがシンプルな分、相手の思考を考えるのに集中できるゲーム。思考を読みきって裏をかいたときの楽しさはたまらない。
  • 2人でずっとやっていると、相手の思考パターンがわかってくるせいか、ある種の"あいこ"が連発するようになる。
  • 相手の思考を考えだすと沼にはまるが、しかしそれが楽しい。

Amazonへのリンク

生産中止なのかな・・・あのとき買っておけばよかった・・・

www.amazon.co.jp

Mow

ゲーム紹介

ハエのついた牛を押し付けあうゲーム。 ルールはいたってシンプルだけど、カードの出しどころをきちんと考えないと とたんに負けてしまうのがポイント。

yurukoi.impress.co.jp

感想など

  • いつ誰とやっても外れないゲームで、やるたびに中毒者が続出する危険なゲーム。
  • 盛り上がりすぎて、みんなの言動がおかしくなってくるのはよくあること。
  • かなり運要素がからむので、安定して勝てなかったりするのがよい。

Amazonへのリンク

ポケット版で充分といううわさもある。ちなみに自分が買ったのはポケット版。

www.amazon.co.jp

まだ全然全部紹介できていないので、最後に列挙くらいはする

だいたいお友だちに呼んでもらってやらせてもらったものが多い(みなさんありがとうございます)。 - カタン - カルカソンヌ - 電力会社 - ラブレター - ペンギンパーティ - グースカパースカ - ドミニオン - 心臓発作にならないための10の方法 - 枯山水

おわりに

最近はボドゲで徹夜をすることがなくなってしまった。 もっとやりたい。

Pebble Timeを買って最初にやったこと

この記事はピョッコリンアドベントカレンダーのために書かれたものです。

www.adventar.org

はじめに

Pebble Timeを買ったので、最初にやった設定などについてまとめます。

Pebble Timeとは

最近はやりのスマートウォッチというやつです。 Apple Watchのようにスペックは高くないけれど、 電池は長持ちするし、カラー表示もできるし、 何よりお財布にやさしいという特徴を持っています。

レビューはいろんな人が書いているので今更書きません。

smhn.info

【Pebble Time 】買ってよかった!と感じたシーン3つ
tobalog.com

どうして買ったか?

値段そこそこで電池長持ち、かつかわいらしいデザインだったからです。 あとはシンプルなところかな。 普段心置きなく使えるようなものが欲しかったんです。

どこで買えるか?

日本のAmazonでももちろん買えるけど、公式サイトだと割引していたので 公式サイトで買いました。12/20現在でも$150で買えるようでした。 日本への送料は無料でしたよ、確か。

www.pebble.com

買って何をやったか

PebbleのアップデートとWatchfaceの入れ替え

何はなくとも、まずは手持ちのAndroidとつなげてアップデートします。 Play StoreにPebble Time用アプリがあるので、それを入れましょう。 最初に接続したときにアップデートは勝手に始まります、確か。 その他、Pebble Timeアプリの指示に従って必要なものを入れればOKです。 僕のときは何でかわからないけどもAndroid Wearアプリを入れろと指示がありました。

Pebble Time - Google Play の Android アプリ

アップデートが終わったらまずは時計としての体裁を整えるため、 Watchfaceを入れ替えます。壁紙を設定するようなもんですね。

ぐぐったらこんなのが出てきたので、載せておきます。 shikarunochi.matrix.jp

日本語化

AndroidはPebbleに通知画面(例えばメールが来たとかLINEが来たとか)を飛ばして くれるわけですが、Pebbleはデフォルトで日本語表示できないので、 有志のみなさまが作ってくださっている日本語化パックを入れます。

いろいろあるみたいですが、僕はこれを入れました。 Pebble language pack: 日本語言語パック

以上でやったことはおしまいです。

アプリを入れる

最近のアップデートで睡眠時間と歩数をデフォルトでトラックしてくれるようになったので、 他にアプリをいれなくても充分かな、という感じです。

おわりに

まだ使って4日くらいですが、結構楽しく使っています。 通知が飛んで来るだけで結構充分な感。

秒速でRAM Diskを作成する

この記事はピョッコリンアドベントカレンダーのために書かれたものです。

サマリ

LIOでループバックのRAM Diskを作成する。

はじめに

書くネタがだいぶ苦しくなってきたので、特に意味もなくRAM Diskの作り方について書きます。

そもそもRAM Diskとは何か

DRAM(要はメモリ)を一部確保して、HDDやSSDのごとく使えるようにしたものです。 SSDがいくら速いと言っても、メモリにはもちろん勝てないです。 最近のマシンはメモリを山ほど積んでるので、一部切り取って、 何かのキャッシュ置き場として使うといいのでは感があります。

Windowsだとなんかわけわからんドライバやら入れないといけないのでは、というところですが、 Linuxだとまあ文字通りあっという間にできます。

想定環境

必要なもの

LIOがあれば万事OK。 ビルドは結構大変なので以下のコマンドで入れます。

$ sudo apt install targetd --install-recommends

作り方

targetdをインストールすると、targetcliというある種のシェル的なものが使えるようになります。 targetcliを使うとRAM Diskを作ることができます。

targetcliを起動してみます。何かまあプロンプトが出ますね。

$ sudo targetcli
targetcli GIT_VERSION (rtslib GIT_VERSION)
Copyright (c) 2011-2013 by Datera, Inc.
All rights reserved.
/> 

lsをたたいてみましょう。いろいろ出てきましたね。 LIOはフロントエンド(ユーザがI/OするためのI/F。/dev/sdXとかそういうの)と、 backstores以下のバックエンド(ユーザのI/Oを実際に受けるところ)に分かれています。 今回は、フロントエンドにloopback(自分のサーバ内でのみ有効な/dev/sd何とかに見せる)、 バックエンドにbackstores/rd_mcp(要はRAM Disk)を選びます。

/> ls
o- / ................................................................. [...]
  o- backstores ...................................................... [...]
  | o- fileio ........................................... [0 Storage Object]
  | o- iblock ........................................... [0 Storage Object]
  | o- pscsi ............................................ [0 Storage Object]
  | o- rd_dr ............................................ [0 Storage Object]
  | o- rd_mcp ........................................... [0 Storage Object]
  o- ib_srpt ................................................... [0 Targets]
  o- iscsi ..................................................... [0 Targets]
  o- loopback .................................................. [0 Targets]
  o- qla2xxx ................................................... [0 Targets]
  o- tcm_fc .................................................... [0 Targets]
/> 

まずはバックエンド部分を作ります。ってもコマンド1発です。 今回は、ramdiskという名前の1GBのRAM Diskを作りました。

/> /backstores/rd_mcp create name=ramdisk size=1G
Generating a wwn serial.
Created rd_mcp ramdisk ramdisk with size 1G.
/> ls
o- / ................................................................. [...]
  o- backstores ...................................................... [...]
  | o- fileio ........................................... [0 Storage Object]
  | o- iblock ........................................... [0 Storage Object]
  | o- pscsi ............................................ [0 Storage Object]
  | o- rd_dr ............................................ [0 Storage Object]
  | o- rd_mcp ........................................... [1 Storage Object]
  |   o- ramdisk ..................................... [ramdisk deactivated]
  o- ib_srpt ................................................... [0 Targets]
  o- iscsi ..................................................... [0 Targets]
  o- loopback .................................................. [0 Targets]
  o- qla2xxx ................................................... [0 Targets]
  o- tcm_fc .................................................... [0 Targets]
/> 

バックエンドを作っただけではアクセスできないので、ramdiskのステータスは dactivatedになっています。では、フロントエンドを作りましょう。 こちらも同じくコマンド1発・・・とはいかなくて、2発叩き込む必要があります。 タブキーで補完が効くので、あまり面倒ではないです。作業自体はこれで完了です。

/> /loopback create
Created target naa.60014053e8e7b899.
/> /loopback/naa.60014053e8e7b899/luns create /backstores/rd_mcp/ramdisk 
Selected LUN 0.
Successfully created LUN 0.
/> ls
o- / ................................................................. [...]
  o- backstores ...................................................... [...]
  | o- fileio ........................................... [0 Storage Object]
  | o- iblock ........................................... [0 Storage Object]
  | o- pscsi ............................................ [0 Storage Object]
  | o- rd_dr ............................................ [0 Storage Object]
  | o- rd_mcp ........................................... [1 Storage Object]
  |   o- ramdisk ....................................... [ramdisk activated]
  o- ib_srpt ................................................... [0 Targets]
  o- iscsi ..................................................... [0 Targets]
  o- loopback ................................................... [1 Target]
  | o- naa.60014053e8e7b899 ......................... [naa.6001405ec6fd7aef]
  |   o- luns ...................................................... [1 LUN]
  |     o- lun0 ................................. [rd_mcp/ramdisk (ramdisk)]
  o- qla2xxx ................................................... [0 Targets]
  o- tcm_fc .................................................... [0 Targets]
/> 

さて、lsscsiでチェックしてみましょう。僕の環境では/dev/sdcに見えていますね。 lsscsiがない人はaptで入れましょう。

$ lsscsi
()
[10:0:1:0]   disk    LIO-ORG  RAMDISK-MCP      4.0   /dev/sdc 

見えない場合は、以下コマンドでディスクをリスキャンしてみましょう。

#!/bin/bash

for i in /sys/class/scsi_host/*
do
  echo "- - -" > $i/scan
done

さて、試しにinquiryを投げつけてみましょう。 inquiryとは、SCSIというDiskとやりとりするためのプロトコルで定義されているコマンドで、 Diskのベンダやら種類やらを知るためのものです。

何かいろいろ出てきましたが、 Product identificationがRAMDISK-MCPになっていて、確かにRAM Diskぽいということがわかりますね。 これでSSDより圧倒的に速いDiskを手に入れることができました。

$ sudo sg_inq /dev/sdc   
standard INQUIRY:
  PQual=0  Device_type=0  RMB=0  version=0x05  [SPC-3]
  [AERC=0]  [TrmTsk=0]  NormACA=0  HiSUP=0  Resp_data_format=2
  SCCS=1  ACC=0  TPGS=3  3PC=1  Protect=0  [BQue=0]
  EncServ=0  MultiP=0  [MChngr=0]  [ACKREQQ=0]  Addr16=0
  [RelAdr=0]  WBus16=0  Sync=0  Linked=0  [TranDis=0]  CmdQue=1
    length=36 (0x24)   Peripheral device type: disk
 Vendor identification: LIO-ORG 
 Product identification: RAMDISK-MCP     
 Product revision level: 4.0
 Unit serial number: 7539e091-7407-4637-8edc-f8d4a531c92b

使う分にはあまり関係ないですが、このRAM Disk、 SATAではなくてSASディスクとして見えているようですね。

$ sudo sg_inq -i /dev/sdc
VPD INQUIRY: Device Identification page
  Designation descriptor number 1, descriptor length: 20
    designator_type: NAA,  code_set: Binary
    associated with the addressed logical unit
      NAA 6, IEEE Company_id: 0x1405
      Vendor Specific Identifier: 0x7539e0917
      Vendor Specific Identifier Extension: 0x40746378edcf8d4a
      [0x60014057539e091740746378edcf8d4a]
  Designation descriptor number 2, descriptor length: 61
    designator_type: T10 vendor identification,  code_set: ASCII
    associated with the addressed logical unit
      vendor id: LIO-ORG
      vendor specific: RAMDISK-MCP:7539e091-7407-4637-8edc-f8d4a531c92b
  Designation descriptor number 3, descriptor length: 8
    transport: Serial Attached SCSI Protocol (SPL-2)
    designator_type: Relative target port,  code_set: Binary
    associated with the target port
      Relative target port: 0x1
  Designation descriptor number 4, descriptor length: 8
    transport: Serial Attached SCSI Protocol (SPL-2)
    designator_type: Target port group,  code_set: Binary
    associated with the target port
      Target port group: 0x0
  Designation descriptor number 5, descriptor length: 8
    designator_type: Logical unit group,  code_set: Binary
    associated with the addressed logical unit
      Logical unit group: 0x0
  Designation descriptor number 6, descriptor length: 36
    transport: Serial Attached SCSI Protocol (SPL-2)
    designator_type: SCSI name string,  code_set: UTF-8
    associated with the target port
      SCSI name string:

さいごに

LIOを使うとRAM Diskが簡単にできちゃうわけですが、 /dev/shm/以下もRAM Disk扱いになっているので、別に無理に作る必要はない。