日々業務で接しているLinux,PostgreSQL,SQLServer,FortiGateなどに関することの覚え書きや個人的に気になったことなどを綴っています。
もし、ここの情報があなたのお役に立てるならば幸いです。
2008年8月28日木曜日
CentOS /bootのディスク容量が・・・
/etc/cron.daily/yum.cronにて以下のようなエラーが吐き出される。
※LogWatch通知から抜粋
Error: Transaction Check Error:
installing package kernel-smp-×.×.×-×.×.×.EL needs ×MB on the /boot filesystem
・
・
・
カーネルが随時更新され古いカーネルが削除されず残ります。
起動に問題があったときなど古いカーネルでの起動をすることもできて非常に便利ですが当然ディスク容量に限界が出てきます。(/bootエリア)
そこで「yum-utils」を使い古いカーネルを削除してディスクに空きを確保します。
インストールされているかチェック
# rpm -qa | grep yum-utils
インストールされていなければ下記のようにyumでインストールします
# yum install yum-utils
Setting up Install Process
Setting up repositories
update 100% ========================= 951 B 00:00
base 100% ========================= 1.1 kB 00:00
addons 100% ========================= 951 B 00:00
extras 100% ========================= 1.1 kB 00:00
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for yum-utils to pack into transaction set.
yum-utils-0.5-2.el4.cento 100% ========================= 7.1 kB 00:00
---> Package yum-utils.noarch 0:0.5-2.el4.centos set to be updated
--> Running transaction check
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
yum-utils noarch 0.5-2.el4.centos extras 45 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 45 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): yum-utils-0.5-2.el 100% ========================= 45 kB 00:21
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: yum-utils ######################### [1/1]
Installed: yum-utils.noarch 0:0.5-2.el4.centos
Complete!
インストール完了
古いカーネルを削除
※今動いているカーネルと1世代前のカーネルは残ります。(デフォルト設定)
# package-cleanup --oldkernels
※残しておきたいカーネル数を指定したい場合は以下のようにオプションを追加します。
# package-cleanup --oldkernels --count=残すカーネル数(現在のカーネルも含む)
削除対象のカーネルがリストアップされます
Setting up yum
Not removing kernel 2.6.9-67.0.7.EL because it is the running kernel
I will remove the following 11 kernel related packages:
kernel-2.6.9-67.0.15.EL
kernel-2.6.9-67.0.4.EL
kernel-2.6.9-67.0.1.EL
kernel-2.6.9-67.EL
kernel-2.6.9-55.0.12.EL
kernel-2.6.9-55.EL
kernel-devel-2.6.9-67.EL
kernel-devel-2.6.9-55.0.12.EL
kernel-devel-2.6.9-67.0.4.EL
kernel-devel-2.6.9-67.0.15.EL
kernel-devel-2.6.9-67.0.1.EL
Is this ok [y/N]:
yで実行します。
2008年8月21日木曜日
ランキング(SQLServer 2005 分析関数の利用)
SQLServer2005の分析関数を利用して売上ランキングを作る
--売上テーブル(非現実的なテーブルですが・・・ご勘弁ください)
--ここではテーブル変数を利用します
DECLARE @UriageData TABLE (
GroupCD SMALLINT DEFAULT 0, --グループ
TantosyaCD SMALLINT DEFAULT 0, --担当者
UriageDate DATETIME, --売上日
Uriagegaku MONEY DEFAULT 0 --売上額
)
--売上データ
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/01', 10000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 2, '2008/01/02', 20000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 3, '2008/01/01', 9000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 4, '2008/01/01', 30000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 5, '2008/01/03', 7000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/10', 20000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 2, '2008/01/12', 15000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 3, '2008/01/11', 10000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 4, '2008/01/11', 9000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 5, '2008/01/10', 25000)
--ランキング(担当者別に売上額の高い順にソートして順位を付ける)
SELECT RANK() OVER(ORDER BY SUM(Uriagegaku) DESC) AS 'ランク',
TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD

--順位が同じだったら・・・
--担当者1と2を同額になるようにデータを調整
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/11', 5000)

