end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

msys2 + mingw for win 10 64bitで、emacs 25.3 をbuild

emacs24.5をwin10 + USキーボードへ引っ越し後、動作が不安定

先日、PC買換えに伴い、OSもwin7 → win 10(64bit)へ移行。

NTemacsは、win7で動作していた emacs-24.5-IME-patched を そのままcopyして利用していますが、どうもIMEの動作がおかしい。

  • google日本語入力の変換suggest窓が表示されない
  • IME=on/off切換え不可になることがあり、「winキー+SPACE」や「ALT+~」のおまじないで復活

のような状態。 ただ...上記2) は、win10というよりwin10 + USキーボードの影響な気もしています。

ググっても、解消につながる情報は得られないので、 試しに emacsをbuildしてみることにしました。

msys2 + mingw for win 10 64bitで、emacs 25.3 をbuild

msys2 の install

windowsunix的な環境といえば、cygwinを使用してきましたが、 今回は、msys2をinstall

参考url

といっても、msys2自体は以下のurlよりダウンロードし、 インストーラを実行するのみでOK

http://repo.msys2.org/distrib/x86_64/msys2-x86_64-20180531.exe

msys2 の 最新化? 更新?

msys2 コンソール? / shell?を起動し、以下を実行

## パッケージ管理のDB更新とpacmanのinstall
MSYS2 $ pacman -Sy pacman

## 一旦、MSYS2 を再起動し、以下を実行

MSYS2 $ pacman --needed -S bash pacman pacman-mirrors msys2-runtime

## MinGWのinstall
MSYS2 $ pacman -S base-devel msys2-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain

emacs 25.3 の build

参考url

【Windows/msys2】Emacs 25.3の64bit版をビルドする | The modern stone age. msys2 を使用して Windows 10 に Emacs 25.0.94.2 (IMEパッチ適用) を導入した - blechmusikの日記

buildに必要なpackageをinstall

MSYS2 $ pacman -Sy
MSYS2 $ pacman -S \
            base-devel                     mingw-w64-x86_64-toolchain \
        mingw-w64-x86_64-xpm-nox       mingw-w64-x86_64-libtiff \
            mingw-w64-x86_64-giflib        mingw-w64-x86_64-libpng \
            mingw-w64-x86_64-libjpeg-turbo mingw-w64-x86_64-librsvg \
        mingw-w64-x86_64-libxml2       mingw-w64-x86_64-gnutls

emacs 25.3 + IME patchのbuild

MSYS2 $ wget http://ftp.gnu.org/gnu/emacs/emacs-25.3.tar.xz
MSYS2 $ wget https://codeload.github.com/gist/8c20b904c9f5e588ba99/zip/ce3af256814df287e2da594bc55e178674353abd
MSYS2 $ unzip ce3af256814df287e2da594bc55e178674353abd
MSYS2 $ patch.exe -p0 < ../emacs-25.3-w32-ime.diff

MSYS2 $ autogen.sh
MSYS2 $ CFLAGS='-Ofast -march=x86-64 -mtune=corei7 -static' \
             ./configure --without-dbus --without-compress-install --with-modules
## ↓make       
MSYS2 $ make bootstrap

## ↓make install
MSYS2 $ make install-strip

emacs 25.3 の build

MSYS2 $ runemacs

emacsのbuildや実行は、何の問題もなく完了しましたが、 「ALT+~」でIMEに切り替わらず...

で、今回は、ここまでにしておきます

ssl化した apache 2.4 起動時のパスフレーズ入力を省略

以前のエントリの関連です apache 2.4 の ssl設定 (conf/extra/httpd-ssl.conf)のオレオレ サンプル - end0tknr's kipple - 新web写経開発

以下の5行目にある「openssl rsa」を追加で行うことで、OK。なんですけど、 方法をすっかり忘れていたので、メモ

$ cd /home/end0tknr/local/apache24/conf

$ /usr/local/openssl_1_1_0/bin/openssl genrsa -aes128 2048 > server.key
$ /usr/local/openssl_1_1_0/bin/openssl req -new -key server.key > server.csr
$ /usr/local/openssl_1_1_0/bin/openssl x509 -in server.csr -days 2000 \
    -req -signkey server.key  > server.crt

$ /usr/local/openssl_1_1_0/bin/openssl rsa -in server.key.20180602  > server.key

LibGD 2.2.5 + GD.pm for perl を centos 7へ src からinstall

以前、「最近のlibgdには、configureがない」とか言ってましたが、 そもそも、cmakeに移行していたっぽい。 README は、configureがあるような記載になっていますが...

GD (libgd)をsrcからinstall - end0tknr's kipple - 新web写経開発

で、以下の通り

GD

$ curl -LO https://github.com/libgd/libgd/archive/gd-2.2.5.tar.gz
$ tar -xvf libgd-gd-2.2.5.tar.gz
$ cd libgd-gd-2.2.5
$ less docs/README.CMAKE
$ mkdir build
$ cd build
$ cmake -DBUILD_TEST=1 ..
$ make
$ make test
$ sudo make install

GD.pm

