- 投稿日:2019-05-07T23:39:14+09:00
LPICの受験対策・確認事項など
LPICとは
Linuxの管理者・運用者のための資格試験です。
LPICは日本語で提供されていますが、世界中で通じる唯一の資格です。
レベル1から3まであり、レベル3が最難関の試験です。
その他に入門者向けのLinux Essentialsと、少し毛色が違う開発系のためのDevOpsもありますが、このページではレベル1から3までの試験を中心に扱います。レベル1試験はLinuxの仕組みや基本的な操作方法を中心に出題され、Linux経験1年未満くらいの方が対象です。個人的には半年以内の方でも十分に合格できると思います。レベル1試験は101試験と102試験の2つに分かれており、2つ合格して資格が認定されます。
レベル2試験はLinuxの高度な扱い方やLinux上で動作する各種のソフトウェアを中心に出題され、Linux経験3年未満くらいの方が対象です。個人的には1年以内の方でも十分に合格できると思います。レベル2試験は201試験と202試験の2つに分かれており、2つ合格して資格が認定されます。
レベル3試験はLinuxの最高位で、テーマごとに試験が分かれており、出題範囲も全く異なります。1つでも合格するとレベル3として認定されますが、各試験に合格するとその試験分野のスペシャリストとして世界的に認められます。
個人的には1年以上の経験があれば十分に合格できると思います。
一番簡単なのは「LPIC-3 304:仮想化とハイアベイラビリティ」で、次は「LPIC-3 303:セキュリティ」かと思います。ただ、「LPIC-3 300:混在環境」はWindows Serverの経験があるならとっつきやすいのではないでしょうか。試験科目一覧を以下に示します。出題範囲はリンク先から確認できます。
- LPIC-1 101:Linux管理者
- LPIC-1 102:Linux管理者
- LPIC-2 201:Linuxエンジニア
- LPIC-2 202:Linuxエンジニア
- LPIC-3 300:混在環境
- LPIC-3 303:セキュリティ
- LPIC-3 304:仮想化とハイアベイラビリティ
- Linux Essentials
- 701:DevOps Tools エンジニア
その他の情報はこちら
- 受験料:税込み16200円(後で紹介するバウチャーを使えば安くなります)
- 試験時間:90分
- 問題数:60問
- 合格点数:500点(200~800点の範囲でスコアリング。ただし、50%正解すればよいわけではありません。詳しくは後程。)
LinuCとの違い
LPICと似た試験にLinuCというものがあります。
よくLPICは終了してLinuCに変わったと誤解されますが、LPICは引き続き受験可能です。ではLinuCとは何かといいますと、簡単に言えば、日本版LPICです。
運営組織は別でLPICはLPI日本支部、LinuCはLPI Japanという組織です。
以前はLPIがLPI JapanにLPICの日本での運営を委託していました。LPICは世界的な資格な半面、日本独自の使われ方には合わないためLinuCができたと、言われています。
建前上は。。。
本音のところは利権の問題などささやかれますが、ここでは割愛します。
(確かにLPI Japan時代はLPICレベル3試験の受験料を日本だけ2倍にしていたという事実もありますが、、、。LinuCは引き続き2倍料金です。)個人的にはLPICを推します。それには次の理由があります。
- LPICは世界で通じる。海外で働かないから関係ない、とはなりません。国内の外資系企業で働くことは絶対ありませんか?その際、LPICなら通じますが、LinuCは通じないかもしれません。
- LPICは歴史がある。まだまだLinuCは知名度はありません。IT系の方なら知っているかもしれません。しかし、就職の際に書類選考をするのは人事担当者です。LPICは知っていてもLinuCは知らないかもしれません。
- 受験料が安い。先にも書きましたが、LPICのレベル3受験料はLinuCの半額で1.5万円です。LinuCは3万円です。説明不要ですね。
- LinuCはころころ問題が変わる可能性がある。LinuCは試験問題をすぐに変え得ることを表明しています。それではせっかく買った教科書や問題集がすぐに役に立たなくなる、なんてことが起こるかもしれません。資格は合格することが大事です。しかも受験料も安くありません。より確実に合格したいならLPICが良いですね。
LPICのコツ
LPICの合格のためのコツをご紹介します。
問題形式と採点方法
LPICは次の問題形式があります。
- 単一選択問題 (選択肢の中から1つだけ選択します。)
- 複数選択問題 (選択肢の中から複数個選択します。選択する数は問題ごとに指示があります。選択が全部正解で得点です。)
- 語句入力問題 (キーボードから文字を入力します。)
※選択問題の選択肢は4~5つ程度
LPICの採点方法は難しい問題ほど高得点になります。
具体的には、他の受験者の正答率が低い問題ほど高い点数になります。ここでカギになるのは「語句入力問題」です。
語句入力問題は選択問題に比べて、消去法が使えない分、かなり難しいです。
語句入力問題で出る問題は簡単なものばかりというわけではないので、どれだけ語句入力問題を正答できるかで大きく点数が違います。
語句入力問題としては、ファイルのパス、ファイル名、設定ファイルのパラメータや値、コマンドのオプションなど、様々あります。
これらはLinux経験者だから勉強しなくても答えられるというものでは決してありません。単一選択問題と複数選択問題の選択問題系も難しい問題ほど点数が高いですが、消去法も可能なため、語句入力問題に比べると難易度は下がります。
それでも得点すべき問題はしっかりと得点したいですね。試験範囲
LPICの試験範囲は公開されていますが、これらがまんべんなく出るかというとそんなことはなく、結構偏りがあったりします。そのため、教科書を読むだけでは頻出部分がうろ覚えになったりして効率が悪いです。
必ず問題集を解きましょう。再受験
再受験は1回目の不合格から1週間後に受験できます。
ただし、再受験時には1回目に出た問題はほぼ出ません。実感としては同じ問題は60問中3、4問です。
その為、1回目に出た問題を頑張って覚えても2回目にはほぼ役に立ちません。
1回の受験でばっちり合格できるように準備したほうが良いです。
不合格であったとしても1回目の受験の点数に関係なく、しっかりと勉強して2回目に臨んでください。勉強法
さて、やっと勉強方法ですね。
LPICのコツでも書きましたが、難しい問題を確実に解くこと、頻出分野を集中的に勉強することが合格につながります。
LPICの勉強は短期間に効率よくやることが大事です。以下ではレベルごとの学習法を紹介します。
LPICレベル1
効率よく勉強することが大事、と書きましたが、レベル1は地道に教科書を読んでおいたほうが良いです。
流し見でもよいですので、教科書には一通り目を通しておいてください。おすすめは翔泳社さんの「Linux教科書 LPICレベル1」です。必ず最新バージョンのものを購入してくださいね。
https://www.shoeisha.co.jp/book/detail/9784798160498教科書を一通り読んだ後は問題集をやりましょう。
おすすめはこちらも翔泳社さんの「Linux教科書 LPICレベル1 スピードマスター問題集」です。できれば最新バージョンが良いですが、1つ前のバージョンでもなんとかなります。
https://www.shoeisha.co.jp/book/detail/9784798141893Web問題集のPing-tさんもおすすめです。
https://ping-t.com/
102試験は有料ですが、101試験は無料で利用できます。
Ping-tさんは網羅的に問題が出るので、上位レベルの試験では効率が悪くて使いづらいですが、レベル1試験はあまり偏りがないので良いです。正解するごとに金銀銅のマークがつくので、すべての問題を銀マーク以上にしたうえで、2度ほど問題数・試験時間を本番と同じにして挑戦しましょう。それで9割取れればまず合格するでしょう。LPICレベル2
レベル2から急に難しくなります。効率よく学習したいですね。
レベル2は問題集を解きながら、わからないところは教科書で読むという、レベル1とは逆のほうが効率が良いです。
決して教科書を全部読んでから問題、としてはいけません。絶対最初に読んだあたりの範囲は忘れています。教科書はレベル1と同じく翔泳社さんのものがおすすめです。
https://www.shoeisha.co.jp/book/detail/9784798151236問題集はWeb問題集の学易さんと紙の問題集の翔泳社さんのものがおすすめです。
学易:https://gakuyasu.byaku.jp/
翔泳社:https://www.shoeisha.co.jp/book/detail/9784798151250学易はレベル2は無料で利用できます。
無料なので問題数は50問程度とやや少なめですが、しっかりと本試験を分析したうえで問題を作ってあるので、大幅な得点上昇に結びつきます。解説も解説が必要な問題のみについており、解説を読むだけで大変、ということはありません。必ず確実に満点がとれるようになるまで勉強しましょう。
といっても1日頑張れば、十分にそのレベルまでいけますよ。翔泳社さんの紙の問題集も解いておきましょう。できれば2周くらいはしたいですね。
レベル1でおすすめしたPing-tさんはレベル2ではおすすめしないです。まんべんなく問題が出るので、効率が悪いです。解説もかなり長々としており、しかも別の似たような問題から流用した解説が多数あるので、正直あまり頭に入ってきません。何度もやっていると、問題文と答えの組み合わせを暗記するだけになってしまいます。それでは本試験に対応できません。
LPICレベル3
レベル3は完全に問題集だけで十分です。副読本として教科書を用意しておいても良いですが、教科書を読むより問題集の解説を読んだほうが良いです。
レベル3は学易さんの問題集だけでよいです。
レベル3から学易さんは有料になってしまいますが、効率よく・確実に合格して時間やお金を節約したほうがずっと良いです。
https://gakuyasu.byaku.jp/学易さんでは後述するバウチャーも販売しており、バウチャー購入時に問題集の利用割引券がもらえます。
それを使って問題集を購入するのが良いですよ。レベル3からは学易では解説がある問題が多いです。といっても、必要最低限の分量に抑えられており、どの点が解き方のポイントになるかが色を変えて書かれているので、非常にわかりやすいです。
問題は130問くらいあるので、ほぼ100%正解できるまでやりこみましょう。おそらく2日もあれば十分に力がつくと思います。
学易は合格保証付きで、万が一不合格の場合は利用料を返金してくれるようです。すごい自信ですね(笑)。でも本当に良い問題集だと思います。バウチャー購入
LPICのバウチャーは調べてみましたが、間違いなく学易さんが最安です。
学易:LPIC 受験バウチャー割引販売価格は税込14,580円。定価が16,200円なので、ちょうど10%割引ですね。
ただし、納品までに1週間くらいかかるようなので、早めに購入したほうが良いですね。
バウチャーは1年くらい使えますので、急に忙しくなって受験を先延ばしにしても問題ありません。
購入すればeラーニングの割引チケットももらえますのでお得です。その他の販売サイトについて
- Ping-t : 15,120円
- isaオンラインショップ : 15,120円
- Pearson : 16,200円
- SEShop : 16,200円
- メルカリ : ???円 ※たまに出品されているようです試験予約
試験の予約の流れとしては次のような感じです。
- LPIアカウント登録 (2回目不要)
- Pearsonアカウント登録 ※1営業日かかるので早めに事前に登録しておきましょう (2回目不要)
- テストセンターの選択
- 受験日時の選択
- バウチャーで決済
- 予約完了
試験の予約の詳しい手続きは学易さんのWebサイトに画像付きで詳しく載ってますので、詰まった方はこちらを参考にするのが良いです。
受験当日
テストセンターは込み合う可能性がありますので、予約時間の30分前には到着しましょう。
受験には以下の持ち物が必要です。
- 写真付き身分証
- 別の身分証・クレジットカード
- ポケットティッシュ (必要な場合)
その他のものは持って行っても持ち込めません。腕時計もダメです。
テストセンターに到着したら、まず受付に行って名前と受験科目、受験時間を伝えましょう。
その後、身分証の提示・確認を行い、同意書にサインします。
写真撮影と電子署名(タブレット上に専用のペンで漢字でフルネームを書きます)を終えたら、荷物を預けるロッカーについて案内されますので、荷物をロッカーにしまってください。
以上で準備は完了です。時間になったら入室しましょう。
持ち込めるのはポケットティッシュ、メガネだけです。メガネは確認のため、入室の際に係員に見せてチェックしてもらいます。
試験室で自分の席に着席すると、受験科目・受験者(自分)の名前を改めて確認し、試験開始です。
ここで、係員が離れていきますので、以降は画面の指示に従って試験を進めましょう。まずは、確認事項を読み、同意します。※絶対に同意しないで進めないでください
試験が開始されると1.5時間のカウントダウンが始まります。問題は後で見直せますので、コマンド問題から先にやるなど、自分なりの方法で解き進めてください。
全ての問題に回答完了後、回答一覧から未回答問題がないかを確認し、試験を終了します。
時間切れの場合は強制的に終了になります。直ちに試験結果が表示されます。
お疲れさまでした。これで完了です。受付でスコアレポートを印刷したものを受け取ってください。
合格した場合は1か月ほどで認定証が送られてきます。
※101、102試験などの2科目合格が必要な場合は送られてきません。最後に
LPICの勉強は短期間に効率よくやることが大事です。
Pearsonアカウント作成がまだの方はPearsonアカウント作成を、それとバウチャーの購入は早めにすましておきましょう。
それでは長くなりましたが読んでいただきありがとうございました。
- 投稿日:2019-05-07T23:11:01+09:00
Kali Linux に Kindle for PC をインストールする。
Kali Linux に Kindle for PC をインストールする。
LinuxでKindleを読むために手こずったため、メモ化しておく。
・playonlinuxの環境構築
・Kindleのインストール
・Kindleの日本語化この記事を書いたときの環境
$ uname -a Linux kali 4.19.0-kali4-amd64 #1 SMP Debian 4.19.28-2kali1 (2019-03-18) x86_64 GNU/Linux $ playonlinux --version PlayOnLinux 4.3.4 $ ls ~/Downloads/ kindle-for-pc-1-17-44183.exeplayonlinuxのインストール
wineを直接使ってもいいんですが、バージョン管理が(非常に)面倒なのでplayonlinux上でwineの適切な
バージョンを設定してKindleをインストールしたいともいます。$ sudo apt install playonlinux$ playonlinux --version PlayOnLinux 4.3.4terminalから起動して設定していきます。メニューバー等からも起動はできますが、terminalから起動した場合
ログがでるのでエラーへの対処がしやすくなります。$ playonlinux言語設定で日本語を選んでいる場合は言語を英語にして起動したほうが無難です。次のコマンドで言語を英語にして起動できます。
$ LC_ALL=C playonlinuxKindle for PCのダウンロード
playonlinuxから直接Kindleをインストールできますが、
これだと適切なバージョンが設定できないのでうまく動きません。
自分で適切なバージョンのものをダウンロードしてインストールします。
wineとKindleのバージョンの組み合わせは次を確認すればいいでしょう。
https://appdb.winehq.org/objectManager.php?sClass=application&iId=10597
ここからRatingがGoldかPlatinumの組み合わせを選べば良いと思います。
今回はwine-2.15, Kindle-1.17.xで行います。
Kindle-1.17.xのダウンロードは以下のページから。
https://kindle-for-pc.en.uptodown.com/windows/downloadまたamazon.co.jpから最新バージョンのものをダウンロードしても(2019.5.7現在では)
バージョンがよくわからないのでうまく行くかは運次第。playonlinuxの仮想環境の設定
ツールバーの Tools > Manage Wine Versions を選択。
Wine Version(x86)からWine 2.15を選択。次にConfigureから新たにWindows,wineの環境を構築。
New > 32 bit windows installation > 2.15 を選択。
virtual driveの名前を聞かれるので適当に"KindleJP"と入力。Kindle for PCのインストール
メニューのinstall > install-not-a-listed-programを選ぶ。
上記のplayonlinuxで仮想環境の設定をおこなっている場合は、Edit or update an existing applicationを選択。
仮想環境の設定を行ってなくてもInstall a program in a new virtual driveを選択すれば同様の設定を行える。
installを行う前にUse another version of Wine とConfigure Wineにチェックを入れる。
(チェックを入れなくても後で設定できる。)
チェックを入れた場合、wineのバージョンとwindowsのバージョンを聞かれるので
wineは2.15、windowsはwindows 7もしくはwindows 8.1を選択。その後インストールするアプリを聞かれるのでダウンロードしたkindle-for-pc-1-17-44183.exeを選択。
インストール中、アカウントを聞かれるが一旦無視してよい。
インストールが終了するとplayonlinux上にKindleのアイコンが表示されると思います。Kindle for PCの日本語化
インストールは完了しましたが、日本語が表示できないので表示させるためにレジストリをいじります。
自分でwindowsのレジストリをいじる場合は、間違えた場合取り返しがつかないことがあるので必ずバックアップコピーをとるのですが
今回はLinux上の仮想環境であること(と、あとめんどくさい)からレジストリのバックアップは行いません。Kindleのアイコン上で右クリック > Registory Editor
regeditが表示されるので
HKEY_USRS/S-1-5-21-0-0-0-1000/Software/Amazon/Kindle/User_settings/lang.iso639
のValue dataをenからjpに変更します。ただし、これを変更しても全部うまく日本語化されるわけではないみたい。
うまいやり方だれか教えてください。参考文献・リンク
Ubuntu 16.04 に Kindle for PC をインストールする
http://nkenbou.hatenablog.com/entry/2017/04/25/125733
Where are Amazon Kindle ebooks on my Linux PC after I download them for offline reading w/“Kindle Cloud Reader” Chrome app, & how to convert to PDF?
https://askubuntu.com/questions/1011989/where-are-amazon-kindle-ebooks-on-my-linux-pc-after-i-download-them-for-offline
- 投稿日:2019-05-07T20:49:51+09:00
UbuntuでHFS+を一般ユーザーで読書可能にする
Macでよく使われるHFS+フォーマットのディスクを,Ubuntuで一般ユーザーで読み書き可能な状態でマウントする方法をまとめておきます.
検証環境:Ubuntu 18.04 LTSインストール
hfsprogsとbindfsが必要なので,インストールしておきます.sudo apt install hfsprogs bindfsマウント
/dev/sdd1を/media/HFS_Disk/にマウントするとします.このとき,/dev/sdd1を一旦/media/HFS_Root/にマウントしてから,それを/media/HFS_Disk/にマウントし直すことで一般ユーザーでの読み書きを実現します.(HFS_Rootではroot権限がないと書き込みができません.)sudo mount -t hfsplus -o force,rw /dev/sdd /media/HFS_Root sudo bindfs -u $(id -u) -g $(id -g) /media/HFS_Root /media/HFS_Diskアンマウント
HFS_DiskをアンマウントしてからHFS_Rootをアンマウントして完了です.sudo umount /media/HFS_Disk sudo umount /media/HFS_Root参考元
- 投稿日:2019-05-07T19:23:23+09:00
ヤマハルータ(RTX1200)からログをCentOS6に送ってみた
はじめに
ヤマハルータ(RTX1200)のログをLinuxに集めてみました。
参考
- http://www.rtpro.yamaha.co.jp/RT/FAQ/Syslog/what-is-syslog.html
- http://akira-arets.blogspot.com/2016/03/rtx1200loggingwithrsyslog.html
環境
- ルータ
- ヤマハルータ(RTX1200)
ログ収集サーバー
- CentOS6.10
ログ収集デーモン
- syslog → rsyslog
動作概要
RTX1200からログ収集サーバーにUDP/514でログを送信
------+-----------------------------+------- | | +-----+------+ +------+------+ | RTシリーズ | | コンピュータ| +------------+ +-------------+ 514/UDP syslog →syslog メッセージ→ syslogd (syslogデーモン) ↑ ↓ logしたい情報 syslog.confでの指示によりファイル化などをするsyslogとは
- 役割
- 各アプリケーションからログを受け取りファイルに書き込む
- ログを他のサーバーに送信することもできる
rsyslogとは
- CentOS6ではsyslogの後継で高機能なrsyslogが採用されている。役割は同じ
- rtx1200ではsyslogが採用されている
CentOSの設定
- 設定ファイル
- /etc/rsyslog.conf
<ファシリティ>.<プライオリティ> 出力先ファシリティとは
- ログの種類。mail、cron、ntpなど
- local0-local7は自由に使えるファシリティ。rtx1200からのログはこのどれかで定義する
プライオリティとは
- 優先順位のこと
- emerg
- 緊急事態
- alert
- 警報(すぐ対応必要)
- crit
- 危険
- error
- エラー
- warning
- 警告
- notice
- 注意
- info
- 情報
- debug
- 問題に対応するための詳細な情報
- none
- なし
どのアプリケーションからのどのレベルのログをどこに書き込むか指定する。レベルごとに指定できるのでレベル毎に書き出すファイルを変えることもできる。
ヤマハルータからログを受け取る設定
設定ファイル /etc/rsyslog.conf
udp/514から受け取る設定
$ModLoad imudp $UDPServerRun 514デフォルトだと/var/log/messagesに出力されるので
local5.noneで出力しないようにする*.info;mail.none;authpriv.none;cron.none;local5.none /var/log/messageslocal5(ヤマハルータ)からのログを/var/log/rtx1200.logに書き込む
# RTX local5.* /var/log/rtx1200.logあとはiptabltesでudp 514ポートを開放する
ヤマハルータの設定
administratorになってから
ログの送信先を設定# syslog host IPアドレスファシリティ(ログ種別)をCentOSに合わせる
# syslog facility local5出力したいログのレベルを決定する
# syslog notice on # syslog info on # syslog debug onヤマハルータのログのレベル
noticeレベルの情報
- パケットフィルタリングで、落としたパケットの情報などを ログします。
infoレベルの情報
- 通常の情報をログします。
debugレベルの情報
- 障害解析などの為に、ISDNやPPPのデバッグ情報をログします。
補足
webサーバなどのログをwebサーバで保管するのではなくsyslogの仕組みを使って他のサーバで保管、一括管理することでログが改ざんされることを防ぐこともできる。
まとめ
- 上記設定で特に問題なくログを収集することができました。logrotateの設定を入れたほうが良いかもしれません。今度はログの解析をやってみようと思います。
- 投稿日:2019-05-07T16:45:55+09:00
[linux] SELinuxの状態 [CentOS7]
- 投稿日:2019-05-07T12:40:21+09:00
sudo不要のコマンドインストール (unrarの場合)
Linux系サーバにrar形式のファイルを展開するためのコマンドをlinux環境に非su権限でインストールする.
インストール先を変更するだけで済む事例.なぜPermission deniedされるのか
今回の場合は,単に保護されたディレクトリ内に新しくファイルを作ろうとしたから.
ファイルを作る場所を変え,かつその場所が環境変数PATHに登録されていれば,この問題を避けることができる.準備
ホームディレクトリなどに次のディレクトリを作成する.
- ソースコード保存先(/home/{username}/packagesなど)
- 実行ファイルインストール先(/home/{username}/binなど)
ソースコードのダウンロード
ソースコード保存先に,このサイトにあるtar.gz形式ファイルのダウンロード.
wget http://www.rarlab.com/rar/unrarsrc-{version}.tar.gztar.gz解凍
保存先にてtarコマンドの実行.解凍用オプション(zxvf)は定型文のように覚えてしまう.
tar zxvf http://www.rarlab.com/rar/unrarsrc-{version}.tar.gzunrarディレクトリが作成されているので,そこに移動.
makefileの編集
makeコマンドによってmakefileを用いたコマンドの作成がされるので,一度unrar内のファイルmakefileをテキストエディタで開く.DESTDIR=の部分だけ下記のように編集して保存する.
makefile#DESTDIR=/usr ###←もともとの文コマンドの文頭に#をつける. DESTDIR=/home/{username} ###←/binを除く部分を書く.実行ファイル作成
makeで実行.
makeこれにより,makefileで:の前に定義されるターゲットのうち,一番初めに書かれているものかつドットから始まっていないものを実行する.unrarのmakefileの場合,次が該当.
makefile# ↓飛ばす .cpp.o: $(COMPILE) -D$(WHAT) -c $< # ↓実行される all: unrar : : : # ↓allで指定されたunrarターゲット unrar: clean $(OBJECTS) $(UNRAR_OBJ) @rm -f unrar $(LINK) -o unrar $(LDFLAGS) $(OBJECTS) $(UNRAR_OBJ) $(LIBS) $(STRIP) unrarmake後,コマンド出力の末尾に"unrar"と書かれている(=unrarが正常に生成された)ことを確認して次へ.
実行ファイルのインストール
こちらもmakeで実行.
make installmakefile内の次のターゲットが実行される.
makefile# ↓makeコマンドで指定されたターゲット install: install-unrar # ↓installで指定されたターゲット install-unrar: install -D unrar $(DESTDIR)/bin/unrarここでDESTDIRを用いていることが分かる.
実行後,/home/{username}/bin内にunrarが生成される.PATHの登録(.bashrcの編集)
/home/{username}/binをPATHに登録し,unrarコマンドが使えるようにする.
homeディレクトリに.bashrcがあることを確認.ドットから始まる隠しファイルなので,lsコマンドに-aオプションをつける.ls -aこのファイルをテキストエディタで開き,次の一行を追加して保存する.
.bashrcexport PATH="$PATH:/home/{username}/bin".bashrcはユーザがログイン時に自動的に実行されるコマンドを記載するもの.ターミナルのスタイルを変えたり,長いコマンドを簡略化するエイリアスを登録したり,そして何より環境変数の変更・追加を行うなどの目的で使われる.
今回は,ログイン時に元々のPATHに/home/{username}/binを追記するために使う.動作確認
再ログインするか,.bashrcを強制的に実行する.
source ~/.bashrcコマンドが使えるか(=どこにコマンドがあるかを教えてくれるか)を確認.
which unrar ###→ /home/{username}/bin/unrarと返せばOK.unrarでrarファイルを解凍する.
unrar e xxx.rar以上.
- 投稿日:2019-05-07T07:38:02+09:00
このご時勢なのにOracleDBをPro*Cで操作する
はじめに
本記事は、個人開発(勉強)環境として、Oracle環境を導入する手順まとめです。なぜ記事を書こうと思ったかというと、内容が古すぎるのか、最新の記事がどこにも見当たらなく非常に困ったため。需要あるか分かりませんが、同じような状況の同志と、今後の自分のために。
「クラウドやりたい!」、「Webデザイナーやりたい!」という人も多いと思いますが、(私みたいに)業務上必要なシーンがくるやもしれません。
記事の構成としては以下の通りです。1については、興味ない人は読み飛ばしてください。
- 昨今のOracle
- Oracle Linux環境の構築
- Oracle DBの導入
- データベースの作成
- Oracle DBのセットアップ
- 動作確認(追記予定)
なぜLinuxかというと、今回はC言語からPro*Cを用いてDatabaseを利用します。WindowsにC言語のコンパイル環境を導入するよりもLinux構築のほうが(個人的に)容易なので、今回はOracle Linuxを選定しました。なぜOracle Linuxを選定したかについては下記参照。
- 参考:勉強の為に、LinuxにOracleをインストールしたいと思っています。CentOSかUbuntuで迷っています。。。
- ここでは、Linuxの系譜として、DebianとRHELがあることが述べられています
- 参考:Oracle Linux 出典: フリー百科事典『ウィキペディア(Wikipedia)』
- ここでは、Oracle LinuxがRHEL系列であることが述べられています
また当記事については、先人の良記事を利用して環境構築するため、
基本はサボりますリンク多めですがご了承ください。リンク先で触れられていない部分については、当記事で追記しています。最終的な目標環境は以下の通り。
Windows OS (各個人のバージョン) ┗ VirtualBox (6.0.6) ┗ Oracle Linux (7.5.0.0.0) ┗ C言語実行環境 ┗ Oracle Database (12c Release 2)1. 昨今のOracle
Oracle Javaをはじめ、Oracleについては昨今いろいろ言われていますが、Oracle DBを個人で利用するくらいならまだ無償で利用可能。
その辺の話はあまり詳しくないので参考いくつか載せておきます。
- 参考:Javaの有償化問題、Java8のサポート終了問題について、2019年1月以降どうしたらいいか
- 参考:2019年にJavaを利用している人は全員理解すべきことを説明してみる
- 参考:Oracle Java 有償化。その現状と企業の今後の対策について調査報告。
上記記事ではOracle DBについては触れられてはいませんが、オンプレのパッケージ商品を販売したり、クラウドに注力したりと、そのうち個人利用ですらサブスクリプション課金になりそうな勢いですね。
2. Oracle Linux環境の構築
構築手順
基本的には、「参考:VirtualBoxでOracle Linux 7.5をインストールする(だけのメモ)」を参考に構築する。
- Oracleにアクセスする
- Oracleユーザを作成する。住所やメールアドレスなど入力するが、個人でも会社のでも問題ない
- 作成したユーザIDでログインすると、検索ボックスがあるため、「Oracle Linux 7.5.0.0.0」と入力し「Search」ボタンを押下する
- 「DLP:Oracle Linux 7.5.0.0.0 ( Oracle Linux ) 」を押下すると、カートに追加される
- 右上の「Checkout」を押下する
- カートのSelected Softwareに「Oracle Linux7.5.0.0.0」が入っていることが確認出来たら、Platforms/Languagesを「x86 64bit」にして「Continue」ボタンを押下する
- 「I accept the terms in the license agreement」という同意書的な文章が出てきた場合、「I accept the terms in the license agreement」にチェックをして「Continue」ボタンを押下する
- 「V975367-01.iso Oracle Linux Release 7 Update 5 for x86(64 bit), 4.1GB」以外のチェックをすべて外して、「Download」ボタンを押下し、ダウンロードする
- 「参考:Windows7環境なのにdocker入れて開発することになった話【①環境設定編】」の「1.VirtualBoxのインストール」を参考にViertualboxをインストールする
- Oracle Linuxをイメージをマウントする
- VM VirtualBoxを起動する。
- 「新規(N)」をクリック
- 名前に「Oracle」っぽい名前(OracleVMとかOracleTestとか)を入れると、OSが勝手にOracleになるので、次へ
- メモリーサイズを任意の値で設定(4G以上あるとさくさく)し、次へ
- ハードディスクの設定で「仮想ハードディスクを作成する」を選択し、任意のサイズで作成する(データベース入れるので40GB程度は欲しい)
- 仮想ハードディスクの作成では、全てデフォルトのまま次へ(可変サイズ/固定サイズはどちらでも良い)
- 「参考:VirtualBoxでOracle Linux 7.5をインストールする(だけのメモ)」の、「Oracle Linux」に従ってインストールを進める
詰まりそうなPOINTのTIPS
- 日本語入力がうまくできない場合は次の記事を参照「参考:Oracle Linux 7.4 デスクトップ上での日本語入力方法」
- プロキシ環境下で利用している場合
- アプリケーション→システムツール→設定→ネットワーク
- 手動の設定画面を開く
- HTTPプロキシ~Socksホストにproxyサーバの「
http://proxy.co.jp」の「proxy.co.jp」部分を入力する- ポート番号は各社様々であるが、80番、8080番、1080番、3128番などが使われることが多い
3. Oracle DBの導入
構築手順
ここからは、2で構築したOracle Linux上で環境構築を行う。
基本的には「参考:Oracle Linux7.5にOracle 12cR2をインストールする」を参考に構築する。
- Oracle Preinstall RPMを実行する
- Oracle Preinstall RPMは、OracleDBをインストールしやすくしてくれるソフトウェア(参考:Oracle Preinstall RPMは何をしているのか?)
$ yum install -y oracle-rdbms-server-12cR1-preinstall$ export LANG=C$ oracle-rdbms-server-12cR1-preinstall-verify- Oracle DBのインストール用のディレクトリ(俗にいうOracle homeディレクトリ)を作成する
$ mkdir -p /u01/app/oraInventory$ mkdir -p /u01/app/oracle$ mkdir /home/oracle/tmp- 必要に応じて
$ chmodや$ chownでディレクトリに所有者、アクセス権限を設定する。今回はすべてルートかつフルアクセス権限で行うため、以下の設定
$ chown -R root:root /u01/app/oracle$ chown -R root:root /u01/app/oraInventory$ chmod -R 775 /u01/app/oracle$ chmod -R 775 /u01/app/oraInventory$ ls -l /u01/app/を実行し、各権限を確認drwxrwxrwx. 5 root root 89 4月 24 18:21 oraInventory drwxrwxrwx. 10 root root 4096 4月 24 18:29 oracle
- Oracleにアクセスする
- Oracle Database 12c Release 2(俗にいうOracleDB 12cR2)のLinux x86-64の「See All」を押下
- ライセンス同意を求められたら、ページ上部の「ライセンスに同意する」にチェック
- 「linuxx64_12201_database.zip」を押下し、ダウンロードする
- ダウンロードした「linuxx64_12201_database.zip」を解凍し、インストールをする
- ダウンロードフォルダ下で、
$ unzip linuxx64_12201_database.zipを実行する- 回答したdatabaseフォルダ下にrunInstallerがあるので、databaseフォルダ下で
$ ./runInstallerを実行する(通常のexeファイルの実行と同じ実行の仕方)- 「参考:Oracle Linux7.5にOracle 12cR2をインストールする」の「Oracle インストール」に従ってインストールを進める
※今回作成するOracleDBには、Oracle Linuxログインユーザが触れられれば良いので、「インベントリの作成」及び「権限のあるオペレーション・システム・グループ」については、すべてOracle Linuxへログインしているユーザ(が所属するグループ)を選択する。グループについては、デフォルトでユーザIDと同一名称のグループが作成されている。
詰まりそうなPOINTのTIPS
- yumのプロキシ突破について、/etc/yum.confファイルの一番下に
proxy=http://proxy.xxx.xxx:ppを追記する- スワップサイズでワーニングが出た場合は、以下コマンドを実施
- 参考:Oracle Database 12cのインストール中にスワップ・サイズの警告が発生した場合
$ dd if=/dev/zero of=/var/swpfile bs=1M count=2048$ mkswap /var/swpfile$ swapon /var/swpfile$ free -m- インストーる中に修正スクリプトを促すメッセージが出た場合は、ルートユーザに移行して、修正スクリプトを実行する
$ su -$ cd /tmp/CVU_XXXXXXXX←警告メッセージ中に記載$ ./runfixup.sh4. データベースの作成
構築手順
ここからは、3でインストールしたOracle 12cR2上にデータベースを作成する。基本的には「参考:Oracle Linux7.5にOracle 12cR2をインストールする」のデータベース作成以降を参考に構築する。
- 環境変数の修正のために、
.bash_profileに以下を追記する(通常ログインユーザフォルダ直下に存在する)export TMPDIR=$HOME/tmp export TEMP=$HOME/tmp export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:${PATH}:PATH=$ORACLE_HOME/sqldeveloper/sqldeveloper/bin: export LD_LIBRARY_PATH=$ORACLE_HOME/lib export NLS_LANG=JAPANESE_JAPAN.UTF8 export LANG=ja_JP.UTF-8 export ORACLE_SID=testdb
環境変数の設定を反映させる
$ source .bash_profile$ sudo reboot念のためリブート
$ dbcaを実行し、データベース作成画面をGUIで起動「参考:Oracle Linux7.5にOracle 12cR2をインストールする」の「データベース作成」に従ってデータベースを作成する
※作成する際に入力した以下は控えておくとよい
- SID : testdb
- リスナー名 : LISTENER
- リスナー・ポート : 1521
5. Oracle DBのセットアップ
- sqlplusを起動し、データベースを起動
$ sqlplus / as sysdbaでシステムユーザで実行SQL> show userの結果はSYSであるはずSQL> startupでデータベースが起動する以下より、すべてsqlplusにSYSでログインした状態で行う
・ユーザの作成 SQL> create user username identified by password; ・テーブルスペースの作成 SQL> create tablespace TEST_TBS datafile '/u01/app/oracle/oradata/testdb/test01.dbf' size 2G autoextend off; ・一時領域テーブルスペースの作成 SQL> create temporary tablespace TEST_TMP tempfile '/u01/app/oracle/oradata/testdb/testtmp01.dbf' size 2G autoextend off; ・user権限の設定(作成したテーブルスペースにuser権限を割り当てる) SQL> alter user username default tablespace TEST_TBS temporary tablespace TEST_TMP; ・user権限の設定(接続権限、CRUD権限の追加) SQL> grant connect, resource to username ・表領域の無制限割り当て SQL> alter user username quota unlimited on TEST_TBS ; ・作成したユーザでアクセス可能であるかを確認 下記のSQLが実行できればOK SQL> connect username/password SQL> show user USERNAME
- 外部アプリケーションからアクセス可能にするために、listener.oraを下記の通り書き換える(HOST名称については、Oracle Linuxをインストール時に決定した名称)
$ cat /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/listener.ora /u01/app/oracle/product/12.2.0/dbhome_1/network/admin listener.ora SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (ORACLE_HOME = /u01/app/oracle/product/12.2.0/dbhome_1) (SID_NAME = testdb) (SERVICE_NAME = testdb) ) ) LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oracle12test)(PORT = 1521)) ) ADR_BASE_LISTENER = /u01/app/oracleリスナーを立ち上げる
$ lsnrctl start
- 今回はクライアントからのアクセスも同OSから行うため、transnames.oraも下記の通り書き換える(HOST名称については以下略)
LISTENER_TESTDB = (ADDRESS = (PROTOCOL = TCP)(HOST = oracle12test)(PORT = 1521)) TESTDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oracle12test)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = testdb) ) )※listener.oraは、サーバ側(OracleDBをインストールした端末)に配置する、ネットワーク設定ファイル。サーバが受け取った通信を、どのデータベースに飛ばすか設定する
※transnames.oraは、クライアント側に配置する、ネットワーク設定ファイル。どのサーバのどのポートに、どういったプロトコルで接続するかを設定する
6. 動作確認
サンプルデータ
「参考:底辺過ぎてちょっとビビる」を参考に、ソースコードを作成しました。
まずはsqlplusに、5で作成したユーザでログインする。
$ sqlplus / as sysdba SQL> connect username/password SQL> show user USERNAMEsqlplusにログインした状態で、テーブルを作成する。
SQL> CREATE TABLE username.MEMBER (CODE varchar2 (10) NOT NULL, NAME varchar2 (10) NOT NULL, UPDATE_YMD varchar2 (8) NULL) SQL> ALTER TABLE username.MEMBER ADD PRIMARY KEY (CODE, NAME); SQL> commit;sqlplusにログインした状態で、サンプルデータをインサートする。
insert into username.MEMBER( CODE, NAME, UPDATE_YMD ) values ( '0000000000', 'aaaaaaaaaa', '20190101' ); insert into username.MEMBER( CODE, NAME, UPDATE_YMD ) values ( '1111111111', 'bbbbbbbbbb', '20190101' ); commit;sqlplusからログアウトする。
ソースコード作成
以下のソースコードを記載する。
test_p.pc#include "stdio.h" #include "stdlib.h" #include "string.h" /* SQLアクセス用定数(テスト用のためハードコーディング)*/ #define ORAUSER "username" #define ORAPASSWD "password" #define ORASYSID_T "testdb" /* フェッチ時マックス件数マクロ定義 */ #define MAX 100 /* SQLアクセス用変数(いわゆるホスト変数)宣言部 */ /* "h_"始まりの変数はselectに利用 */ EXEC SQL BEGIN DECLARE SECTION; varchar username[20]; varchar password[20]; varchar systemid[20]; char h_code[MAX][10]; char h_name[MAX][10]; EXEC SQL END DECLARE SECTION; /* ProCプリコンパイラ用ヘッダファイル宣言 */ EXEC SQL INCLUDE sqlca.h; /******************************/ /* ここからメイン関数 */ /* メイン関数内での流れ */ /* 1.変数定義(ホスト変数についてはグローバル定義) */ /* 2.値の初期化 */ /* 3.DBコネクト */ /* 4.select文の発行 */ /* 5.カーソルオープン */ /* 6.フェッチ実行 */ /* 7.カーソルクローズ */ /* 8.DB切断(コミット) */ /******************************/ int main(int argc, char *argv[]) { /* フェッチ時のカーソルループ用変数 */ int i; /* ホスト変数初期化 */ memset(&username, 0x00, sizeof(username)); memset(&password, 0x00, sizeof(password)); memset(&systemid, 0x00, sizeof(systemid)); memset(&h_code, 0x00, sizeof(h_code)); memset(&h_name, 0x00, sizeof(h_name)); /* oracleへの接続(SQLアクセス用変数に定数をセット) */ strcpy(username.arr, ORAUSER); username.len = strlen(username.arr); strcpy(password.arr, ORAPASSWD); password.len = strlen(password.arr); strcpy(systemid.arr, ORASYSID_T); systemid.len = strlen(systemid.arr); /* 例外宣言→errorptへ飛ぶ */ EXEC SQL WHENEVER SQLERROR GOTO errorpt; printf("user: %s, password: %s 接続開始します\n", username.arr,password.arr); /* 接続 */ EXEC SQL CONNECT :username IDENTIFIED BY :password AT :systemid; printf("%s 接続成功しました\n",systemid.arr); printf("system: %s 検索を開始します\n", systemid.arr); /* カーソル宣言(selectの場合のsql発行はここ) */ EXEC SQL AT :systemid DECLARE cursor CURSOR FOR SELECT CODE, NAME FROM MEMBER WHERE UPDATE_YMD > 20190101; printf("検索完了しました\n"); printf("カーソルオープンします\n"); /* カーソルオープン */ EXEC SQL OPEN cursor; printf("カーソルオープンしました\n\n"); /* データ取り出し(いわゆるフェッチ) */ EXEC SQL FETCH cursor INTO :h_code,:h_name; /* 値が入ってない場合は抜ける */ for(i=0;i<MAX;i++){ if(0 == strlen(h_code[i])){ printf("\n"); break; }else{ printf("%s,%s\n", h_code[i],h_name[i]); } } printf("フェッチ完了しました\n"); /* カーソルクローズ */ EXEC SQL CLOSE cursor; printf("カーソルクローズしました\n"); /* commitと書いているが、切断も行っている */ /* select以外の場合、これを書かないとrollbackされる */ /* selectではカーソルクローズで切断されるため不要 */ /* EXEC SQL COMMIT WORK RELEASE; */ return 0; /* error時の処理 */ errorpt: printf("\n\n%-79s \n",sqlca.sqlerrm.sqlerrmc); EXEC SQL WHENEVER SQLERROR CONTINUE; }コンパイル
- まずはプリコンパイル(pcファイルをcファイルにする)
$ proc iname=test_p oname=test_p.c sqlcheck=full
- 実行することで、
test_p.cが生成される- inameの拡張子は書いても書かなくてもよい
- onameは書かない場合inputと同一名称(拡張子は"c")となる
- sqlcheck=fullオプションで、この時点で静的構文解析を行う
- オブジェクトファイルを生成する
$ gcc -c test_p.c -I $ORACLE_HOME/precomp/public
- 実行することで、
test_p.oが生成される- 4で設定した環境変数"$ORACLE_HOME"下に、precomp/publicフォルダが存在し、pro*c用のsqlcaヘッダファイルが存在する
- "-I"オプションは、ヘッダを追加するオプション
- 実行ファイル作成
$ gcc -o test_p test_p.o -L$ORACLE_HOME/lib -lclntsh
- 実行することで、
test_pが生成される- 4で設定した環境変数"$ORACLE_HOME"下に、libフォルダが存在し、pro*c用のライブラリ群が存在する
- "-L"オプションは、ライブラリを追加するオプション
実行
- 実行形式ファイルなので、
$ ./test_pで実行する実行結果
$ ./test_p user: username, password: password接続開始します testdb 接続成功しました system: testdb 検索を開始します 検索完了しました カーソルオープンします カーソルオープンしました 0000000000,aaaaaaaaaa 1111111111,bbbbbbbbbb フェッチ完了しました カーソルクローズしました詰まりそうなPOINTのTIPS
- pcコンパイルにてライブラリ参照ができないエラー発生
pcのコンパイルの時点で、複数のライブラリが呼べないような以下のようなエラーが発生
行0、列0でエラーが発生しました。ファイルtest_p.pc PCC-F-02102, Cプリプロセッサ処理を実行中に致命エラーが発生しました。 行33、列11でエラーが発生しました。ファイル/usr/include/stdio.h 33 # include <stddef.h> 33 ..........1 33 PCC-S-02015, 挿入ファイルをオープンできません。 行15、列10でエラーが発生しました。ファイル/usr/include/_G_config.h 15 #include <stddef.h> 15 .........1 15 PCC-S-02015, 挿入ファイルをオープンできません。 行51、列11でエラーが発生しました。ファイル/usr/include/wchar.h 51 # include <stddef.h> 51 ..........1 51 PCC-S-02015, 挿入ファイルをオープンできません。 行50、列10でエラーが発生しました。ファイル/usr/include/libio.h 50 #include <stdarg.h> 50 .........1 50 PCC-S-02015, 挿入ファイルをオープンできません。 行307、列3でエラーが発生しました。ファイル/usr/include/libio.h 307 size_t __pad5; 307 ..1 307 PCC-S-02201, 記号"size_t"が見つかりました。 次のうちの1つが入るとき:環境によっては、各ヘッダファイルの配置場所が、エラーメッセージ通りの
/usr/include/下に無いことがある。ため、設定ファイルであるpcscfg.cfgにリンクを追加する必要がある。
- 設定ファイルを検索
$ find / -name pcscfg.cfg
/u01/app/oracle/product/12.2.0/dbhome_1/precomp/admin/pcscfg.cfg- sys_includeに、実際にヘッダファイルが存在するパスを追記する(私の場合は
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h)pcscfg.cfg... sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include,/usr/lib/gcc/x86_64-redhat-linux/4.4.7/include,/usr/lib/gcc/x86_64-redhat-linux/4.4.4/include,/usr/lib64/gcc/x86_64-suse-linux/4.8/include,/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/) ...
- 投稿日:2019-05-07T07:38:02+09:00
【環境構築】OracleDB×Pro*C【今更】
はじめに
本記事は、個人開発(勉強)環境として、Oracle環境を導入する手順まとめです。記事を書こうと思った理由は、最新の記事がどこにも見当たらず、非常に困ったため。需要あるか分かりませんが、同じような状況の同志と、今後の自分のために。
「クラウドやりたい!」、「Webデザイナーやりたい!」という人も多いと思いますが、(私みたいに)業務上必要なシーンがくるやもしれません。
記事の構成としては以下の通りです。1については、興味ない人は読み飛ばしてください。
- 昨今のOracle
- Oracle Linux環境の構築
- Oracle DBの導入
- データベースの作成
- Oracle DBのセットアップ
- 動作確認(追記予定)
なぜLinuxかというと、今回はC言語からPro*Cを用いてDatabaseを利用します。WindowsにC言語のコンパイル環境を導入するよりもLinux構築のほうが(個人的に)容易なので、今回はOracle Linuxを選定しました。なぜOracle Linuxを選定したかについては下記参照。
- 参考:勉強の為に、LinuxにOracleをインストールしたいと思っています。CentOSかUbuntuで迷っています。。。
- ここでは、Linuxの系譜として、DebianとRHELがあり、RHEL系列に構築するほうが良いことが述べられています
- 参考:Oracle Linux 出典: フリー百科事典『ウィキペディア(Wikipedia)』
- ここでは、Oracle LinuxがRHEL系列であることが述べられています
また当記事については、先人の良記事を利用して環境構築するため、
基本はサボりますリンク多めですがご了承ください。リンク先で触れられていない部分については、当記事で追記しています。最終的な目標環境は以下の通り。
Windows OS (各個人のバージョン) ┗ VirtualBox (6.0.6) ┗ Oracle Linux (7.5.0.0.0) ┗ C言語実行環境 (gccコンパイル環境) ┗ Oracle Database (12c Release 2)1. 昨今のOracle
Oracle Javaをはじめ、Oracleについては昨今いろいろ言われていますが、Oracle DBを個人で利用するくらいならまだ無償で利用可能。
その辺の話はあまり詳しくないので参考いくつか載せておきます。
- 参考:Javaの有償化問題、Java8のサポート終了問題について、2019年1月以降どうしたらいいか
- 参考:2019年にJavaを利用している人は全員理解すべきことを説明してみる
- 参考:Oracle Java 有償化。その現状と企業の今後の対策について調査報告。
上記記事ではOracle DBについては触れられてはいませんが、オンプレのパッケージ商品を販売したり、クラウドに注力したりと、そのうち個人利用ですらサブスクリプション課金になりそうな勢いですね。
2. Oracle Linux環境の構築
構築手順
基本的には、「参考:VirtualBoxでOracle Linux 7.5をインストールする(だけのメモ)」を参考に構築する。
- Oracleにアクセスする
- Oracleユーザを作成する。住所やメールアドレスなど入力するが、個人でも会社のでも問題ない
- 作成したユーザIDでログインすると、検索ボックスがあるため、「Oracle Linux 7.5.0.0.0」と入力し「Search」ボタンを押下する
- 「DLP:Oracle Linux 7.5.0.0.0 ( Oracle Linux ) 」を押下すると、カートに追加される
- 右上の「Checkout」を押下する
- カートのSelected Softwareに「Oracle Linux7.5.0.0.0」が入っていることが確認出来たら、Platforms/Languagesを「x86 64bit」にして「Continue」ボタンを押下する
- 「I accept the terms in the license agreement」という同意書的な文章が出てきた場合、「I accept the terms in the license agreement」にチェックをして「Continue」ボタンを押下する
- 「V975367-01.iso Oracle Linux Release 7 Update 5 for x86(64 bit), 4.1GB」以外のチェックをすべて外して、「Download」ボタンを押下し、ダウンロードする
- 「参考:Windows7環境なのにdocker入れて開発することになった話【①環境設定編】」の「1.VirtualBoxのインストール」を参考にViertualboxをインストールする
- Oracle Linuxをイメージをマウントする
- VM VirtualBoxを起動する。
- 「新規(N)」をクリック
- 名前に「Oracle」っぽい名前(OracleVMとかOracleTestとか)を入れると、OSが勝手にOracleになるので、次へ
- メモリーサイズを任意の値で設定(4G以上あるとさくさく)し、次へ
- ハードディスクの設定で「仮想ハードディスクを作成する」を選択し、任意のサイズで作成する(データベース入れるので40GB程度は欲しい)
- 仮想ハードディスクの作成では、全てデフォルトのまま次へ(可変サイズ/固定サイズはどちらでも良い)
- 「参考:VirtualBoxでOracle Linux 7.5をインストールする(だけのメモ)」の、「Oracle Linux」に従ってインストールを進める
詰まりそうなPOINTのTIPS
- 日本語入力がうまくできない場合は次の記事を参照「参考:Oracle Linux 7.4 デスクトップ上での日本語入力方法」
- プロキシ環境下で利用している場合
- アプリケーション→システムツール→設定→ネットワーク
- 手動の設定画面を開く
- HTTPプロキシ~Socksホストにproxyサーバの「
http://proxy.co.jp」の「proxy.co.jp」部分を入力する- ポート番号は各社様々であるが、80番、8080番、1080番、3128番などが使われることが多い
3. Oracle DBの導入
構築手順
ここからは、2で構築したOracle Linux上で環境構築を行う。
基本的には「参考:Oracle Linux7.5にOracle 12cR2をインストールする」を参考に構築する。
- Oracle Preinstall RPMを実行する
- Oracle Preinstall RPMは、OracleDBをインストールしやすくしてくれるソフトウェア(参考:Oracle Preinstall RPMは何をしているのか?)
$ yum install -y oracle-rdbms-server-12cR1-preinstall$ export LANG=C$ oracle-rdbms-server-12cR1-preinstall-verify- Oracle DBのインストール用のディレクトリ(俗にいうOracle homeディレクトリ)を作成する
$ mkdir -p /u01/app/oraInventory$ mkdir -p /u01/app/oracle$ mkdir /home/oracle/tmp- 必要に応じて
$ chmodや$ chownでディレクトリに所有者、アクセス権限を設定する。今回はすべてルートかつフルアクセス権限で行うため、以下の設定
$ chown -R root:root /u01/app/oracle$ chown -R root:root /u01/app/oraInventory$ chmod -R 775 /u01/app/oracle$ chmod -R 775 /u01/app/oraInventory$ ls -l /u01/app/を実行し、各権限を確認drwxrwxrwx. 5 root root 89 4月 24 18:21 oraInventory drwxrwxrwx. 10 root root 4096 4月 24 18:29 oracle
- Oracleにアクセスする
- Oracle Database 12c Release 2(俗にいうOracleDB 12cR2)のLinux x86-64の「See All」を押下
- ライセンス同意を求められたら、ページ上部の「ライセンスに同意する」にチェック
- 「linuxx64_12201_database.zip」を押下し、ダウンロードする
- ダウンロードした「linuxx64_12201_database.zip」を解凍し、インストールをする
- ダウンロードフォルダ下で、
$ unzip linuxx64_12201_database.zipを実行する- 回答したdatabaseフォルダ下にrunInstallerがあるので、databaseフォルダ下で
$ ./runInstallerを実行する(通常のexeファイルの実行と同じ実行の仕方)- 「参考:Oracle Linux7.5にOracle 12cR2をインストールする」の「Oracle インストール」に従ってインストールを進める
※今回作成するOracleDBには、Oracle Linuxログインユーザが触れられれば良いので、「インベントリの作成」及び「権限のあるオペレーション・システム・グループ」については、すべてOracle Linuxへログインしているユーザ(が所属するグループ)を選択する。グループについては、デフォルトでユーザIDと同一名称のグループが作成されている。
詰まりそうなPOINTのTIPS
- yumのプロキシ突破について、/etc/yum.confファイルの一番下に
proxy=http://proxy.xxx.xxx:ppを追記する- スワップサイズでワーニングが出た場合は、以下コマンドを実施
- 参考:Oracle Database 12cのインストール中にスワップ・サイズの警告が発生した場合
$ dd if=/dev/zero of=/var/swpfile bs=1M count=2048$ mkswap /var/swpfile$ swapon /var/swpfile$ free -m- インストーる中に修正スクリプトを促すメッセージが出た場合は、ルートユーザに移行して、修正スクリプトを実行する
$ su -$ cd /tmp/CVU_XXXXXXXX←警告メッセージ中に記載$ ./runfixup.sh4. データベースの作成
構築手順
ここからは、3でインストールしたOracle 12cR2上にデータベースを作成する。基本的には「参考:Oracle Linux7.5にOracle 12cR2をインストールする」のデータベース作成以降を参考に構築する。
- 環境変数の修正のために、
.bash_profileに以下を追記する(通常ログインユーザフォルダ直下に存在する)export TMPDIR=$HOME/tmp export TEMP=$HOME/tmp export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:${PATH}:PATH=$ORACLE_HOME/sqldeveloper/sqldeveloper/bin: export LD_LIBRARY_PATH=$ORACLE_HOME/lib export NLS_LANG=JAPANESE_JAPAN.UTF8 export LANG=ja_JP.UTF-8 export ORACLE_SID=testdb
環境変数の設定を反映させる
$ source .bash_profile$ sudo reboot念のためリブート
$ dbcaを実行し、データベース作成画面をGUIで起動「参考:Oracle Linux7.5にOracle 12cR2をインストールする」の「データベース作成」に従ってデータベースを作成する
※作成する際に入力した以下は控えておくとよい
- SID : testdb
- リスナー名 : LISTENER
- リスナー・ポート : 1521
5. Oracle DBのセットアップ
- sqlplusを起動し、データベースを起動
$ sqlplus / as sysdbaでシステムユーザで実行SQL> show userの結果はSYSであるはずSQL> startupでデータベースが起動する以下より、すべてsqlplusにSYSでログインした状態で行う
・ユーザの作成 SQL> create user username identified by password; ・テーブルスペースの作成 SQL> create tablespace TEST_TBS datafile '/u01/app/oracle/oradata/testdb/test01.dbf' size 2G autoextend off; ・一時領域テーブルスペースの作成 SQL> create temporary tablespace TEST_TMP tempfile '/u01/app/oracle/oradata/testdb/testtmp01.dbf' size 2G autoextend off; ・user権限の設定(作成したテーブルスペースにuser権限を割り当てる) SQL> alter user username default tablespace TEST_TBS temporary tablespace TEST_TMP; ・user権限の設定(接続権限、CRUD権限の追加) SQL> grant connect, resource to username ・表領域の無制限割り当て SQL> alter user username quota unlimited on TEST_TBS ; ・作成したユーザでアクセス可能であるかを確認 下記のSQLが実行できればOK SQL> connect username/password SQL> show user USERNAME
- 外部アプリケーションからアクセス可能にするために、listener.oraを下記の通り書き換える(HOST名称については、Oracle Linuxをインストール時に決定した名称)
$ cat /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/listener.ora /u01/app/oracle/product/12.2.0/dbhome_1/network/admin listener.ora SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (ORACLE_HOME = /u01/app/oracle/product/12.2.0/dbhome_1) (SID_NAME = testdb) (SERVICE_NAME = testdb) ) ) LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oracle12test)(PORT = 1521)) ) ADR_BASE_LISTENER = /u01/app/oracleリスナーを立ち上げる
$ lsnrctl start
- 今回はクライアントからのアクセスも同OSから行うため、transnames.oraも下記の通り書き換える(HOST名称については以下略)
LISTENER_TESTDB = (ADDRESS = (PROTOCOL = TCP)(HOST = oracle12test)(PORT = 1521)) TESTDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oracle12test)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = testdb) ) )※listener.oraは、サーバ側(OracleDBをインストールした端末)に配置する、ネットワーク設定ファイル。サーバが受け取った通信を、どのデータベースに飛ばすか設定する
※transnames.oraは、クライアント側に配置する、ネットワーク設定ファイル。どのサーバのどのポートに、どういったプロトコルで接続するかを設定する
6. 動作確認
サンプルデータ
「参考:底辺過ぎてちょっとビビる」を参考に、ソースコードを作成しました。
まずはsqlplusに、5で作成したユーザでログインする。
$ sqlplus / as sysdba SQL> connect username/password SQL> show user USERNAMEsqlplusにログインした状態で、テーブルを作成する。
SQL> CREATE TABLE username.MEMBER (CODE varchar2 (10) NOT NULL, NAME varchar2 (10) NOT NULL, UPDATE_YMD varchar2 (8) NULL) SQL> ALTER TABLE username.MEMBER ADD PRIMARY KEY (CODE, NAME); SQL> commit;sqlplusにログインした状態で、サンプルデータをインサートする。
insert into username.MEMBER( CODE, NAME, UPDATE_YMD ) values ( '0000000000', 'aaaaaaaaaa', '20190101' ); insert into username.MEMBER( CODE, NAME, UPDATE_YMD ) values ( '1111111111', 'bbbbbbbbbb', '20190101' ); commit;sqlplusからログアウトする。
ソースコード作成
以下のソースコードを記載する。
test_p.pc#include "stdio.h" #include "stdlib.h" #include "string.h" /* SQLアクセス用定数(テスト用のためハードコーディング)*/ #define ORAUSER "username" #define ORAPASSWD "password" #define ORASYSID_T "testdb" /* フェッチ時マックス件数マクロ定義 */ #define MAX 100 /* SQLアクセス用変数(いわゆるホスト変数)宣言部 */ /* "h_"始まりの変数はselectに利用 */ EXEC SQL BEGIN DECLARE SECTION; varchar username[20]; varchar password[20]; varchar systemid[20]; char h_code[MAX][10]; char h_name[MAX][10]; EXEC SQL END DECLARE SECTION; /* ProCプリコンパイラ用ヘッダファイル宣言 */ EXEC SQL INCLUDE sqlca.h; /******************************/ /* ここからメイン関数 */ /* メイン関数内での流れ */ /* 1.変数定義(ホスト変数についてはグローバル定義) */ /* 2.値の初期化 */ /* 3.DBコネクト */ /* 4.select文の発行 */ /* 5.カーソルオープン */ /* 6.フェッチ実行 */ /* 7.カーソルクローズ */ /* 8.DB切断(コミット) */ /******************************/ int main(int argc, char *argv[]) { /* フェッチ時のカーソルループ用変数 */ int i; /* ホスト変数初期化 */ memset(&username, 0x00, sizeof(username)); memset(&password, 0x00, sizeof(password)); memset(&systemid, 0x00, sizeof(systemid)); memset(&h_code, 0x00, sizeof(h_code)); memset(&h_name, 0x00, sizeof(h_name)); /* oracleへの接続(SQLアクセス用変数に定数をセット) */ strcpy(username.arr, ORAUSER); username.len = strlen(username.arr); strcpy(password.arr, ORAPASSWD); password.len = strlen(password.arr); strcpy(systemid.arr, ORASYSID_T); systemid.len = strlen(systemid.arr); /* 例外宣言→errorptへ飛ぶ */ EXEC SQL WHENEVER SQLERROR GOTO errorpt; printf("user: %s, password: %s 接続開始します\n", username.arr,password.arr); /* 接続 */ EXEC SQL CONNECT :username IDENTIFIED BY :password AT :systemid; printf("%s 接続成功しました\n",systemid.arr); printf("system: %s 検索を開始します\n", systemid.arr); /* カーソル宣言(selectの場合のsql発行はここ) */ EXEC SQL AT :systemid DECLARE cursor CURSOR FOR SELECT CODE, NAME FROM MEMBER WHERE UPDATE_YMD > 20190101; printf("検索完了しました\n"); printf("カーソルオープンします\n"); /* カーソルオープン */ EXEC SQL OPEN cursor; printf("カーソルオープンしました\n\n"); /* データ取り出し(いわゆるフェッチ) */ EXEC SQL FETCH cursor INTO :h_code,:h_name; /* 値が入ってない場合は抜ける */ for(i=0;i<MAX;i++){ if(0 == strlen(h_code[i])){ printf("\n"); break; }else{ printf("%s,%s\n", h_code[i],h_name[i]); } } printf("フェッチ完了しました\n"); /* カーソルクローズ */ EXEC SQL CLOSE cursor; printf("カーソルクローズしました\n"); /* commitと書いているが、切断も行っている */ /* select以外の場合、これを書かないとrollbackされる */ /* selectではカーソルクローズで切断されるため不要 */ /* EXEC SQL COMMIT WORK RELEASE; */ return 0; /* error時の処理 */ errorpt: printf("\n\n%-79s \n",sqlca.sqlerrm.sqlerrmc); EXEC SQL WHENEVER SQLERROR CONTINUE; }コンパイル
- まずはプリコンパイル(pcファイルをcファイルにする)
$ proc iname=test_p oname=test_p.c sqlcheck=full
- 実行することで、
test_p.cが生成される- inameの拡張子は書いても書かなくてもよい
- onameは書かない場合inputと同一名称(拡張子は"c")となる
- sqlcheck=fullオプションで、この時点で静的構文解析を行う
- オブジェクトファイルを生成する
$ gcc -c test_p.c -I $ORACLE_HOME/precomp/public
- 実行することで、
test_p.oが生成される- 4で設定した環境変数"$ORACLE_HOME"下に、precomp/publicフォルダが存在し、pro*c用のsqlcaヘッダファイルが存在する
- "-I"オプションは、ヘッダを追加するオプション
- 実行ファイル作成
$ gcc -o test_p test_p.o -L$ORACLE_HOME/lib -lclntsh
- 実行することで、
test_pが生成される- 4で設定した環境変数"$ORACLE_HOME"下に、libフォルダが存在し、pro*c用のライブラリ群が存在する
- "-L"オプションは、ライブラリを追加するオプション
実行
- 実行形式ファイルなので、
$ ./test_pで実行する実行結果
$ ./test_p user: username, password: password接続開始します testdb 接続成功しました system: testdb 検索を開始します 検索完了しました カーソルオープンします カーソルオープンしました 0000000000,aaaaaaaaaa 1111111111,bbbbbbbbbb フェッチ完了しました カーソルクローズしました詰まりそうなPOINTのTIPS
- pcコンパイルにてライブラリ参照ができないエラー発生
pcのコンパイルの時点で、複数のライブラリが呼べないような以下のようなエラーが発生
行0、列0でエラーが発生しました。ファイルtest_p.pc PCC-F-02102, Cプリプロセッサ処理を実行中に致命エラーが発生しました。 行33、列11でエラーが発生しました。ファイル/usr/include/stdio.h 33 # include <stddef.h> 33 ..........1 33 PCC-S-02015, 挿入ファイルをオープンできません。 行15、列10でエラーが発生しました。ファイル/usr/include/_G_config.h 15 #include <stddef.h> 15 .........1 15 PCC-S-02015, 挿入ファイルをオープンできません。 行51、列11でエラーが発生しました。ファイル/usr/include/wchar.h 51 # include <stddef.h> 51 ..........1 51 PCC-S-02015, 挿入ファイルをオープンできません。 行50、列10でエラーが発生しました。ファイル/usr/include/libio.h 50 #include <stdarg.h> 50 .........1 50 PCC-S-02015, 挿入ファイルをオープンできません。 行307、列3でエラーが発生しました。ファイル/usr/include/libio.h 307 size_t __pad5; 307 ..1 307 PCC-S-02201, 記号"size_t"が見つかりました。 次のうちの1つが入るとき:環境によっては、各ヘッダファイルの配置場所が、エラーメッセージ通りの
/usr/include/下に無いことがある。ため、設定ファイルであるpcscfg.cfgにリンクを追加する必要がある。
- 設定ファイルを検索
$ find / -name pcscfg.cfg
/u01/app/oracle/product/12.2.0/dbhome_1/precomp/admin/pcscfg.cfg- sys_includeに、実際にヘッダファイルが存在するパスを追記する(私の場合は
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h)pcscfg.cfg... sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include,/usr/lib/gcc/x86_64-redhat-linux/4.4.7/include,/usr/lib/gcc/x86_64-redhat-linux/4.4.4/include,/usr/lib64/gcc/x86_64-suse-linux/4.8/include,/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/) ...
- 投稿日:2019-05-07T03:23:10+09:00
Linuxにおけるshellについて
Shellとは
Linuxへのインターフェイスで、terminalがそれにあたる。Command lineインターフェイスはGUIよりもよりパワフル。サーバー管理に使っているLinuxなどは、GUIがなかったり、SSHなどで接続できる点がメリット。
The Promptではいくつかの情報を提示している。どのサーバーであったりとか、ユーザー、どのディレクトリーにいるのかなど。
[sebec@linuxsvr ~]$ [root@linuxsvr:~]#二つ目のroot/superuserはsystem管理者に限定されているのが常で、アプリのインストールや起動、停止などで必須となる場合が多い。
~(tilda) はいくつかの情報を包括している。
~sebec = /home/sebec
~pat = /home.pat
~root = /root
~ftp = /srv/ftpLinux commandについて
大文字小文字が関係あるケースセンセティブ。基本的には小文字。
ls
cd
pwd
cat
echo - 引数を画面に表示
man - onlineマニュアルを表示 (man ls)
exit - shellを終了、もしくはセッションを終了
clear - 画面を白紙にman commandを参考に見てみる
Linuxのterminalで下記をタイプ$ man ls[enter] ページを一行ずつスクロールする
[space] ページごとをスクロールする
[g] 一番最初に戻る
[G] 一番下に行く
[q] 閉じたいとき環境の引数について
PATHは環境の引数に大きく関係する。commandのコントロールを制御するもので、多くのディレクトリーがメモされている。$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/sebecでパスに書いてあるディレクトリー情報が表示される。左から右にcomamndが読まれていく。どのコマンドがどこのディレクトリーにあるかなどはwhichで検索できる。
$ which cat /usr/bin/cat $ which tac /usr/bin/taclinuxのコマンドを知るには実際に、そのディレクトリーを見にいくことで学べることがある。例えば、/bin内には下記のcommandがある
$ ls /bin | dd ksh pax stty bash df launchctl ps sync cat echo link pwd tcsh chmod ed ln rm test cp expr ls rmdir unlink csh hostname mkdir sh wait4path date kill mv sleep zsh...ここに書いてあるのは、一部だが、実際のlinuxの/binには大量のコマンドがある。更に細かいcommand情報は
man -k SEARCH-TERMで調べられる。もしくは--helpか-hで見られる。ディレクトリーでshellる
.今いるディレクトリー
..親ディレクトリー
cd -一つ前のディレクトリーに戻る
/ディレクトリー仕切り
echo $PATHでcommandのパスが記載されているが、commandをフルパスで書いて実行することもできるし、指定のディレクトリーにいれば、$PATHに書かれていなくても、./commandで実行できる。
mkdir [-p]ディレクトリーを作る -pはparentで複数フォルダを作ることができる。
rmdir [-p]ディレクトリーを削除
rm -rfディレクトリーを強制削除
ls -lをdecodeしてみるls -l drwxr-xr-x 3 sebec staff 96 May 5 22:56 VirtualBox VMs左から
Permission drwxr-xr-x
Link数 3
Owner名 sebec
Group名 staff
Bytes 96
最終変更日時 May 5 22:56
ファイル名 VirtualBox VMsPermissionの読み方はSSHの設定、秘密鍵・公開鍵の登録方法を参照
.filenameドットから始まるのは隠れファイル。ls -aでみることが可能。ls -l -aで更に詳細が見られる。-aなどのオプションは順不同。ls -laと繋げても同じ表示になる。
ls -Fでファイルタイプ別で表示できる。
/ ディレクトリー
@ リンク
* 実行可能シンボリックリンクは実際のファイルやディレクトリーにリンクしており、リンク先のファイルがあるかのように使える。要するにshortcutとして使える。
ls -lat、ls -latrなどで時間別にソートできる。
-tは時間別に、-rは順序逆にして確認できる。
tree -dでリストをビジュアルで見られる。
tree -Cはカラーごとに見られる。treeのコマンドが入っていない場合は、
suでパスワードを入力しrootで
yum -y install treeでインストールできます。今後、ファイル名を作成するときはなるべくスペース[ ]を避けること。なるべく
-や_やcamelCaseなどにする。もし、スペースが入ってしまっている場合は、""や''で囲うか()を直前に使う必要がある。