担当者1と2共に2位となります。そのとき3位は歯抜けとなる
--RANK()の変わりにDENSE_RANK()を使うと歯抜けをしない形で返る
SELECT DENSE_RANK() OVER(ORDER BY SUM(Uriagegaku) DESC) AS 'ランク',
TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD

--結果からトップ3を抽出する
SELECT AllData.rank AS 'ランク', AllData.tanto AS '担当者', AllData.uriage AS '売上額'
FROM (SELECT DENSE_RANK() OVER(ORDER BY SUM(Uriagegaku) DESC) AS rank,
TantosyaCD AS tanto, SUM(Uriagegaku) AS uriage
FROM @UriageData
GROUP BY TantosyaCD
) AS AllData
WHERE AllData.rank BETWEEN 1 AND 3

--グループ内でそれぞれランキングを付ける(PARTITION BYを付加します)
--その前にわかりやすい結果になるようちょっとデータを直します
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/11', -5000)
SELECT RANK() OVER(PARTITION BY GroupCD ORDER BY SUM(Uriagegaku) DESC) AS 'ランク', GroupCD AS 'グループ', TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD, GroupCD

--余談ですがROW_NUMBER()を使うと単純に結果レコードに番号を振ります
SELECT ROW_NUMBER() OVER(ORDER BY SUM(Uriagegaku) DESC) AS 'No',
TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD
--売上テーブル(非現実的なテーブルですが・・・ご勘弁ください)
--ここではテーブル変数を利用します
DECLARE @UriageData TABLE (
GroupCD SMALLINT DEFAULT 0, --グループ
TantosyaCD SMALLINT DEFAULT 0, --担当者
UriageDate DATETIME, --売上日
Uriagegaku MONEY DEFAULT 0 --売上額
)
--売上データ
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/01', 10000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 2, '2008/01/02', 20000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 3, '2008/01/01', 9000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 4, '2008/01/01', 30000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 5, '2008/01/03', 7000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/10', 20000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 2, '2008/01/12', 15000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 3, '2008/01/11', 10000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 4, '2008/01/11', 9000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 5, '2008/01/10', 25000)
--ランキング(担当者別に売上額の高い順にソートして順位を付ける)
SELECT RANK() OVER(ORDER BY SUM(Uriagegaku) DESC) AS 'ランク',
TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD

--順位が同じだったら・・・
--担当者1と2を同額になるようにデータを調整
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/11', 5000)

担当者1と2共に2位となります。そのとき3位は歯抜けとなる
--RANK()の変わりにDENSE_RANK()を使うと歯抜けをしない形で返る
SELECT DENSE_RANK() OVER(ORDER BY SUM(Uriagegaku) DESC) AS 'ランク',
TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD

--結果からトップ3を抽出する
SELECT AllData.rank AS 'ランク', AllData.tanto AS '担当者', AllData.uriage AS '売上額'
FROM (SELECT DENSE_RANK() OVER(ORDER BY SUM(Uriagegaku) DESC) AS rank,
TantosyaCD AS tanto, SUM(Uriagegaku) AS uriage
FROM @UriageData
GROUP BY TantosyaCD
) AS AllData
WHERE AllData.rank BETWEEN 1 AND 3

--グループ内でそれぞれランキングを付ける(PARTITION BYを付加します)
--その前にわかりやすい結果になるようちょっとデータを直します
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/11', -5000)
SELECT RANK() OVER(PARTITION BY GroupCD ORDER BY SUM(Uriagegaku) DESC) AS 'ランク', GroupCD AS 'グループ', TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD, GroupCD

