以前、pdftkでスタンプを作ったが、
同じ原理で、タイムスタンプを押したいという話になった。
itextを使うといった手法もあるようだが、
費用が掛からず、なるべく動作が軽い方向で検討してみる。
過去の財産を有効活用するため、
フッターに日付を持ったpdfを作成してみる。
いきなりPDFは作成できないので、
psファイルを一旦作成し、それをPDFに変換することにする。
a2psがデフォルトでインストールされていないので、
# yum install a2ps
なるべく重たくしないように、一回だけ改行した text.txtを作成し、footer.psに変換
コマンドは
$ a2ps text.txt -B -R --borders=no --footer=`date +%Y-%m-%d-%H:%M` -o footer.ps
オプションの補足
-B フレームを消す。
-R 用紙を縦にする。
--borders=no 外枠を消す。
--footer=`date +%Y-%m-%d-%H:%M` フッターに2015-01-01-01:01のタイムスタンプ
-o ファイル形式で出力する。
続いて、pdfに変換
$ ps2pdf footer.ps footer.pdf
以上。
これをcron等で、5分おき程度に作成させておけば、良い。
オプションを調べるのに凄く時間を消費したので、メモしておく。
2016/01/05
2015/12/25
PHPExcel MSSqlServer PHPの記述
DBから取ってくる際には、shift-jisでページを作成しておかないと文字化けしたので、
やむを得ず、shift-jisで取り扱ったが、PHPExcelでのセルへの書き込みは
UTF-8で行う必要が有るため、MSSqlServerのエンコードCP932をUTF-8にして書き込む。
忘れやすいので、記載例を残す。
<?php
//PHPExcelの読み込み。
require_once("./Classes/PHPExcel.php");
require_once("./Classes/PHPExcel/IOFactory.php");
//タイムゾーン指定
date_default_timezone_set('Asia/Tokyo');
//MSSQLに接続。
$server='192.168.0.XXX:1433';
$username='USR_XXX';
$password='*******';
$con=mssql_connect($server,$username,$password);
//データベースを選択
mssql_select_db('DBの名前');
//クエリ作成。
$query = mssql_query("select~ 適宜作成 ");
//DBからデータ取得。
$col = mssql_fetch_array($query)
//PHPexcel xslx 形式の定義。
$reader = PHPExcel_IOFactory::createReader('Excel2007');
//example.xlsxを下敷きにする。
$excel = $reader->load("./下敷きにするエクセル.xlsx");
// シート設定。
$excel->setActiveSheetIndex(0);//何番目のシートか
$sheet = $excel->getActiveSheet();//有効になっているシートを代入
// セル値指定。
//日本語の指定が面倒。
//書き込みはUTF-8で行う必要が有るため、MSSqlServerのエンコードCP932をUTF-8にして書き込む。
$sheet->setCellValue('A1', mb_convert_encoding($name, 'UTF-8','auto'));//セルに値を入力。
$sheet->setCellValue('A2', mb_convert_encoding($addr, 'UTF-8','auto'));
$sheet->setCellValue('A3', mb_convert_encoding($requester, 'UTF-8','auto'));
$sheet->setCellValue('A4', mb_convert_encoding($TEL, 'UTF-8','auto'));
$sheet->setCellValue('A5', mb_convert_encoding($FAX, 'UTF-8','auto'));
$sheet->setCellValue('A6', $Number);//内部変数で扱うものは、特にエンコード不要。
//Excel2007形式(xlsx)のライターを作成。
$writer = PHPExcel_IOFactory::createWriter($excel, "Excel2007");
//ファイル出力。
$writer->save($Number.".".xlsx);
//結果セットを破棄。
mssql_free_result($query);
//SQL Serverとの接続を解除。
mssql_close();
?>
やむを得ず、shift-jisで取り扱ったが、PHPExcelでのセルへの書き込みは
UTF-8で行う必要が有るため、MSSqlServerのエンコードCP932をUTF-8にして書き込む。
忘れやすいので、記載例を残す。
<?php
//PHPExcelの読み込み。
require_once("./Classes/PHPExcel.php");
require_once("./Classes/PHPExcel/IOFactory.php");
//タイムゾーン指定
date_default_timezone_set('Asia/Tokyo');
//MSSQLに接続。
$server='192.168.0.XXX:1433';
$username='USR_XXX';
$password='*******';
$con=mssql_connect($server,$username,$password);
//データベースを選択
mssql_select_db('DBの名前');
//クエリ作成。
$query = mssql_query("select~ 適宜作成 ");
//DBからデータ取得。
$col = mssql_fetch_array($query)
//PHPexcel xslx 形式の定義。
$reader = PHPExcel_IOFactory::createReader('Excel2007');
//example.xlsxを下敷きにする。
$excel = $reader->load("./下敷きにするエクセル.xlsx");
// シート設定。
$excel->setActiveSheetIndex(0);//何番目のシートか
$sheet = $excel->getActiveSheet();//有効になっているシートを代入
// セル値指定。
//日本語の指定が面倒。
//書き込みはUTF-8で行う必要が有るため、MSSqlServerのエンコードCP932をUTF-8にして書き込む。
$sheet->setCellValue('A1', mb_convert_encoding($name, 'UTF-8','auto'));//セルに値を入力。
$sheet->setCellValue('A2', mb_convert_encoding($addr, 'UTF-8','auto'));
$sheet->setCellValue('A3', mb_convert_encoding($requester, 'UTF-8','auto'));
$sheet->setCellValue('A4', mb_convert_encoding($TEL, 'UTF-8','auto'));
$sheet->setCellValue('A5', mb_convert_encoding($FAX, 'UTF-8','auto'));
$sheet->setCellValue('A6', $Number);//内部変数で扱うものは、特にエンコード不要。
//Excel2007形式(xlsx)のライターを作成。
$writer = PHPExcel_IOFactory::createWriter($excel, "Excel2007");
//ファイル出力。
$writer->save($Number.".".xlsx);
//結果セットを破棄。
mssql_free_result($query);
//SQL Serverとの接続を解除。
mssql_close();
?>
2015/12/21
PHPExcel MSSQLServerへの接続時エラーのメモ
開発ベンダが、DBの中身をShift-JISで格納してしまっているため、
PHP等をshift-jisで書かないと不具合が出る。
UTF-8の方がいろいろと都合がいいので、
mb_convert_encodingを使ったのだが上手くいかない・・・。
さぁ、動きそうだなというところで、今度は、別のエラーを検出
Warning: strtotime(): It is not safe to rely on the
system's timezone settings. You are *required* to use the date.timezone
setting or the date_default_timezone_set() function. In case you used
any of those methods and you are still getting this warning, you most
likely misspelled the timezone identifier. We selected the timezone
'UTC' for now, but please set date.timezone to select your timezone.
date_default_timezone_getで宣言しろ
ということなので、PHPの頭に
date_default_timezone_set('Asia/Tokyo');
を書いたら動いた。
Fatal error: Uncaught exception 'PHPExcel_Writer_Exception' with message 'Could not close zip
この辺のエラーはディレクトリに書き込み権限が無い場合によると思う。
パーミッションを 777 とかにして試験してみれば、行けると思う。
2015/12/11
PHPExcel 実装
DBの扱いで最も手間が掛かるのが帳票だと思う。
基幹システムがjavaで書かれているので、
現状DBを舐めてデータを取得し、velocity、xls_foを使ってPDFを作成している。
この際、整形の為 xsl_foを苦労して造るのだが、
この作業が如何せん手間が掛かる。
スタッフからは「ここを直せ」と言われ、
クライアントからは「仕様が変わったから帳票変更」で片づけられる。
クライアントからは、エクセルで帳票のフォーマットが送られてくるので、
何とかvelocityでエクセルを扱おうとしたが、マージするくらいなら、
xsl_foを0から書いた方が楽な場合が多く、困っていた。
色々と探してみると、PHPでいいのがあるではないか!!
早速、ライブラリを使ってみる。
PHPは5.2以上で
php_zip, php_xml, php_gd2が拡張されているのが条件らしい。
php_xml, php_gd2がenableされていなかったので、
/etc/php.ini を編集
php_gd2は
# yum install php-gd でOKだった。
# systemctl restart httpd で設定読み直し
続いて、ライブラリのダウンロード
本家から最新のPHPExcel_1.8.0 をダウンロードする。
使い方は、PHP動かすディレクトリにClassesファイルを置いて、
require_onceでライブラリを読み込ませればOK
色々な参考サイトで、include_onceで書いている人が多かったが、
何故かinclude では上手く動かなかった。
以下PHPの例
マクロやVBAが入っていると上手くないというコメントも見られるが、
エクセルで設定した罫線や、文字サイズなどがキッチリ継承されるので、
すごーく便利。
もっと早く使いたかった・・・。
基幹システムがjavaで書かれているので、
現状DBを舐めてデータを取得し、velocity、xls_foを使ってPDFを作成している。
この際、整形の為 xsl_foを苦労して造るのだが、
この作業が如何せん手間が掛かる。
スタッフからは「ここを直せ」と言われ、
クライアントからは「仕様が変わったから帳票変更」で片づけられる。
クライアントからは、エクセルで帳票のフォーマットが送られてくるので、
何とかvelocityでエクセルを扱おうとしたが、マージするくらいなら、
xsl_foを0から書いた方が楽な場合が多く、困っていた。
色々と探してみると、PHPでいいのがあるではないか!!
早速、ライブラリを使ってみる。
PHPは5.2以上で
php_zip, php_xml, php_gd2が拡張されているのが条件らしい。
php_xml, php_gd2がenableされていなかったので、
/etc/php.ini を編集
php_gd2は
# yum install php-gd でOKだった。
# systemctl restart httpd で設定読み直し
続いて、ライブラリのダウンロード
本家から最新のPHPExcel_1.8.0 をダウンロードする。
使い方は、PHP動かすディレクトリにClassesファイルを置いて、
require_onceでライブラリを読み込ませればOK
色々な参考サイトで、include_onceで書いている人が多かったが、
何故かinclude では上手く動かなかった。
以下PHPの例
<?
//PHPExcelの読み込み
require_once("./Classes/PHPExcel.php");
require_once("./Classes/PHPExcel/IOFactory.php");
//PHPexcel xslx 形式の定義
$reader = PHPExcel_IOFactory::createReader('Excel2007');
//base.xlsxを下敷きにする。
$excel = $reader->load("./base.xlsx");
// シート設定
$excel->setActiveSheetIndex(0);//何番目のシートか
$sheet = $excel->getActiveSheet();//有効になっているシートを代入
// セル値指定
$sheet->setCellValue('A10', 'Hello World !');//セルA10に値を入力
//Excel2007形式(xlsx)のライターを作成
$writer = PHPExcel_IOFactory::createWriter($excel, "Excel2007");
//ファイル出力
$writer->save("helloworld.xlsx);
?>
マクロやVBAが入っていると上手くないというコメントも見られるが、
エクセルで設定した罫線や、文字サイズなどがキッチリ継承されるので、
すごーく便利。
もっと早く使いたかった・・・。
2015/10/13
非同期処理 HTML 検索窓を追加する
過去に書いた内容のブラッシュアップ
http://t0463.blogspot.jp/2015/06/windowsserver2012sshsqlcsv.html
http://t0463.blogspot.jp/2015/06/windowsserver2012sshsqlcsv.html
jquery.csv2table を使い、csvを表にして表示させているが、
検索して、行を絞り込みたいという要望が出たので、
実装させてみる。
http://jsgt.org/lib/jquery/plugin/csv2table/v002/test.htm
↑このサイトの
setting.where 行の絞込み
をほぼそのまま流用にさせていただいた。ありがとうございます。
中身はこんな感じ
<body> <input type="text" id="word"> <button type="button" id="btn-search">番号で検索</button> <input type="text" id="word2"> <button type="button" id="btn-search2">住所で検索</button> <div id="view1"></div> <script type="text/javascript"> $().ready ( function() { $('#btn-search').click ( function() { $('#view1').csv2table('./listUTF8.csv', { where: [ {'検索させたい列名':'like' + '%' + $('#word').val() + '%'} ] }); }); }); </script> <script type="text/javascript"> $().ready ( function() { $('#btn-search2').click ( function() { $('#view1').csv2table('./listUTF8.csv', { where: [ {'検索させたい列名2':'like' + '%' + $('#word2').val() + '%'} ] }); }); }); </script> <br> <font size ='2'>一覧表示</font> <div id="view0"></div> <script> $(function(){ $('#view0').csv2table('./listUTF8.csv'); }); </script> </body>
2015/09/09
CentOS7.1 PHPでSQLServerにアクセス。
この内容は古いので、MSSQLへPHPで接続(PDO接続)を参照されたい
ODBC-develをyumでインストール。
# yum install unixODBC-devel.x86_64
前回のpdftkもそうだったが、freetds-develもサポート外のようで、
ソースからビルドかと思ったが、epelで取ってこれるらしいのでやってみる。
# yum install epel-release
続いて、freetds-develをyumでインストール
# yum install freetds-devel
読み込んだプラグイン:fastestmirror, langpacks
epel/x86_64/metalink | 5.2 kB 00:00
epel | 4.3 kB 00:00
(1/3): epel/x86_64/group_gz | 169 kB 00:00
epel/x86_64/updateinfo FAILED
http://ftp.kddilabs.jp/Linux/packages/fedora/epel/7/x86_64/repodata/2c17dad24b2f96866b643bc3d4ce432833ca592ecf1af495e2b3a2361cf7ceab-updateinfo.xml.bz2: [Errno 14] HTTP Error 404 - Not Found
他のミラーを試します。
(2/3): epel/x86_64/updateinfo | 349 kB 00:00
(3/3): epel/x86_64/primary_db | 3.5 MB 00:06
Downloading packages:
警告: /var/cache/yum/x86_64/7/epel/packages/freetds-devel-0.91-12.git0a42888.el7.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID 3XXXXXX: NOKEY
freetds-devel-0.91-12.git0a42888.el7.x86_64.rpm の公開鍵がインストールされていません
(1/2): freetds-devel-0.91-12.git0a42888.el7.x86_64.rpm | 48 kB 00:00
(2/2): freetds-0.91-12.git0a42888.el7.x86_64.rpm | 1.1 MB 00:00
--------------------------------------------------------------------------------
合計 2.4 MB/s | 1.2 MB 00:00
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 から鍵を取得中です。
Importing GPG key 0xXXXXXXX:
Userid : "Fedora EPEL (7)"
Package : epel-release-7-5.noarch (@extras)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
上記の処理を行います。よろしいでしょうか? [y/N]y
途中上記の警告が出たが、インストールできた模様。
早速、phpで接続試験をすると、SqlServerにアクセスしていないようだ。
なんでだろう?
info.phpを作って調べると、php-mssql.x86_64 がインストールされていない模様。
# yum install php-mssql.x86_64
で
# systemctl restart httpd.service
で動いた。
接続の試験用
$server='192.168.XXX.XXX:1433';
$username='USR_XXX';
$password='*****';
$con=mssql_connect($server,$username,$password);
if($con !=FALSE)
{
echo "Connection to SqlServer successful";
}
else
{
die("Connection to SqlServer failed");
}
mssql_close($con);
?>
ODBC-develをyumでインストール。
# yum install unixODBC-devel.x86_64
前回のpdftkもそうだったが、freetds-develもサポート外のようで、
ソースからビルドかと思ったが、epelで取ってこれるらしいのでやってみる。
# yum install epel-release
続いて、freetds-develをyumでインストール
# yum install freetds-devel
読み込んだプラグイン:fastestmirror, langpacks
epel/x86_64/metalink | 5.2 kB 00:00
epel | 4.3 kB 00:00
(1/3): epel/x86_64/group_gz | 169 kB 00:00
epel/x86_64/updateinfo FAILED
http://ftp.kddilabs.jp/Linux/packages/fedora/epel/7/x86_64/repodata/2c17dad24b2f96866b643bc3d4ce432833ca592ecf1af495e2b3a2361cf7ceab-updateinfo.xml.bz2: [Errno 14] HTTP Error 404 - Not Found
他のミラーを試します。
(2/3): epel/x86_64/updateinfo | 349 kB 00:00
(3/3): epel/x86_64/primary_db | 3.5 MB 00:06
Downloading packages:
警告: /var/cache/yum/x86_64/7/epel/packages/freetds-devel-0.91-12.git0a42888.el7.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID 3XXXXXX: NOKEY
freetds-devel-0.91-12.git0a42888.el7.x86_64.rpm の公開鍵がインストールされていません
(1/2): freetds-devel-0.91-12.git0a42888.el7.x86_64.rpm | 48 kB 00:00
(2/2): freetds-0.91-12.git0a42888.el7.x86_64.rpm | 1.1 MB 00:00
--------------------------------------------------------------------------------
合計 2.4 MB/s | 1.2 MB 00:00
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 から鍵を取得中です。
Importing GPG key 0xXXXXXXX:
Userid : "Fedora EPEL (7)
Package : epel-release-7-5.noarch (@extras)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
上記の処理を行います。よろしいでしょうか? [y/N]y
途中上記の警告が出たが、インストールできた模様。
早速、phpで接続試験をすると、SqlServerにアクセスしていないようだ。
なんでだろう?
info.phpを作って調べると、php-mssql.x86_64 がインストールされていない模様。
# yum install php-mssql.x86_64
で
# systemctl restart httpd.service
で動いた。
接続の試験用
$server='192.168.XXX.XXX:1433';
$username='USR_XXX';
$password='*****';
$con=mssql_connect($server,$username,$password);
if($con !=FALSE)
{
echo "Connection to SqlServer successful";
}
else
{
die("Connection to SqlServer failed");
}
mssql_close($con);
?>
2015/09/01
CentOS7.1 Logwatchのメールを送信する。
CentOS5.xはport25を開ければ、そのまんま飛んできたが、
CentOS7.1はどうもデフォルトのままでは、Logwatchが飛ばないらしい。
まずは、メールソフトは何が動いているのか?を調べてみる。
sendmailが入っているか?
# systemctl status sendmail.service sendmail.service Loaded: not-found (Reason: No such file or directory) Active: inactive (dead)
sendmailはサービスとして認識されているが、インストールされていない模様。
yumにメール関連は入っていないのか?と思ったが、
# yum list installed
postfix.x86_64 2:2.10.1-6.el7 @anacondapostfixがインストールされていた。
sendmailが標準ではなくなったようだ。
動いているか確認。
# systemctl status postfix.service
postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled)
Active: active (running) since 金 2015-08-28 19:30:38 JST; 3 days ago
自動起動していた・・・。
postfixの設定
#nano /etc/postfix/main.cf
myhostname = mail.何か名前.com 追加
mydomain = 何か名前.com 追加
myorigin = $mydomain コメント解除し、ローカルからの送信時ドメイン名を付与
inet_interfaces = localhost 今の所、受信はしないつもりなので、このまま
inet_protocols = ipv4 IPv6許容して無い時は影響受けるらしいので、記述
#mydestination = $myhostname, localhost.$mydomain, localhost コメント化
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain コメント解除し自己メール許容
home_mailbox = Maildir/ コメント解除
保存して、postfixを再起動。
# systemctl restart postfix.service
# systemctl status postfix.service
postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled)
Active: active (running) since 火 2015-09-01 10:36:14 JST; 4s ago
Process: 9847 ExecStop=/usr/sbin/postfix stop (code=exited, status=0/SUCCESS)
Process: 9862 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
Process: 9859 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
Process: 9857 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
logwatchのメールを送ってみる。
# /etc/cron.daily/0logwatch
指定のアドレスにメールが届けばOK。
ポート25の開放の方法は
# firewall-cmd --add-service=smtp --permanent
success
# firewall-cmd --reload
success
# firewall-cmd --list-all
public (default, active)
interfaces: enp2s0
sources:
services: dhcpv6-client http postgresql samba smtp ssh tomcat
ports: 8080/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
追記
logwatchのメールを複数に送信する場合は、
# nano /usr/share/logwatch/default.conf/logwatch.conf
Detail = Med
MailTo = 任意のアドレス 任意のアドレス2 (半角スペースを挟めば良い模様)
2015/08/28
CentOS7.1 無理やり PDFTkをインストールする。
CentOS7.1にして、ありゃりゃな事に遭遇。
PDFTkがRPMでインストールできなかった・・・。
以前の作業(PDFTkをRPMでインストール)
http://t0463.blogspot.jp/2014/12/pdfpdftk.html
フォーラム等によると、どうも、libgcjとかいうライブラリがCentOS7から入っていない為、駄目らしい
https://github.com/documentcloud/docsplit/issues/123 此処に
building PDFtk on RHEL 7 currently isn't possible due to upstrean (Fedora) dropping support for libgcj
とあるので、サポートして無いのだろう。
だがしかし、こちらに偉大な先人が 数名いらっしゃった。
http://ume.macoron.net/archives/7627
http://blog.cyber-support.info/article/424149031.html
ベクタ画像を描くのに必要となる基本的なライブラリを入れる。
yum install libart_lgpl
つづいて、そのサポートしなくなったlibgcjのパッケージを用意
# wget http://ftp.riken.jp/Linux/centos/6.7/os/x86_64/Packages/libgcj-4.4.7-16.el6.x86_64.rpm
# rpm -iv --force libgcj-4.4.7-16.el6.x86_64.rpm
最後にPDFTkを持ってくる。
# wget https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk-2.02-1.el6.x86_64.rpm
# rpm -ivh pdftk-2.02-1.el6.x86_64.rpm
動いているようなので、良かった・・・。
OSのアップグレードはこういうのがネックだと感じる。
PDFTkがRPMでインストールできなかった・・・。
以前の作業(PDFTkをRPMでインストール)
http://t0463.blogspot.jp/2014/12/pdfpdftk.html
フォーラム等によると、どうも、libgcjとかいうライブラリがCentOS7から入っていない為、駄目らしい
https://github.com/documentcloud/docsplit/issues/123 此処に
building PDFtk on RHEL 7 currently isn't possible due to upstrean (Fedora) dropping support for libgcj
とあるので、サポートして無いのだろう。
だがしかし、こちらに偉大な先人が 数名いらっしゃった。
http://ume.macoron.net/archives/7627
http://blog.cyber-support.info/article/424149031.html
ベクタ画像を描くのに必要となる基本的なライブラリを入れる。
yum install libart_lgpl
GNUのコンパイラも必要みたいなので、CentOS6.7のものをPRMでインストール
# wget http://ftp.riken.jp/Linux/centos/6.7/os/x86_64/Packages/gmp-4.3.1-7.el6_2.2.x86_64.rpm# rpm -iv --force gmp-4.3.1-7.el6_2.2.x86_64.rpm
つづいて、そのサポートしなくなったlibgcjのパッケージを用意
# wget http://ftp.riken.jp/Linux/centos/6.7/os/x86_64/Packages/libgcj-4.4.7-16.el6.x86_64.rpm
# rpm -iv --force libgcj-4.4.7-16.el6.x86_64.rpm
最後にPDFTkを持ってくる。
# wget https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk-2.02-1.el6.x86_64.rpm
# rpm -ivh pdftk-2.02-1.el6.x86_64.rpm
動いているようなので、良かった・・・。
OSのアップグレードはこういうのがネックだと感じる。
2015/08/22
CentOS7.1 Logwatch と crontabの設定
# yum install logwatch
# nano /usr/share/logwatch/default.conf/logwatch.conf
Detail = Med
MailTo = 任意のアドレス
以前の記事にあるが、crontabの時間がランダムになってしますので、
レガシーなcrontabにする。
# yum install cronie-noanacron
# rpm -e cronie-anacron
# nano /etc/cron.d/dailyjobs を修正。
2015/08/21
CentOS7.1 sambaインストール
http://desktop-linux.namakemono345.com/samba-centos-7/
これは、特に考えずにyumでインストールする。
# yum install samba
sambaの設定
[global]内に以下を、書き換え、追加する。
workgroup = workgroup
server string = 表示したいことを書いておく
netbios name = 表示したいことを書いておく
#windowsからのアクセスを許容する
map to guest = bad user
末尾に
[共有させる名称] ←この名前で認識される
comment = 名称
; browseable = yes
create mode = 0777
directory mode = 0777
path = /home/任意ディレクトリ
guest ok = yes
only guest = yes
writeable = yes
上記は基本全権限。
ディレクトリを作る。
#mkdir /home/任意ディレクトリ
OS起動時に自動起動にする
自動起動を有効にする。
# systemctl enable smb
これは、特に考えずにyumでインストールする。
# yum install samba
sambaの設定
[global]内に以下を、書き換え、追加する。
workgroup = workgroup
server string = 表示したいことを書いておく
netbios name = 表示したいことを書いておく
#windowsからのアクセスを許容する
map to guest = bad user
末尾に
[共有させる名称] ←この名前で認識される
comment = 名称
; browseable = yes
create mode = 0777
directory mode = 0777
path = /home/任意ディレクトリ
guest ok = yes
only guest = yes
writeable = yes
上記は基本全権限。
ディレクトリを作る。
#mkdir /home/任意ディレクトリ
OS起動時に自動起動にする
自動起動を有効にする。
# systemctl enable smb
# systemctl list-unit-files で確認。
smb.service enabled
起動
# systemctl start smb
ファイアーフォール開ける。
# firewall-cmd --add-service=samba --permanent
# firewall-cmd --reload
Windowsマシンからアクセスすると、
ディレクトリに入って中が見えるのに、書き込もうとすると
アクセス権限が無いといわれる。
そのくせ、デリートは出来たみたいになる。
(Linux上では消えていないので、オカシイ)
SELinuxがわるさしてるっぽいので動いているか調べる
# getenforce
Enforcing
動いておるので、とりあえず止めてみる。
動いておるので、とりあえず止めてみる。
# setenforce 0
これでwindows側から修正できた。
postgresの絡みの部分も再起動する毎、読み込まない症状が出たので、
社内用のサーバなので、セキュリティはそこそこで良いためSElinuxはとりあえず止める。
社内用のサーバなので、セキュリティはそこそこで良いためSElinuxはとりあえず止める。
# nano /etc/selinux/config
SELINUX=disabled
SELinuxの件で2時間程嵌った・・・・。
CentOS7.1 HDDの追加
今回追加するHDDは2Tbi以下で、尚且つインターネットに曝されていないので、
XFSフォーマットで行う(centOS6で云うext4はXFSに変わったので)
HDDを取り付け、はじめにHDDが認識されているか確認
(LVMは手順が多いし、過去にVGの名称が同じなのに誤ってつないでしまい、データを壊した経験があるので喰わず嫌いなのである・・・。)
[ 3.602350] sda: sda1 sda2
[ 3.602758] sd 0:0:0:0: [sda] Attached SCSI disk
[ 3.619862] sdb: unknown partition table
[ 3.620061] sd 1:0:0:0: [sdb] Attached SCSI disk
[ 8.846799] XFS (sda1): Mounting V4 Filesystem
[ 10.971040] XFS (sda1): Ending clean mount
[ 10.971065] SELinux: initialized (dev sda1, type xfs), uses xattr
サイズ等を認識しているかを確認する。
# fdisk -l
Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xbe76e7c2.
The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.
コマンド (m でヘルプ):
コマンドの動作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Pを入れて、パーテーションを設定
コマンド (m でヘルプ): p
Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
Disk label type: dos
ディスク識別子: 0xc7f836c8
デバイス ブート 始点 終点 ブロック Id システム
コマンド (m でヘルプ): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
パーティション番号 (1-4, default 1): 1
最初 sector (2048-3907029167, 初期値 2048):エンター
初期値 2048 を使います
Last sector, +sectors or +size{K,M,G} (2048-3907029167, 初期値 3907029167):エンター
初期値 3907029167 を使います
Partition 1 of type Linux and of size 1.8 TiB is set
コマンド (m でヘルプ): p
Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
Disk label type: dos
ディスク識別子: 0xc7f836c8
デバイス ブート 始点 終点 ブロック Id システム
/dev/sdb1 2048 3907029167 1953513560 83 Linux
コマンド (m でヘルプ): w
パーティションテーブルは変更されました!
ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。
XFSタイプのファイルシステムを作成する。
# mkfs -t xfs /dev/sdb1
meta-data=/dev/sdb1 isize=256 agcount=4, agsize=122094598 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=488378390, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=238466, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
続いて追加したHDDをstorage2としてマウントさせる
# mkdir /home/storage2
# mount /dev/sdb1 /home/storage2
# chown ユーザ名 /home/storage2/
dfで確認
# df
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/centos-root 52403200 4574420 47828780 9% /
devtmpfs 2920376 0 2920376 0% /dev
tmpfs 2930520 80 2930440 1% /dev/shm
tmpfs 2930520 8964 2921556 1% /run
tmpfs 2930520 0 2930520 0% /sys/fs/cgroup
/dev/mapper/centos-home 1893548692 85400 1893463292 1% /home
/dev/sda1 505580 127680 377900 26% /boot
/dev/sdb1 1952559696 32976 1952526720 1% /home/storage2
常時、マウントするようにfstabを編集する。赤を追記(UUIDは置き換えること)
# blkid /dev/sdb1
/dev/sdb1: UUID="320f300e-XXXX-XXXX-XXXX-XXXXXXXXXXXX" TYPE="xfs"
# nano /etc/fstab
末尾に追加
#追加HDD
UUID=320f300e-XXXX-XXXX-XXXX-XXXXXXXXXXXX /home/storage2 xfs defaults 0 0
再起動してみて自動的にマウントされていればOK。
CentOS7.1 PHP インストールとhttpdやFirewallの設定
# yum install php php-mbstring php-pdo php-pgsql
5.4.16なので、そのままyumでインストールする。
一気にyum install php* をやったら依存関係で怒られた。
インストール後の設定
# nano /etc/php.ini
short_open_tag = off を on へ
;extension=msql.so の;を外して有効にする。
下に
extension=pgsql.so
extension=mbstring.so
を追加
httpd.confにもphpの内容を追加する。
の項目内に
AddType application/x-httpd-php .php
を追記。
httpdを再起動
# systemctl start httpd.service
続いて
# firewall-cmd --add-service=postgresql --permanent
# firewall-cmd --reload
クライアントからアクセスして、PHPが予定通り動けばOK。
5.4.16なので、そのままyumでインストールする。
一気にyum install php* をやったら依存関係で怒られた。
インストール後の設定
# nano /etc/php.ini
short_open_tag = off を on へ
;extension=msql.so の;を外して有効にする。
下に
extension=pgsql.so
extension=mbstring.so
を追加
httpd.confにもphpの内容を追加する。
AddType application/x-httpd-php .php
を追記。
httpdを再起動
# systemctl start httpd.service
続いて
# firewall-cmd --add-service=postgresql --permanent
# firewall-cmd --reload
クライアントからアクセスして、PHPが予定通り動けばOK。
CentOS7.1 postgresql インストールから設定
パッケージは9.2.13がbaseでrpmに含まれている。
最新版は9.4.4の様なので、まぁ9.2でいいかということで、
# yum install postgresql*
インストール後そのまま起動しようとしても、起動できなかった。
systemctl start の中にpostgresql.serviceが無く、コマンド叩いても
Job for postgresql.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.
詳細を確認されたい。と出ます。
# systemctl status postgresql.service
postgresql.service - PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled)
Active: failed (Result: exit-code) since 金 2015-08-21 13:55:21 JST; 2min 57s ago
Process: 4824 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA} (code=exited, status=1/FAILURE)
# Location of database directory
Environment=PGDATA=/var/lib/pgsql/data ということで、/var/libpgsql/ に/data を作る。
pg_hba.confでネットワーク内からのアクセスを許容する。
最新版は9.4.4の様なので、まぁ9.2でいいかということで、
# yum install postgresql*
インストール後そのまま起動しようとしても、起動できなかった。
systemctl start の中にpostgresql.serviceが無く、コマンド叩いても
Job for postgresql.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.
詳細を確認されたい。と出ます。
# systemctl status postgresql.service
postgresql.service - PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled)
Active: failed (Result: exit-code) since 金 2015-08-21 13:55:21 JST; 2min 57s ago
Process: 4824 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA} (code=exited, status=1/FAILURE)
${PGDATA} がおかしいということなので、
指定先を調べてみる。
# nano /usr/lib/systemd/system/postgresql.service# Location of database directory
Environment=PGDATA=/var/lib/pgsql/data ということで、/var/libpgsql/ に/data を作る。
# mkdir -p /var/lib/pgsql/data
# chown postgres:postgres /var/lib/pgsql/data/
postgresさんになってDBをフォーマットする。
# su - postgres
initdbコマンドでデータ格納場所を初期化する。
-bash-4.2$ initdb -D /var/lib/pgsql/data/
データベースシステム内のファイルの所有者は"postgres"ユーザでした。
このユーザがサーバプロセスを所有しなければなりません。
データベースクラスタはロケール"ja_JP.UTF-8"で初期化されます。
したがってデフォルトのデータベース符号化方式はUTF8に設定されました。
initdb: ロケール"ja_JP.UTF-8"用の適切なテキスト検索設定が見つかりません
デフォルトのテキスト検索設定はsimpleに設定されました。
ディレクトリ/var/lib/pgsql/dataの権限を設定しています ... ok
サブディレクトリを作成しています ... ok
デフォルトのmax_connectionsを選択しています ... 100
デフォルトの shared_buffers を選択しています ... 32MB
設定ファイルを作成しています ... ok
/var/lib/pgsql/data/base/1にtemplate1データベースを作成しています ... ok
pg_authidを初期化しています ... ok
依存関係を初期化しています ... ok
システムビューを作成しています ... ok
システムオブジェクトの定義をロードしています ... ok
照合順序を作成しています ... ok
変換を作成しています ... ok
ディレクトリを作成しています ... ok
組み込みオブジェクトに権限を設定しています ... ok
情報スキーマを作成しています ... ok
PL/pgSQL サーバサイド言語をロードしています ... ok
template1データベースをバキュームしています ... ok
template1からtemplate0へコピーしています ... ok
template1からpostgresへコピーしています ... ok
警告: ローカル接続向けに"trust"認証が有効です。
pg_hba.confを編集する、もしくは、次回initdbを実行する時に-Aオプショ
ン、または、--auth-localおよび--auth-hostを使用することで変更するこ
とができます。
成功しました。以下を使用してデータベースサーバを起動することができます。
postmaster -D /var/lib/pgsql/data
または
pg_ctl -D /var/lib/pgsql/data -l logfile start
-bash-4.2$ exit
systemctl start の中にpostgresql.serviceが増えているので、
# systemctl start postgresql.service で起動
# systemctl status postgresql.service
postgresql.service - PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled)
Active: active (running) since 金 2015-08-21 14:22:24 JST; 2s ago
Process: 5510 ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o -p ${PGPORT} -w -t 300 (code=exited, status=0/SUCCESS)
Process: 5503 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 5513 (postgres)
CGroup: /system.slice/postgresql.service
tq5513 /usr/bin/postgres -D /var/lib/pgsql/data -p 5432
tq5514 postgres: logger process
tq5516 postgres: checkpointer process
tq5517 postgres: writer process
tq5518 postgres: wal writer process
tq5519 postgres: autovacuum launcher process
mq5520 postgres: stats collector process
大丈夫っぽい。
ユーザabcを作成。
#su - postgres
-bash-4.2$ createuser -P -s -E abc
新しいロールのためのパスワード:
もう一度入力してください:
ユーザが増えているか確認。
-bash-4.2$ psql
psql (9.2.13)
"help" でヘルプを表示します.
postgres=# select * from pg_shadow
2名になっているのでOK
\qでexit
# nano /var/lib/pgsql/data/pg_hba.conf
末尾の
# IPv4 local connections:
host all all 192.168.0.0/16 md5
こんな感じで、拠点間の接続にも対応できるように設定しておく。
CentOS7.1 httpdの設定 chkconfigはレガシー iptablesもレガシー
# yum list | grep httpd*
httpd.x86_64 2.4.6-31.el7.centos base
現在2.4が最新のようなので、このままyumでインストールしてしまう。
インストール後、自動起動の設定をしようと、
# chkconfig --add httpdを行うと、systemd serviceに移行したからそっち使え
と応答されるので、ちょっと調べた。
#systemctl list-unit-files
これで一覧が生じされるので、確認はここで行えばよさそう。
chkconfigでもパスしてくれるので、一緒だけど、正しくは
#systemctl is-enabled サービス名.service
httpdの場合は、# systemctl enable httpd.service
このように表記する模様。
更に、iptablesもレガシーな扱いになっているようだ・・・。
firewalld に移行したそうなので、そっちで設定してみる。
#systemctl list-unit-files に
firewalld.service enabled となっているので、
新規インストールは不要。
firewall-cmdがコマンドらしいのでリストを出してみる。
#firewall-cmd --list-all
public (default, active)
interfaces: enp2s0
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
ゾーンの定義があるようだが、外部からのアクセスを許容したいので、
ゾーン設定は特に行わない。 --permanent を付けると再起動後も有効と
なるが、即時有効ではない模様。 --reloadしておく。
# firewall-cmd --add-service=http --permanent
success
# firewall-cmd --reload
success
ポートは開けたので、今度はhttpdの設定を行う。(PHPインストール後には再度弄る)
#nano /etc/httpd/conf/httpd.conf
DirectoryIndex index.html index.php index.htm index.shtml
保存して上書き
httpdを走らせる。
# systemctl start httpd
# systemctl enable httpd
外部クライアントからブラウジングできればOK。
httpd.x86_64 2.4.6-31.el7.centos base
現在2.4が最新のようなので、このままyumでインストールしてしまう。
インストール後、自動起動の設定をしようと、
# chkconfig --add httpdを行うと、systemd serviceに移行したからそっち使え
と応答されるので、ちょっと調べた。
#systemctl list-unit-files
これで一覧が生じされるので、確認はここで行えばよさそう。
chkconfigでもパスしてくれるので、一緒だけど、正しくは
#systemctl is-enabled サービス名.service
httpdの場合は、# systemctl enable httpd.service
このように表記する模様。
更に、iptablesもレガシーな扱いになっているようだ・・・。
firewalld に移行したそうなので、そっちで設定してみる。
#systemctl list-unit-files に
firewalld.service enabled となっているので、
新規インストールは不要。
firewall-cmdがコマンドらしいのでリストを出してみる。
#firewall-cmd --list-all
public (default, active)
interfaces: enp2s0
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
ゾーンの定義があるようだが、外部からのアクセスを許容したいので、
ゾーン設定は特に行わない。 --permanent を付けると再起動後も有効と
なるが、即時有効ではない模様。 --reloadしておく。
# firewall-cmd --add-service=http --permanent
success
# firewall-cmd --reload
success
ポートは開けたので、今度はhttpdの設定を行う。(PHPインストール後には再度弄る)
#nano /etc/httpd/conf/httpd.conf
DirectoryIndex index.html index.php index.htm index.shtml
保存して上書き
httpdを走らせる。
# systemctl start httpd
# systemctl enable httpd
外部クライアントからブラウジングできればOK。
2015/08/20
CentOS7.1 インストール作業~ネットワーク接続まで
インストールの前作業
http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso
http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso
この辺からISOイメージをダウンロードして、DVDを作成する。
今回購入したPRIMEGY TX1310M1 は ハードウェアRAIDを実装しており、
インストール時にRAIDのパッケージを追加する必要があった。
CenOS7 install にカーソルを併せてTABを押し、
inst.dd を追加してからインストールを行う。
対話式のモードになるので、fujitsuのホームページから
URL: http://support.ts.fujitsu.com/Download/Index.asp
「Product selection(manually search)」より「Fujitsu Server PRIMERGY」→「PRIMERGY TXxxx」
→「PRIMERGY TX1310 M1」 →「Red Hat Enterprise Linux」→「Red Hat Enterprise Linux 7(x86_64)」→「SATA RAID」→「RHDUP driver package megasr 16.01.2014.0318-1 for RHEL 7 GA」を用意しておく。
加えて、RAIDコントローラは有効にしないと起動時に制御が掛かるらしく、
OSインストール中の最後の再起動で躓いたので
BIOSでSATA Configurationの設定があるので、そこをIDE MODEにした。
必要を感じたらRAIDを組む事にする。
インストール後の設定
先ずは他のクライアントからターミナルで操作したいので、
ネットワークの設定をする。
$ ip address show
でNICの情報を取る。
このサーバはNICを2つ持っている(19800で購入の割にすごいな)
他のクライアントからTeraTerm等で接続してみる。
http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso
http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso
この辺からISOイメージをダウンロードして、DVDを作成する。
今回購入したPRIMEGY TX1310M1 は ハードウェアRAIDを実装しており、
インストール時にRAIDのパッケージを追加する必要があった。
CenOS7 install にカーソルを併せてTABを押し、
inst.dd を追加してからインストールを行う。
対話式のモードになるので、fujitsuのホームページから
URL: http://support.ts.fujitsu.com/Download/Index.asp
「Product selection(manually search)」より「Fujitsu Server PRIMERGY」→「PRIMERGY TXxxx」
→「PRIMERGY TX1310 M1」 →「Red Hat Enterprise Linux」→「Red Hat Enterprise Linux 7(x86_64)」→「SATA RAID」→「RHDUP driver package megasr 16.01.2014.0318-1 for RHEL 7 GA」を用意しておく。
加えて、RAIDコントローラは有効にしないと起動時に制御が掛かるらしく、
OSインストール中の最後の再起動で躓いたので
BIOSでSATA Configurationの設定があるので、そこをIDE MODEにした。
必要を感じたらRAIDを組む事にする。
インストール後の設定
先ずは他のクライアントからターミナルで操作したいので、
ネットワークの設定をする。
$ ip address show
でNICの情報を取る。
このサーバはNICを2つ持っている(19800で購入の割にすごいな)
1: lo:mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp2s0: mtu 1500 qdisc mq state UP qlen 1000 link/ether 90:1b:0e:XX:XX:ee brd ff:ff:ff:ff:ff:ff valid_lft forever preferred_lft forever 3: enp0s25: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 90:1b:0e:XX:XX:dc brd ff:ff:ff:ff:ff:ff
$ nmcli device
show enp2s0 で詳細を取る
GENERAL.デバイス: enp2s0 GENERAL.タイプ: ethernet GENERAL.ハードウェアアドレス: 90:1B:0E:60:54:EE GENERAL.MTU: 1500 GENERAL.状態: 1000 (接続済み) GENERAL.接続: enp2s0 GENERAL.CON パス: /org/freedesktop/NetworkManager/ActiveConnection/3 WIRED-PROPERTIES.キャリア: オン IP4.アドレス[1]: ip = 127.0.0.1/8, gw = 0.0.0.0 IP6.アドレス[1]: ip = ::1/128, gw = ::
こんな感じ
$ nmcli con show enp2s0 を見る。
↓サーバ起動時に自動で接続させる
connection.autoconnect: no
↓DHCPを固定にしたいので、ここはマニュアルにして、IPアドレスを指定。
ipv4.method: auto
これについては、 昔のようなバグはもう無い様なのでGUIで弄ったほうが楽。
# nmcli con mod enp2s0 connection.autoconnect "yes" # nmcli con mod enp2s0 ipv4.addresses "192.168.0.XXX/24" # nmcli con mod enp2s0 ipv4.method "manual"
# nmcli device disconnect enp2s0 # nmcli device connect enp2s0
他のクライアントからTeraTerm等で接続してみる。
2015/08/12
rsyncのエラー 12番
rsync: writefd_unbuffered failed to write 4092 bytes to socket [sender]
今更ながら、rsyncのエラーが起こったので、再度見直し、いろいろと調べてみた所
サイズの大きい圧縮ファイルの所で躓く様なので、そのあたりを調べてみた。
原因の推測
恐らく、ファイルサイズの異なる同じ名前のファイルを参照し、転送を開始する際に、
コマンドの指定が無い時は、差分の転送を行うが、
zip等の場合、内部構成まで見て差分処理を行おうとするようで、
エラーを返してくる模様。
解決方法
・ --whole-file をつけて、差分の送信をやめる。
・ zipやtarで保存する際は、別のファイルとなるように常にdateを付与する処理をする。
・ zip等のファイルは同期しないようにする。
そこで、一番楽そうな --whole-file をコマンドに追加することにした。
スクリプトシェル
#!/bin/sh
# バックアップ先ディレクトリ指定
BackupDIR=/home/*****/dailyBackup
mkdir -p $BackupDIR
# バックアップログ定義
BackupLog=/home/*****/log/rsync_backup.log rm -f $BackupLog
touch $BackupLog
chmod 600 $BackupLog
#エラーチェック
error_exit () {
exit 1
}
#バックアップ実行
echo "`date` backup start" >> $BackupLog
LastBackup=`ls -t $BackupDIR | grep backup | head -1`
NewBackup=`date +%Y%m%d`backup
mkdir $BackupDIR/$NewBackup
rsync -rlptv --whole-file --link-dest=../$LastBackup /home/比較元のディレクトリ/ $BackupDIR/$NewBackup >> $BackupLog 2>&1
code=$?
if [ $code -ne 0 ]; then
cat $BackupLog | mail -s "BACKUP NG CODE IS $code" root
rm -rf $BackupDIR/$NewBackup
error_exit
fi
echo "`date` backup end" >> $BackupLog
今更ながら、rsyncのエラーが起こったので、再度見直し、いろいろと調べてみた所
サイズの大きい圧縮ファイルの所で躓く様なので、そのあたりを調べてみた。
原因の推測
恐らく、ファイルサイズの異なる同じ名前のファイルを参照し、転送を開始する際に、
コマンドの指定が無い時は、差分の転送を行うが、
zip等の場合、内部構成まで見て差分処理を行おうとするようで、
エラーを返してくる模様。
解決方法
・ --whole-file をつけて、差分の送信をやめる。
・ zipやtarで保存する際は、別のファイルとなるように常にdateを付与する処理をする。
・ zip等のファイルは同期しないようにする。
そこで、一番楽そうな --whole-file をコマンドに追加することにした。
スクリプトシェル
#!/bin/sh
# バックアップ先ディレクトリ指定
BackupDIR=/home/*****/dailyBackup
mkdir -p $BackupDIR
# バックアップログ定義
BackupLog=/home/*****/log/rsync_backup.log rm -f $BackupLog
touch $BackupLog
chmod 600 $BackupLog
#エラーチェック
error_exit () {
exit 1
}
#バックアップ実行
echo "`date` backup start" >> $BackupLog
LastBackup=`ls -t $BackupDIR | grep backup | head -1`
NewBackup=`date +%Y%m%d`backup
mkdir $BackupDIR/$NewBackup
rsync -rlptv --whole-file --link-dest=../$LastBackup /home/比較元のディレクトリ/ $BackupDIR/$NewBackup >> $BackupLog 2>&1
code=$?
if [ $code -ne 0 ]; then
cat $BackupLog | mail -s "BACKUP NG CODE IS $code" root
rm -rf $BackupDIR/$NewBackup
error_exit
fi
echo "`date` backup end" >> $BackupLog
2015/07/09
CentOSからPHPを使って MicrosoftSqlServerに接続
CentOSからPHPを使ってMicrosoftSqlSeverに直接アクセスは出来ないらしく、
FreeTDSを使って橋渡しをするらしい。
イメージとしては、
PHP ⇔ FreeTDS ⇔ MsSqlServer
こんな感じの流れのようです。
とりあえず、FreeTDSでSqlServerにつかがるかを実験してみる。
先に unixODBCをインストールしている理由は、
FreeTDSはSybaseやSQL Serverと通信をするためのプロトコルであって(インターフェイス)、
DBへのアクセスをする場合にはODBCドライバを経由して行わなければならない。
らしい。
http://www.amy.hi-ho.ne.jp/jbaba/unix/tdsodbc.htm
↑ここに技術解説があった。みなさんここを見ているらしいです。
# yum install unixODBC-devel
ODBCドライバをインストール。
# yum install freetds-devel
FreeTDSをインストール。
freetdsにSqlServerの設定をする。
# nano /etc/freetds.conf
末尾に
[sqlserver]
host = DBサーバアドレス
port = 1433
tds version = 8.0
charset = sjis
client charset = utf-8
language = japanese
を加える。
charset は デフォルトはCP932だが、今回のベンダの設定では
SeqServerに定義したエンコードはsjisだったようだ。
エンコード関係でやはり30分ほど嵌った。
# tsql -S sqlserver -U ユーザ名 -P パスワード名
locale is "ja_JP.UTF-8"
locale charset is "UTF-8"
1>
となれば接続成功。
1>select * from テーブル名
2>go
このように使う。
ここまでが事前準備。
接続実験
次は、二つのDBを跨いだときの取り扱いを残す予定。
FreeTDSを使って橋渡しをするらしい。
イメージとしては、
PHP ⇔ FreeTDS ⇔ MsSqlServer
こんな感じの流れのようです。
とりあえず、FreeTDSでSqlServerにつかがるかを実験してみる。
先に unixODBCをインストールしている理由は、
FreeTDSはSybaseやSQL Serverと通信をするためのプロトコルであって(インターフェイス)、
DBへのアクセスをする場合にはODBCドライバを経由して行わなければならない。
らしい。
http://www.amy.hi-ho.ne.jp/jbaba/unix/tdsodbc.htm
↑ここに技術解説があった。みなさんここを見ているらしいです。
# yum install unixODBC-devel
ODBCドライバをインストール。
# yum install freetds-devel
FreeTDSをインストール。
freetdsにSqlServerの設定をする。
# nano /etc/freetds.conf
末尾に
[sqlserver]
host = DBサーバアドレス
port = 1433
tds version = 8.0
charset = sjis
client charset = utf-8
language = japanese
を加える。
charset は デフォルトはCP932だが、今回のベンダの設定では
SeqServerに定義したエンコードはsjisだったようだ。
エンコード関係でやはり30分ほど嵌った。
# tsql -S sqlserver -U ユーザ名 -P パスワード名
locale is "ja_JP.UTF-8"
locale charset is "UTF-8"
1>
となれば接続成功。
1>select * from テーブル名
2>go
このように使う。
ここまでが事前準備。
接続実験
$server=’DBサーバアドレス’;
$username='ユーザ名';
$password='パスワード';
$con=mssql_connect($server,$username,$password);
if($con !=FALSE)
{
echo "Connection to SqlServer successful
";
}
else
{
die("Connection to SqlServer failed");
}
mssql_close($con);
?>
次は、二つのDBを跨いだときの取り扱いを残す予定。
2015/06/09
WindowsServer2012で外部サーバとssh同期とSQLサーバのコマンド処理(CSV書出し)
目的
WEBサイト内の一部のコンテンツを非同期処理を行いたいが、
今回、ベンダが用意したOSがWindowsServer2012であったので、
sshや、コマンド処理等、WindowsServer2012単体で解決出来ない点を
忘れないようにオボエガキしておく。
仕掛け
SQLServer2014の動いているWindowsServer2012マシンで「タスク処理」させる
⇒batファイルをつくる
SQLServerをコマンドラインで動かし、必要なカラムを抽出させるクエリをcsvで吐出し
⇒bcpコマンドを使う
吐き出したcsvをutf-8に変換する。
⇒色々試したが、結果nkfを使うことにした。
レンタルサーバの所定フォルダとwindowsServer2012の所定フォルダの同期をとる
⇒ssh接続の方法を単独で持たないようなので、winSCPを利用する。
同期をとったcsvをjQueryを使って整形し、表示させる。
csv書出し用バッチ処理
@echo off
bcp "select ~" queryout "C:\出力先フォルダ\list.csv" -c -t, -S <192.168.0.xxx> -U <ユーザ名> -P <パスワード>
exit
解説:-c 文字データ型を使用して操作を実行 -t, のカンマ区切りを付与
-S サーバ名
-U ユーザ名
-P パスワード
※当初、utf-8で出力できないかいろいろ試したが、SQLServerは動作保障外というだけあって、
-C 65001 を付けると書き出さなかった・・・。
エンコード用バッチ処理
@echo off
cd C:\作業フォルダ
type top.csv list.csv > before.csv
nkf32.exe -w80 before.csv > listUTF8.csv
解説:bcpコマンドは表題行を書き出してくれないので、
予め、表題行のcsvを作っておき、typeコマンドでくっつけている。
今回は、top.csvにlist.csvをくっつけて、
nkf32.exe -w80 でutf-8に変換している。
レンタルサーバへの同期用バッチ処理
@echo off
cd "C:\Program Files (x86)\WinSCP"
WinSCP.exe /console /script="sync"
exit
解説:WinSCP.exe /console /script="スクリプト処理ファイル"
この一行で、コマンドで動かせる。
ITmediaさんに解説ページがあった。
(コマンドリファレンスへのリンクもあり非常に助かった。)
スクリプト処理ファイルの中身
option batch on
open ユーザ名@サーバ名
cd /var/www/html/サーバ側の所定のフォルダ
lcd C:\ローカル側の所定のフォルダ
synchronize remote
exit
解説:synchronize remote リモート側(サーバ側)を同期させる と書くようだ。
サーバ側のデータを同期させたいのであれば、synchronize local となる。
両方ならばそのままの、both。
事前に接続をさせておき、その際、ini等にパスワードは覚えさせておく必要あり。
非同期処理のhtml
<html>
<header>
<script src=\"jquery-1.11.3.min.js\"></script>
<script src=\"jquery.csv2table-0.02-b-2.8.js\" type=\"text/javascript\" charset=\"utf-8\"></script>
</header>
<body>
<div id=\"view\"></div>
<script>
$(function(){
$(\'#view\').csv2table(\'./listUTF8.csv\');
});
</script>
<script>location.reload()</script>
</body>
</html>
最小の構成はこんな感じ解説:jquery-1.11.3.min.js
jquery.csv2table-0.02-b-2.8.js はそれぞれ先駆者のものを利用させて頂いた。
jquery.csv2table-0.02-b-2.8.js はutf-8でないと文字化けする。
mimeをかぶせてshift-jisという方法もあるが、
一発で上手くいかなかったことととブラウザに左右されそうだったので、nkfでの処理を選択した。
WinSCP補足
ツール→環境設定→保存→レジストリからINIファイルに変更
ツール→設定のエクスポート
↓おまじない
◆WinSCPの起動をini起動にする
"C:\Program Files (x86)\WinSCP\WinSCP.exe" /ini=C:\syncXML\WinSCP.ini
winwcp.ini 設定
◆同期のコマンドの変数を2に変える
SynchronizeParams=2にする
◆winSCP.iniは出来れば、WinSCPの直下でない方がいいらしい。
同じような内容を開発ベンダに見積取ったら、
えらい金額が上がってきたので、作ってしまえというのが動機。
2015/04/15
VMWare Player WIN8.1上でWindows98を動かす
Windows8.1 64bit版を利用しているのだが、
どうしても、16bitのソフトを動かす必要ができた。
手持ちのXPは全て独自のインストール用のものだったので、
已むを得ずWindows98をインストールした際のオボエガキ。
VMWare Playerをダウンロード
https://my.vmware.com/jp/web/vmware/free#desktop_end_user_computing/vmware_player/7_0
手持ちのwindows98のISOを作成する。
どうしても、16bitのソフトを動かす必要ができた。
手持ちのXPは全て独自のインストール用のものだったので、
已むを得ずWindows98をインストールした際のオボエガキ。
VMWare Playerをダウンロード
https://my.vmware.com/jp/web/vmware/free#desktop_end_user_computing/vmware_player/7_0
手持ちのwindows98のISOを作成する。
imgburnを使った。
windows98の起動ディスクなんてもうないので、
http://www.allbootdisks.com/download/98.html
こちらからダウンロードした。
VMWare Playerの仮想マシンの設定で、
フロッピーを追加しimgファイルを自動起動するようにし、
MEMを512MBにして、起動。
仮想マシンを起動
→FDを読みこまれるので、1を選択してDOSを立ち上げる
→fdisk ENTER
→Yのまま ENTER
→1 ENTER
→Yのまま ENTER
→Escを押す
→restart ENTER で再起動
※再起動するので、formatをかける
→1 ENTER
→format C: ENTER
→Y ENTER
→フォーマットが終わったら Exit選択
→ボリュームラベルの入力(空欄のまま) ENTER
→D: ENTER
→setup ENTER
→Windows98インストールスタート
あらかたファイルのコピーが終わると再起動を要求してくるので、
その際に、フロッピーは自動起動しないようにする。
(もう一度DOS起動画面になってしまうため)
このまま使ってもよいが、ファイルのやり取りを画面上でできるようにするため、
VMwareToolsをインストールしておく。
管理の中にVMware Toolsのインストールがあるので、ダイアログに従えばOK。
問題なく使えた。
最後に
あ~、こんな感じで領域作ったな~、しょっちゅうFDISKやFORMATしたな~
と大変懐かしい気分になった。
windows98の起動ディスクなんてもうないので、
http://www.allbootdisks.com/download/98.html
こちらからダウンロードした。
VMWare Playerの仮想マシンの設定で、
フロッピーを追加しimgファイルを自動起動するようにし、
MEMを512MBにして、起動。
仮想マシンを起動
→FDを読みこまれるので、1を選択してDOSを立ち上げる
→fdisk ENTER
→Yのまま ENTER
→1 ENTER
→Yのまま ENTER
→Escを押す
→restart ENTER で再起動
※再起動するので、formatをかける
→1 ENTER
→format C: ENTER
→Y ENTER
→フォーマットが終わったら Exit選択
→ボリュームラベルの入力(空欄のまま) ENTER
→D: ENTER
→setup ENTER
→Windows98インストールスタート
あらかたファイルのコピーが終わると再起動を要求してくるので、
その際に、フロッピーは自動起動しないようにする。
(もう一度DOS起動画面になってしまうため)
このまま使ってもよいが、ファイルのやり取りを画面上でできるようにするため、
VMwareToolsをインストールしておく。
管理の中にVMware Toolsのインストールがあるので、ダイアログに従えばOK。
問題なく使えた。
最後に
あ~、こんな感じで領域作ったな~、しょっちゅうFDISKやFORMATしたな~
と大変懐かしい気分になった。
2015/01/12
NEC PC-BL100RA (CentOS6)をWOL利用する
手順
1 起動時 F2でBIOS起動し、(珍しい日本語のセットアップユーティリティだった)
詳細⇒リモート電源制御 を [使用する]に変更。
2 CentOSを立ち上げて、有線でネットワークの環境を構築する。
(NICへの電源供給の関係で、無線は無理っぽかった)
3 WOL対応のソフトをyumでインストール
# yum -y install ethtool
# nano /etc/sysconfig/network-scripts/ifcfg-System_eth0
末尾に
ETHTOOL_OPTS="wol g"
を追記する。
起動は各クライアントからマックアドレスに向けてマジックパケットを投げればOK
1 起動時 F2でBIOS起動し、(珍しい日本語のセットアップユーティリティだった)
詳細⇒リモート電源制御 を [使用する]に変更。
2 CentOSを立ち上げて、有線でネットワークの環境を構築する。
(NICへの電源供給の関係で、無線は無理っぽかった)
3 WOL対応のソフトをyumでインストール
# yum -y install ethtool
# nano /etc/sysconfig/network-scripts/ifcfg-System_eth0
末尾に
ETHTOOL_OPTS="wol g"
を追記する。
起動は各クライアントからマックアドレスに向けてマジックパケットを投げればOK
登録:
投稿 (Atom)