curl -LO http://search.cpan.org/CPAN/authors/id/R/RU/RURBAN/GD-2.68.tar.gz
tar -xvf GD-2.68.tar.gz
cd GD-2.68
$ perl Makefile.PL --gdlib_config_path=/usr/local/bin/gdlib-config
Configuring for libgd version 2.1.1.
Checking for stray libgd header files...none found.

Included Features:          GD_TIFF GD_JPEG GD_FREETYPE GD_GIF GD_GIFANIM GD_OPENPOLYGON GD_UNCLOSEDPOLY GD_ANIMGIF GD_FTCIRCLE VERSION_33
GD library used from:       /usr/local
gdlib-config used:          /usr/local/bin/gdlib-config
Generating a Unix-style Makefile
Writing Makefile for GD
Writing MYMETA.yml and MYMETA.json
$ make
$ make test
$ sudo make install

fuji xerox apeos port-v c7785 のプリンタinstallをdosのbatchで行う

以下のような感じかな?

※ driver自体は fuji xerox のサイトからダウンロードしてください

@echo off
set ip_addr=10.100.???.???
set dsp_name="TEST_PRINTER"

call %~dp0\common\AutoInstall.bat
@echo off

rem +------------------------------------------
rem + 管理者権限で実行していない場合は昇格
rem +------------------------------------------

net file 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto continue )
echo ***********************************
echo 管理者として実行して下さい!!
echo ***********************************
pause
exit /b 

:continue
pushd %~dp0..\

rem +------------------------------------------
rem + 印刷ポートを作成
rem +------------------------------------------
echo 1〜2分そのままでお待ち下さい...

set ip_port=IP_%ip_addr%
IF EXIST %SYSTEMROOT%\System32\prnport.vbs (
  set PRNPORT=%SYSTEMROOT%\System32\prnport.vbs
)
IF EXIST %SYSTEMROOT%\System32\Printing_Admin_Scripts\ja-JP\prnport.vbs (
  set PRNPORT=%SYSTEMROOT%\System32\Printing_Admin_Scripts\ja-JP\prnport.vbs
)

rem 既存設定を削除
rundll32 printui.dll,PrintUIEntry /q /dl /n%dsp_name%
cscript %PRNPORT% -d -r %ip_port% 1>NUL 2>NUL

rem ポート作成
cscript %PRNPORT% -a -s %computername% -r %ip_port% -h %ip_addr% -o lpr -q lp

rem +------------------------------------------
rem + プリンタドライバをインストール
rem +------------------------------------------
set name="FX ApeosPort-V C7785"

SET | FINDSTR /I ^PROGRAMFILES(X86) 1>nul 2>nul
if %ERRORLEVEL%==0 (
  set inf_path="x64\ART_EX\amd64\001\FXLH3JL.inf"
) else (
  set inf_path="x86\ART_EX\i386\001\FXLH3JL.inf"
)
rundll32.exe printui.dll,PrintUIEntry /if /f %inf_path% /m %name% /r %ip_port% /b %dsp_name%

rem +------------------------------------------
rem + 通常使用するプリンタに設定
rem +------------------------------------------
rundll32.exe printui.dll,PrintUIEntry /y /n %dsp_name%


rem +------------------------------------------
rem + 認証設定等(稀に失敗する)
rem +------------------------------------------
rem start common\property.vbs %dsp_name%


popd 

samba 経由でfileを編集すると、書込みが遅いらしく、 -bash: ./foo.pl: /usr/local/bin/perl: bad interpreter: Text file busy

samba 経由でfile( perl script )を編集し、実行すると、以下のようなエラー

$ ./foo.pl
-bash: ./foo.pl: /usr/local/bin/perl: bad interpreter: Text file busy 

どうやら、実際の書込みが遅いらしい。 なので、 smb.conf に「 oplocks = no 」の設定追加。

oplocks = no による悪影響は理解していません。

$ sudo vi /etc/samba/smb.conf

[global]
  workgroup = SAMBA
  security = user
  passdb backend = tdbsam

  printing = cups
  printcap name = cups
  load printers = yes
  cups options = raw
  hosts allow = 192.168. 127.

  oplocks = no
  :

SMB::Client for perl で、SMB接続し、fileをdownload

http://search.cpan.org/perldoc?SMB

https://metacpan.org/pod/SMB

上記を参考に、次のように書きます。

use strict;
use warnings;
use SMB::Client;
use Data::Dumper;

main();

sub main {
    my $client = SMB::Client->new('//192.168.56.101/end0tknr',
                                  username => 'ないしょ',
                                  password => 'ないしょ');
    my $tree = $client->connect_tree;
    
    for my $file ($tree->find("tmp/*")) {
        printf "%-40s %s\n", $file->name, $file->mtime_string;
        if($file->name eq "COPYING.txt"){
            $tree->dnload("tmp/COPYING.txt") or die "Failed to download";
        }

#        $tree->rename("my.log", $new_filename) or die "Failed to rotate";
#        $tree->dnload('new_'$new_filename) or die "Failed to download";
#        $tree->remove($new_filename) or die "Failed to remove";
    }
}

contos 7 において GnuTLS の configureを行うと、「Libnettle 3.1 was not found.」エラー