--余談ですがROW_NUMBER()を使うと単純に結果レコードに番号を振ります
SELECT ROW_NUMBER() OVER(ORDER BY SUM(Uriagegaku) DESC) AS 'No',
TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD
2008年8月12日火曜日
大文字小文字区別するSQL(SQLServer)
今さらですが・・・通常大文字と小文字を区別するかどうかはSQLserverのインストール時に決定されるが、
もし区別しない形式でインストールしてしまった場合は、COLLATE句を付けてSQL文を記述するとよい。
SELECT * FROM testTB WHERE name = 'STDMAN' COLLATE Japanese_CS_AS_KS_WS
・CI 大文字、小文字を区別しない。全角アルファベットの大文字、小文字も区別しない
・CS 大文字、小文字を区別する。全角アルファベットの大文字、小文字も区別する
・AI アクセント、濁音、破裂音を区別しない。
・AS アクセント、濁音、破裂音を区別する。
・KS ひらがなとカタカナを区別する。半角でも区別する
・WS 文字幅を区別する。(全角半角を区別する)
詳しくはSQLServer開発チームのブログ(2008/06/16)を参考にしてください。
また、サーバー照合順序はインストール後でも変更することはできるが、大変そうです。
SQLServer2005:http://msdn.microsoft.com/ja-jp/library/ms179254.aspx
もし区別しない形式でインストールしてしまった場合は、COLLATE句を付けてSQL文を記述するとよい。
SELECT * FROM testTB WHERE name = 'STDMAN' COLLATE Japanese_CS_AS_KS_WS
・CI 大文字、小文字を区別しない。全角アルファベットの大文字、小文字も区別しない
・CS 大文字、小文字を区別する。全角アルファベットの大文字、小文字も区別する
・AI アクセント、濁音、破裂音を区別しない。
・AS アクセント、濁音、破裂音を区別する。
・KS ひらがなとカタカナを区別する。半角でも区別する
・WS 文字幅を区別する。(全角半角を区別する)
詳しくはSQLServer開発チームのブログ(2008/06/16)を参考にしてください。
また、サーバー照合順序はインストール後でも変更することはできるが、大変そうです。
SQLServer2005:http://msdn.microsoft.com/ja-jp/library/ms179254.aspx
2008年8月5日火曜日
2008年7月31日木曜日
FortiGate SSL VPN Tunnel モード
2013/09/26 FortiOS V4.0 MR3での設定を作成しました。
良ければご参考にどうぞ!ただしWebAccessのみですが・・・
http://stdman.blogspot.jp/2013/09/fortigate-ssl-vpnwebaccess.html
FortiOS V3.0 MR7によるSSLVPNをトンネルモードで動作させる基本的な設定です。
FortiGate60B V3.0 MR7 build0726を使います。
設定はすべてWebから行うことができます。
●ネットワーク構成
INTERNAL アドレス :192.168.0.1
INTERNAL ネットワーク:192.168.0.0/24(LocalNetとしてアドレス定義)
WAN1 アドレス :10.1.111.32(仮想グローバルIPとしてスタティック設定)
SSLVPN ネットワーク :192.168.99.0/24
●手順
・SSL VPNの有効化
・ユーザの作成
・ユーザグループの作成
・ファイアウォールポリシーの作成
・トンネルモードの設定
1.SSL VPNの有効化 メニュー:VPN>SSL
「SSL-VPNを有効にする」にチェックを入れて有効化する。
「トンネルIP範囲」トンネルモードで使われる仮想IPレンジです。
※トンネルモードを利用しない場合は、0.0.0.0-0.0.0.0でよい。

2.ユーザの作成 メニュー:ユーザ>ローカル
ユーザ名とパスワードを設定する。これがログインするユーザとなります。

3.ユーザグループの作成 メニュー:ユーザ>ユーザーグループ
2で作成したユーザをメンバーに加える。
「SSL-VPNトンネルサービスを有効にする」にチェックを入れる。
「ウェブアプリケーションを有効にする」にチェックを入れ必要なサービスを有効にする。

4.ファイアウォールポリシーの作成 メニュー:ファイアウォール>ポリシー
WAN1->INTERNAL サービス:ANY アクション:SSL-VPN
ユーザグループを許可する。

作成したポリシーは最上位にすること。

