end0tknr's kipple - web写経開発

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

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 との違いって何でしょ?

政府系システムの調達指針 - 機能要求や非機能要求(特にセキュリティ)

外部委託する際の 要求のまとめ方について、ググってみた

以下は、いずれも、「記載されていて当然」的な内容ですが、 漏れがちな内容でもありますので、自分用にメモ。

情報システム調達のための技術参照モデル(TRM)調達仕様書ひな形編

IPAが公開する 要求/要件仕様等、全般のサンプル(テンプレート)

1) https://www.ipa.go.jp/osc/trm/index.html

└ 2) https://www.ipa.go.jp/osc/trm/trmtemplate.html

図や表でなく、多くを文章で記載されていますが、さすがの情報量、というか網羅性。

上記 2)にある資料には、機能要求や非機能要求だけでなく、 納品物の定義やプロジェクト推進方法まで記載されています。

まぁ、ここまで細かく指定してくれるシステム発注者は、いないんですけどね。

政府機関等の情報セキュリティ対策のための統一基準群(平成28年度版)

http://www.nisc.go.jp/active/general/kijun28.html

内閣サイバーセキュリティセンターが公開する特にセキュリティ対策の資料。

こちらも、多くを文章で記載されていますが、さすがの網羅性。

情報システムに係る政府調達におけるセキュリティ要件策定マニュアル

http://www.nisc.go.jp/active/general/sbd_sakutei.html

こちらも、内閣サイバーセキュリティセンターによる公開資料。

特に * セキュリティ要件策定マニュアル 付録A.対策要件集 * には 具体的セキュリティリスクの内容と、それに対する仕様記載例、対策例 が、 表形式で記載されていて、読み休みです。

地方公共団体における情報セキュリティポリシーに関するガイドライン

http://www.soumu.go.jp/denshijiti/jyouhou_policy/index.html

こちらは「地方公共団体」向けで、 前述の「情報システム調達のための技術参照モデル(TRM)」と重複している 部分も多くありますので、参考程度。

JPCERT CC による インシデント ハンドリング マニュアル

システム運用に関しては、以前、以下のエントリを記載しています。

ITILにおけるインシデント管理と、問題管理 - end0tknr's kipple - 新web写経開発

システム運用管理の勘どころ - end0tknr's kipple - 新web写経開発

JPCERT CC が公開する インシデント ハンドリング マニュアル (以下)は、 ITILのフローと異なりますが、JPCERT CC が出してるものですので、参考になります

f:id:end0tknr:20180502055142p:plain

https://www.jpcert.or.jp/csirt_material/files/manual_ver1.0_20151126.pdf

CentOS 7.4 へ mysql 5.6.40 を src から install

以前も mysql 5.7 に関して同様のentryを記載していますが、 virtual boxで動作させている centos を ver.7.4 にした為、改めてinstall

先程のentryにも記載していますが、mysql 5.7.18 より、

my.cnf が提供されない為、mysql 5.6.40をinstallしています

mysql5.7 をsrcからinstall - end0tknr's kipple - 新web写経開発

MySQL :: MySQL 5.6 リファレンスマニュアル :: 2.9 ソースから MySQL をインストールする

$ cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core)

前準備 - readline と ncurses の intall

以前は、とっくにreadlineやncurses (≒ curses) がinstall された centos7 環境に mysql をinstallしていたらしい。

そこで今回は、readline と ncurses を install

readline

$ ftp://ftp.cwru.edu/pub/bash/readline-6.3.tar.gz
$ tar -xvf readline-6.3.tar.gz
$ cd readline-6.3
$ configure
$ make
$ sudo make install

ncurses ≒ curses

https://www.gnu.org/software/ncurses/

https://invisible-island.net/ncurses/ncurses.html

$ sudo yum install ncurses-devel

mysql の build や install

$ tar -xvf mysql-5.6.40.tar.gz
$ cd mysql-5.6.40
$ cmake . \
   -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
   -DDEFAULT_CHARSET=utf8 \
   -DDEFAULT_COLLATION=utf8_general_ci \
   -DENABLED_LOCAL_INFILE=true \
   -DWITH_INNOBASE_STORAGE_ENGINE=1 \
   -DWITH_EXTRA_CHARSETS=all \
   -DWITH_READLINE=ON \
$ make
$ make test
$ sudo make install

設定

ユーザやグループ追加

$ sudo groupadd mysql
$ sudo useradd -r -g mysql mysql

mysql_install_db 実行による data dirや my.cnfの作成

MySQL :: MySQL 5.6 リファレンスマニュアル :: 2.9.2 標準ソース配布を使用して MySQL をインストールする

dev.mysql.comのdocument のように単純?に scripts/mysql_install_db を実行すると data dir が /usr/local/mysql 以下に作成されます。

/usr/local/mysql 以下にデータがある構成は、好みではありませんので、「 --datadir=/var/mysql_data/ 」を追加しています。

( dev.mysql.comのdocument では、/usr/local/mysql 以下に data dir を作成する為、 余計な chown や chgrp の実行が必要です )

$ cd /usr/local/mysql
$ sudo /usr/local/bin/perl \
       scripts/mysql_install_db \
         --user=mysql  --datadir=/var/mysql_data/

edit /etc/my.cnf

先程の scripts/mysql_install_db により /usr/local/mysql/my.cnf が作成されますので、 /etc/my.cnf へ移動し、編集します。

$ sudo su -
# cd /etc
# mv /usr/local/mysql/my.cnf ./my.cnf
# vi ./my.cnf

以下、編集内容

old) # basedir = .....
new) basedir = /usr/local/mysql
old) # datadir = .....
new) datadir = /var/mysql_data

mysql 5.1頃から使用していたmy.cnfでは、 他にも様々、設定していましたが、上記だけの編集でも動作はするようです。

一旦、接続test

$ cd /usr/local/mysql
$ sudo bin/mysqld_safe --user=mysql

上のようにmysqldaemonを起動し、 下のようにmysqlのclientで接続できれば、OKです。

$ /usr/local/mysql/bin/mysql -u root
 :
Server version: 5.6.40 Source distribution
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
 :
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

接続test完了後は、mysqldaemonを停止してOKです。

ただし、停止方法が分からなかった為、kill しています。

自動起動

自動起動の設定自体は、mysql.server を /etc/init.d 以下にcopyするだけです。 設定後、centosを再起動して、mysqldaemonが動作していることを確認しましょう。

$ sudo su -
# cd /etc/init.d
# cp /usr/local/mysql/support-files/mysql.server ./mysql.server
# systemctl enable mysql.server

# reboot