単純に https://ftp.gnu.org/gnu/nettle/nettle-3.4.tar.gz をダウンロード後、 configure , make , make install するだけではNG。

contos 7は、64bitなOSなので、「./configure --libdir=/lib64」のように、実行することで解消

apache commons csv for javaで、文字コードを指定して読む

先程のエントリのおまけ。以下

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;


public class TestConvEncode3 {
    public static void main(String[] args) {
        String nowDir = new File(".").getAbsoluteFile().getParent();
        System.out.println("CURRENT DIR: " + nowDir);
        
        InputStreamReader isr0 = new InputStreamReader(System.in);
        
        String csvPath;
        try(BufferedReader br0 = new BufferedReader( isr0 ) ) {
            System.out.println("input csv file path below...");
            csvPath = br0.readLine();
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
        
        List<CSVRecord> recordList;
        
        try(BufferedReader br = 
            new BufferedReader(
                               new InputStreamReader(
//                                              new FileInputStream(new File(csvPath)),"MS932"))){
                                                     new FileInputStream(new File(csvPath)),"SJIS"))){
            CSVParser parse =
                CSVFormat
                .EXCEL                          // ExcelのCSV形式を指定
                .withIgnoreEmptyLines(true)     // 空行を無視する
                .withFirstRecordAsHeader()      // 最初の行をヘッダーとして読み飛ばす
                .withIgnoreSurroundingSpaces(true)  // 値をtrim
                .parse(br);
            
            recordList = parse.getRecords();
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return;
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
        
        for (CSVRecord record : recordList) {
            for(int i = 0; i< record.size(); i++) {
                System.out.println(record.get(i) );
            }
            System.out.println("");
        }
    }
}

javaでfileをUTF-8で読み、別fileMS932で書く - InputStreamReader() , OutputStreamWriter() , PrintStream()

java 文字コード 変換」でグルると、 「new String("あ".getBytes("UTF-8"), "SJIS")」の方法を見かけますが、 これは誤りで、正しくは以下のように書くはず。

その他、SJISと MS932 の文字コード(文字セット)の違いを理解できていない人もよく見かけます。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;


public class TestConvEncode2 {
    
    public static void main(String[] args) {
        File fileIn = new File(args[0]);
        
        String newFilePath =
            fileIn.getAbsoluteFile().getParent() + "/NEW_FILE.TXT";
        File fileOut = new File(newFilePath);
        
        try {
            // javaで主に使用する文字コードは、UTF-8, SJIS, MS932
            FileInputStream input = new FileInputStream(fileIn);
            InputStreamReader streamIn = new InputStreamReader(input,"UTF-8");
            BufferedReader bufferR = new BufferedReader(streamIn);
            
            FileOutputStream output = new FileOutputStream(fileOut);
            OutputStreamWriter streamOut = new OutputStreamWriter(output,"MS932");
            BufferedWriter bufferOut = new BufferedWriter(streamOut);
            
            String str;
            while((str = bufferR.readLine()) != null){
                
                try {
                    // fileへ指定した文字コードで出力
                    bufferOut.write(str);

                    // 標準出力へ指定した文字コードで出力
                    PrintStream out_ms932 =
                        new PrintStream(System.out, true, "MS932");
                    out_ms932.println(str);
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
            bufferR.close();
            bufferOut.close();
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

↑こう書くと、↓こう実行できます

$ javac TestConvEncode2.java 
$ java TestConvEncode2 foo.txt 

Re: HashiCorp Vaultの基礎知識と導入

Vault by HashiCorp

HashiCorp Vaultの基礎知識と導入 | Developers.IO

  • 1) 機密情報/秘密情報を管理するためのソフトウェア
  • 2) バックエンドには、MySQLAWS S3?を利用可能
  • 3) 2015年に初回リリース

らしい。

Vaultがフロントに立ち、暗号化/複合化 を担ってくれるらしい。

1) だけ聞くと、導入したくなりますが、 2) のような中身であれば、自前実装でもよい気がします。

3)のように初回リリースから、それ程、経過していないこともあるので、 もう少し様子見

IPA J-CRAT(サイバーレスキュー隊)による インシデント発生時の初動調査の手引き for Win

「インシデント発生時の初動調査の手引き WindowsOS標準ツールで感染を見つける」

https://www.ipa.go.jp/security/J-CRAT/report/20180329.html

https://www.ipa.go.jp/files/000065284.pdf

外部からの攻撃が、サーバを超え、更に内部のPCにまで達すると、 攻撃の痕跡調査は(少なくとも私には)難しくなりますが、 J-CRATが公開する以下のpdfは、windowsコマンドラインまで記載されているので、助かります。

Re: 組織対応力ベンチマークチェックシート by OGC

【プレスリリース】「組織対応力ベンチマーク」発表に関して (2015年7月1日) - 一般社団法人 オープンガバメント・コンソーシアム

が提供されていて、内容を見ると、 「IPAでも公開してそうな資料」 & 「取っ掛かりとしての粒度としては、ちょうどいい」という印象。

OGC = オープンガバメント・コンソーシアム らしい。初めて聞いた団体名ですが、IPA との違いって何でしょ?