この時点で、Webモードとして利用できます。
実際に確認してみましょう。https://10.1.111.32:10443/にアクセスします。
デフォルトでは10443ポートを利用しますが、システム>管理者>設定のSSLVPNログインポートで
任意に設定することができます。ただし443を指定することはできません。
※IEでアクセスすると読み込み中のまま止まってしまうことがあります。
その場合はリロードすればログイン画面が表示されます。
2008/09/01補足
アドレスは/remote/login まで指定したほうがいいみたいです。
(ここではhttps://10.1.111.32:10443/remote/login のように指定する)

ログイン直後画面

接続テスト(PING)を実行してみよう。
下のツール内にある「接続テスト(PING)」に接続先のIPを入力して「GO」を押します。
以下のメッセージが表示されれば通信は問題ないと思われます。

トンネルモードを設定してみる
接続先をプロキシとしてゲートウェイにする。
5.SSLVPNネットワークからINTERNALネットワークへ通信できるようにポリシー設定する
SSLVPNネットワークからWAN1へ通信できるようにポリシー設定する
SSLVPNのアドレスをSSLVPN_Usersとしてアドレス定義する ファイアウォール>アドレス
※インターフェイスにssl.rootを選択

SSLVPNからINTERNALを許可

SSLVPNからWAN1を許可(NATにチェック) これがゲートウェイとして機能します。

ポリシー一覧

プロキシ設定 ルータ>スタティックルート
SSLユーザーのIPレンジを設定します。

これで環境は整いましたので再ログインして左上にある「SSL-VPNトンネルモードを有効にする」を押してください。以下のように接続状態が表示されます。
またゲートウェイアドレスが接続先になっているか、ddo.jpなどにアクセスして確認してみてください。

接続終了
「Disconnect」を押す。(トンネルモードのみ解除されます)
※ネットワーク接続に「fortissl」というダイヤルアップが作成されますので
接続終了後不要な方は「Disconnect」を押した後に「Uninstall」を押してダイヤルアップを削除してください。
を押してログアウトします。
良ければご参考にどうぞ!ただしWebAccessのみですが・・・
http://stdman.blogspot.jp/2013/09/fortigate-ssl-vpnwebaccess.html
FortiOS V3.0 MR7によるSSLVPNをトンネルモードで動作させる基本的な設定です。
FortiGate60B V3.0 MR7 build0726を使います。
設定はすべてWebから行うことができます。
●ネットワーク構成
INTERNAL アドレス :192.168.0.1
INTERNAL ネットワーク:192.168.0.0/24(LocalNetとしてアドレス定義)
WAN1 アドレス :10.1.111.32(仮想グローバルIPとしてスタティック設定)
SSLVPN ネットワーク :192.168.99.0/24
●手順
・SSL VPNの有効化
・ユーザの作成
・ユーザグループの作成
・ファイアウォールポリシーの作成
・トンネルモードの設定
1.SSL VPNの有効化 メニュー:VPN>SSL
「SSL-VPNを有効にする」にチェックを入れて有効化する。
「トンネルIP範囲」トンネルモードで使われる仮想IPレンジです。
※トンネルモードを利用しない場合は、0.0.0.0-0.0.0.0でよい。

2.ユーザの作成 メニュー:ユーザ>ローカル
ユーザ名とパスワードを設定する。これがログインするユーザとなります。

3.ユーザグループの作成 メニュー:ユーザ>ユーザーグループ
2で作成したユーザをメンバーに加える。
「SSL-VPNトンネルサービスを有効にする」にチェックを入れる。
「ウェブアプリケーションを有効にする」にチェックを入れ必要なサービスを有効にする。

4.ファイアウォールポリシーの作成 メニュー:ファイアウォール>ポリシー
WAN1->INTERNAL サービス:ANY アクション:SSL-VPN
ユーザグループを許可する。

作成したポリシーは最上位にすること。

この時点で、Webモードとして利用できます。
実際に確認してみましょう。https://10.1.111.32:10443/にアクセスします。
デフォルトでは10443ポートを利用しますが、システム>管理者>設定のSSLVPNログインポートで
任意に設定することができます。ただし443を指定することはできません。
※IEでアクセスすると読み込み中のまま止まってしまうことがあります。
その場合はリロードすればログイン画面が表示されます。
2008/09/01補足
アドレスは/remote/login まで指定したほうがいいみたいです。
(ここではhttps://10.1.111.32:10443/remote/login のように指定する)

ログイン直後画面

接続テスト(PING)を実行してみよう。
下のツール内にある「接続テスト(PING)」に接続先のIPを入力して「GO」を押します。
以下のメッセージが表示されれば通信は問題ないと思われます。

トンネルモードを設定してみる
接続先をプロキシとしてゲートウェイにする。
5.SSLVPNネットワークからINTERNALネットワークへ通信できるようにポリシー設定する
SSLVPNネットワークからWAN1へ通信できるようにポリシー設定する
SSLVPNのアドレスをSSLVPN_Usersとしてアドレス定義する ファイアウォール>アドレス
※インターフェイスにssl.rootを選択

SSLVPNからINTERNALを許可

SSLVPNからWAN1を許可(NATにチェック) これがゲートウェイとして機能します。

ポリシー一覧

プロキシ設定 ルータ>スタティックルート
SSLユーザーのIPレンジを設定します。

これで環境は整いましたので再ログインして左上にある「SSL-VPNトンネルモードを有効にする」を押してください。以下のように接続状態が表示されます。
またゲートウェイアドレスが接続先になっているか、ddo.jpなどにアクセスして確認してみてください。

接続終了
「Disconnect」を押す。(トンネルモードのみ解除されます)
※ネットワーク接続に「fortissl」というダイヤルアップが作成されますので
接続終了後不要な方は「Disconnect」を押した後に「Uninstall」を押してダイヤルアップを削除してください。
を押してログアウトします。
2008年7月29日火曜日
FortiOS V3.00 MR7 (build0726)
2008/7/18 FortiOS V3.00 MR7がリリースされました。
早速、support.fortinet.comからダウンロード(FortiGate200用のFGT_200-v300-build0726-FORTINET.out)しアップデートして状態を確認してみた。
※アップデート前はV3.00 MR6 build0660
メモリ使用率は40%台で安定している。また以前V3.00 MR6 build0660でのHTTPS接続に問題があったが
今回は大丈夫なようですね、IPsec VPNも問題ない。
「FortiOS v3.0 MR7 SSL VPN User Guide」
http://docs.forticare.com/fgt/techdocs/FortiGate_SSL_VPN_User_Guide_01-30007-0348-20080718.pdf
SSLVPN用のFortiClientなんてものもあるんですね。

さらにSSLVPN VirtualDesktopというものまで。

SSLVPNを構築したら試してみたいと思います。
ボソボソ:社内のActiveDirectory再構築!
1台のNT4.0で構築されていたものを前任者がWindowsServer2000にアップしてさらにWindowsServer2003へアップしていたがどうやらシステム上致命的な問題があり複製も作れない状態!最悪。
どうせなので新たにActiveDirectoryを新規構築してクライアント(約100台)をすべて移行した。
早速、support.fortinet.comからダウンロード(FortiGate200用のFGT_200-v300-build0726-FORTINET.out)しアップデートして状態を確認してみた。
※アップデート前はV3.00 MR6 build0660
メモリ使用率は40%台で安定している。また以前V3.00 MR6 build0660でのHTTPS接続に問題があったが
今回は大丈夫なようですね、IPsec VPNも問題ない。
「FortiOS v3.0 MR7 SSL VPN User Guide」
http://docs.forticare.com/fgt/techdocs/FortiGate_SSL_VPN_User_Guide_01-30007-0348-20080718.pdf
SSLVPN用のFortiClientなんてものもあるんですね。

さらにSSLVPN VirtualDesktopというものまで。

SSLVPNを構築したら試してみたいと思います。
ボソボソ:社内のActiveDirectory再構築!
1台のNT4.0で構築されていたものを前任者がWindowsServer2000にアップしてさらにWindowsServer2003へアップしていたがどうやらシステム上致命的な問題があり複製も作れない状態!最悪。
どうせなので新たにActiveDirectoryを新規構築してクライアント(約100台)をすべて移行した。
2008年7月9日水曜日
メールの文字化け
たまにメールが$B$3$l$O(JJIS$B$NJ8$G$9!#(J のように化けることがあります。
原因は色々考えられますが・・・
そんなとき以下のサイトを利用してみてください。
http://masaka.dw.land.to/mr/jmr.php
文字化け部分を貼り付けるだけで解読してくれます。
ツールの作者masakaさんに感謝です。
原因は色々考えられますが・・・
そんなとき以下のサイトを利用してみてください。
http://masaka.dw.land.to/mr/jmr.php
文字化け部分を貼り付けるだけで解読してくれます。
ツールの作者masakaさんに感謝です。
登録:
投稿 (Atom)