打ち合わせ希望日をカレンダーで選択してもらってフォームで予約を入れてもらう。 このような制御が必要になった。 当初<input type="date">で良いかな? と思ったが、ユーザがPC:スマホで7対3位で、まだまだPCが有利なので、 datepickerを使うことにした。 その際に、 ・土日は選択させない。 ・4営業日以降しか選択できない。 という条件を付けたい。 土日は選択させない事は先人の知恵で問題なく解決。 問題は、4営業日以降の縛り datepickerの変数だけでは処理できなかったので、 起算点を今日にして、今日の曜日を取得し、 datepikcerのオプション minDate で制御した。 以下ソース。 <HEAD> <META HTTP-EQUIV=Content-Type CONTENT=text/html;CHARSET=UTF-8> <TITLE>アポどり用フォーム</TITLE> <!-- jQuery--> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <!-- jQuery-UI --> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script> <!-- jQuery-UI-datepicker --> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/i18n/jquery.ui.datepicker-ja.min.js\"></script> <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/redmond/jquery-ui.css\" > <script> <!-- 今日の曜日を抽出--> var dateObj = new Date() ; var weekDayList = [0,1,2,3,4,5,6] ; var todayWeekDay = weekDayList[ dateObj.getDay() ] ; <!--datepicker 定義--> $(function(){ // Datepicker の呼び出し $( "#datepicker" ).datepicker({onClose: function(dateText, inst) { //プラン番号の取得 //日付オブジェクトの作成 var date = new Date(dateText); var weekDay = parseInt(date.getDay()); var check = false; if(weekDay > 0 && weekDay < 6){ check = true; } if(!check){ alert("この日は選択できません"); $( "#datepicker" ).val(''); } }}); //判別4(木曜)、5(金曜)は+6day それ以外は+4dayでOK if(todayWeekDay == 4 || todayWeekDay == 5){ $( "#datepicker" ).datepicker( "option", 'minDate', "+6d" ); $( "#datepicker" ).datepicker( "option", 'maxDate', "2m" ); } else{ $( "#datepicker" ).datepicker( "option", 'minDate', "+4d" ); $( "#datepicker" ).datepicker( "option", 'maxDate', "2m" ); } } ); </script> </HEAD> <BODY> <FORM ACTION="mail.php" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded" > <input type="text" name="date1" class="form_text-small\" id="datepicker" readonly="readonly"> </FORM> こんな感じで実装すればよい。 $( "#datepicker" ).datepicker( "option", 'minDate', "+4d" ); $( "#datepicker" ).datepicker( "option", 'maxDate', "2m" ); 肝はこの部分。
2016/06/27
javascipt datePicker 営業日の制御
2016/05/24
CentOS7 ssh2_connectを実装する
正規の方法でインストールを試みるが、
#pecl install ssh2
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/msql.so' - /usr/lib64/php/modules/msql.so: cannot open shared object file: No
such file or directory in Unknown on line 0
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
PHP Warning: Module 'pgsql' already loaded in Unknown on line 0
Failed to download pecl/ssh2 within preferred state "stable", latest release is version 0.12, stability "beta", use "channel://pecl.php.net/ssh2-0.12" to install install failed
エラー
ネイティブな解説ページが有ったので、
参考にしながら実装までのオボエガキ
先ずは、yumを最新にする。
# yum update
# yum install make gcc libssh2 php-deve
# pecl install -f ssh2
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/msql.so' - /usr/lib64/php/modules/msql.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
PHP Warning: Module 'pgsql' already loaded in Unknown on line 0
WARNING: failed to download pecl.php.net/ssh2 within preferred state "stable", will instead download version 0.12, stability "beta"
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading ssh2-0.12.tgz ...
Starting to download ssh2-0.12.tgz (26,223 bytes)
.........done: 26,223 bytes
6 source files, building
running: phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
libssh2 prefix? [autodetect] : ←ここはブランクのまま エンターした。
Build process completed successfully
Installing '/usr/lib64/php/modules/ssh2.so'
install ok: channel://pecl.php.net/ssh2-0.12
configuration option "php_ini" is not set to php.ini location
You should add "extension=ssh2.so" to php.ini
となるので、
# echo "extension=ssh2.so" > /etc/php.d/ssh2.ini
httpdを再起動させる。
# systemctl restart httpd.service
# php -m | grep ssh2
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/msql.so' - /usr/lib64/php/modules/msql.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
PHP Warning: Module 'pgsql' already loaded in Unknown on line 0
ssh2
phpinfo() で確認すると
となり、実装完了。
実装方法
<?php
$connection = ssh2_connect('アドレス', 22);
ssh2_auth_password($connection, 'ログインユーザ名', 'ログインパスワード');
ssh2_scp_send($connection, '../転送元ファイル', '転送先ディレクトリ/転送するファイル', 0644);
?>
#pecl install ssh2
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/msql.so' - /usr/lib64/php/modules/msql.so: cannot open shared object file: No
such file or directory in Unknown on line 0
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
PHP Warning: Module 'pgsql' already loaded in Unknown on line 0
Failed to download pecl/ssh2 within preferred state "stable", latest release is version 0.12, stability "beta", use "channel://pecl.php.net/ssh2-0.12" to install install failed
エラー
ネイティブな解説ページが有ったので、
参考にしながら実装までのオボエガキ
先ずは、yumを最新にする。
# yum update
# yum install make gcc libssh2 php-deve
# pecl install -f ssh2
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/msql.so' - /usr/lib64/php/modules/msql.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
PHP Warning: Module 'pgsql' already loaded in Unknown on line 0
WARNING: failed to download pecl.php.net/ssh2 within preferred state "stable", will instead download version 0.12, stability "beta"
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading ssh2-0.12.tgz ...
Starting to download ssh2-0.12.tgz (26,223 bytes)
.........done: 26,223 bytes
6 source files, building
running: phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
libssh2 prefix? [autodetect] : ←ここはブランクのまま エンターした。
Build process completed successfully
Installing '/usr/lib64/php/modules/ssh2.so'
install ok: channel://pecl.php.net/ssh2-0.12
configuration option "php_ini" is not set to php.ini location
You should add "extension=ssh2.so" to php.ini
となるので、
# echo "extension=ssh2.so" > /etc/php.d/ssh2.ini
httpdを再起動させる。
# systemctl restart httpd.service
# php -m | grep ssh2
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/msql.so' - /usr/lib64/php/modules/msql.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: Module 'mbstring' already loaded in Unknown on line 0
PHP Warning: Module 'pgsql' already loaded in Unknown on line 0
ssh2
phpinfo() で確認すると
ssh2
SSH2 support | enabled |
---|---|
extension version | 0.12 |
libssh2 version | 1.4.3 |
banner | SSH-2.0-libssh2_1.4.3 |
となり、実装完了。
実装方法
<?php
$connection = ssh2_connect('アドレス', 22);
ssh2_auth_password($connection, 'ログインユーザ名', 'ログインパスワード');
ssh2_scp_send($connection, '../転送元ファイル', '転送先ディレクトリ/転送するファイル', 0644);
?>
2016/05/23
phpexcelとlibreofficeのcuiを使ってPDFを作成する
かなりphpexcelの恩恵を受けているが、やはりpdfに加工したい事がある。
guiでせっせと作るのも良いのだが、
ボタン一つで作成させたい。
そこで、エクセルをpdfに変換するものをいろいろ探したところ、
libreofficeのCUIを使うのが一番崩れないようだ。
早速だが、CUIの環境を構築
#yum install libreoffice libreoffice-langpack-ja
早速コマンドを投げてみる。
libreoffice --nologo --nofirststartwizard --convert-to pdf /var/www/html/pdf/000001.xlsx
エラーが返ってきた。
/usr/lib64/libreoffice/program/soffice.bin X11 error: Can't open display:
Set DISPLAY environment variable, use -display option
or check permissions of your X-Server
(See "man X" resp. "man xhost" for details)
https://help.libreoffice.org/Common/Starting_the_Software_With_Parameters/ja
調べてみると、
オプションで --headless を付けないと、ユーザーインタフェースが動いてしまい、NGらしい。
そこで、追加でオプションを実装。
#yum install libreoffice-headless
libreoffice --headless --nologo --nofirststartwizard --convert-to pdf /var/www/html/excel/pdf/00001.xlsx
convert /var/www/html/excel/pdf/00001.xlsx -> /home/<>/00001.pdf using calc_pdf_Export
変換できた。
線種や文字化けはなさそう。
サイズが大きいと、ページを跨いでしまうようなので、余白の設定等で、そこをなんとかできれば、
十分使えそう。
guiでせっせと作るのも良いのだが、
ボタン一つで作成させたい。
そこで、エクセルをpdfに変換するものをいろいろ探したところ、
libreofficeのCUIを使うのが一番崩れないようだ。
早速だが、CUIの環境を構築
#yum install libreoffice libreoffice-langpack-ja
早速コマンドを投げてみる。
libreoffice --nologo --nofirststartwizard --convert-to pdf /var/www/html/pdf/000001.xlsx
エラーが返ってきた。
/usr/lib64/libreoffice/program/soffice.bin X11 error: Can't open display:
Set DISPLAY environment variable, use -display option
or check permissions of your X-Server
(See "man X" resp. "man xhost" for details)
https://help.libreoffice.org/Common/Starting_the_Software_With_Parameters/ja
調べてみると、
オプションで --headless を付けないと、ユーザーインタフェースが動いてしまい、NGらしい。
そこで、追加でオプションを実装。
#yum install libreoffice-headless
libreoffice --headless --nologo --nofirststartwizard --convert-to pdf /var/www/html/excel/pdf/00001.xlsx
convert /var/www/html/excel/pdf/00001.xlsx -> /home/<
変換できた。
線種や文字化けはなさそう。
サイズが大きいと、ページを跨いでしまうようなので、余白の設定等で、そこをなんとかできれば、
十分使えそう。
2016/02/04
SSD 換装時のMBR問題 Windows7
HDDドライブが怪しくなってきたので、SSDに換装をしたが、
HDDが1TBに対し、SSDが240GBであったため、
ディスク丸ごとクローンが使えなかった。
元のパーティションを
EaseUE Partition Master で200GB位にまで小さくしてから
EaseUE Todo BackUp Free でパーティションクローンを作った。
EaseUEさんへのリンク
http://jp.easeus.com/partition-manager-software/free.html
EaseUS Todo Backup Freeの日本語公式ページ
http://jp.easeus.com/backup-software/free.html
システムクローンだと、換装後が面倒な予感がしたため、
非推奨のようだが、パーティションのクローンを作った。
free版なので、コピー先のパーティションをActiveに出来なかった。
恐らく駄目であろうと思いつつ、
SSDに付け替えて、BIOSを変更し、起動を掛けると、
bootLoaderが無いので起動できないとエラーが起きる。
しょうがないので、元のHDDに戻し、Windows修復ディスクを作成。
コントロール パネル→システムとセキュリティ→バックアップと復元
→システム修復ディスクの作成 で起動ディスクを作成する。
BIOSで DVD→SSDにして、ディスクから起動。
先ずは、スタートアップ修復を試すが、駄目。
続いて、コマンドプロンプトから
>bootsect /nt60 sys /mbr [ent]
でwindwos7用のブートストラップローダを書き込こもうとするが、
パーティションがアクティブでないので、書けないとエラーが返ってきた。
diskをactiveにしたいので、diskpaetコマンドを使う。
>DISKPART [ent]
・ディスクのリスト表示
DISKPART> list disk
ディスク 状態 サイズ 空き ダイナ GPT
### ミック
------------ ------------- ------- ------- --- ---
ディスク 0 オンライン 200 GB 1024 KB
・ディスクを選択する。
DISKPART> select disk 0 [ent]
ディスク 0 が選択されました。
・パーティションのリスト表示
DISKPART> list partition [ent]
Partition ### Type Size Offset
------------- ------------------ ------- -------
Partition 1 プライマリ 200GB 31 KB
・パーティションを選択
DISKPART> select partition 1 [ent]
パーティション 1 が選択されました。
・activeにする
DISKPART> active [ent]
DiskPart は現在のパーティションをアクティブとしてマークしました。
DISKPART> exit [ent]
>bootsect /nt60 sys /mbr [ent]
ブートストラップローダを書き込んでくれるので、一旦再起動する。
>exit [ent]
これで再行動掛ける。
SSDからブートすると
BOOTMGR is missing というエラーが吐き出される。
BOOTMGR is missingが出るので、PBR(パーティションの先頭セクタ)は
生き返った。
恐らく、アクティブパーティションの設定がオカシイ。論理フォーマットが駄目なようだ。
再度システム修復ディスクから立ち上げて、
スタートアップ修復で起動可能になった。
>bootrec /fixboot
>bootrec /fixmbr
コマンドだと駄目だった。
HDDが1TBに対し、SSDが240GBであったため、
ディスク丸ごとクローンが使えなかった。
元のパーティションを
EaseUE Partition Master で200GB位にまで小さくしてから
EaseUE Todo BackUp Free でパーティションクローンを作った。
EaseUEさんへのリンク
http://jp.easeus.com/partition-manager-software/free.html
EaseUS Todo Backup Freeの日本語公式ページ
http://jp.easeus.com/backup-software/free.html
システムクローンだと、換装後が面倒な予感がしたため、
非推奨のようだが、パーティションのクローンを作った。
free版なので、コピー先のパーティションをActiveに出来なかった。
恐らく駄目であろうと思いつつ、
SSDに付け替えて、BIOSを変更し、起動を掛けると、
bootLoaderが無いので起動できないとエラーが起きる。
しょうがないので、元のHDDに戻し、Windows修復ディスクを作成。
コントロール パネル→システムとセキュリティ→バックアップと復元
→システム修復ディスクの作成 で起動ディスクを作成する。
BIOSで DVD→SSDにして、ディスクから起動。
先ずは、スタートアップ修復を試すが、駄目。
続いて、コマンドプロンプトから
>bootsect /nt60 sys /mbr [ent]
でwindwos7用のブートストラップローダを書き込こもうとするが、
パーティションがアクティブでないので、書けないとエラーが返ってきた。
diskをactiveにしたいので、diskpaetコマンドを使う。
>DISKPART [ent]
・ディスクのリスト表示
DISKPART> list disk
ディスク 状態 サイズ 空き ダイナ GPT
### ミック
------------ ------------- ------- ------- --- ---
ディスク 0 オンライン 200 GB 1024 KB
・ディスクを選択する。
DISKPART> select disk 0 [ent]
ディスク 0 が選択されました。
・パーティションのリスト表示
DISKPART> list partition [ent]
Partition ### Type Size Offset
------------- ------------------ ------- -------
Partition 1 プライマリ 200GB 31 KB
・パーティションを選択
DISKPART> select partition 1 [ent]
パーティション 1 が選択されました。
・activeにする
DISKPART> active [ent]
DiskPart は現在のパーティションをアクティブとしてマークしました。
DISKPART> exit [ent]
>bootsect /nt60 sys /mbr [ent]
ブートストラップローダを書き込んでくれるので、一旦再起動する。
>exit [ent]
これで再行動掛ける。
SSDからブートすると
BOOTMGR is missing というエラーが吐き出される。
BOOTMGR is missingが出るので、PBR(パーティションの先頭セクタ)は
生き返った。
恐らく、アクティブパーティションの設定がオカシイ。論理フォーマットが駄目なようだ。
再度システム修復ディスクから立ち上げて、
スタートアップ修復で起動可能になった。
>bootrec /fixboot
>bootrec /fixmbr
コマンドだと駄目だった。
2016/01/05
pdfに日付のフッターを付ける。(Pdftkを使ってなるべく軽くやる。)
以前、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分おき程度に作成させておけば、良い。
オプションを調べるのに凄く時間を消費したので、メモしておく。
同じ原理で、タイムスタンプを押したいという話になった。
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分おき程度に作成させておけば、良い。
オプションを調べるのに凄く時間を消費したので、メモしておく。
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
登録:
投稿 (Atom)