|
PC-UNIX [ FreeBSD / Linux ]
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
PHPの中でGDを使うにはPHPをインストールする前にGDライブラリー をインストールしなくてはなりません。 FTTHを導入しましたので Portsを利用しています、 Portsのインストールを行います。 |
|
FreeBSD 4.10 PHP+GDインストール手順 Note: あなたのシステムに/usr/ports 以下のディレクトリがなければ, portsが インストールされていません ログインを行います、作業はROOTの権限で行ってください。 GDライブライリーの使い方はPHPとLINKを張っていますので参照ください。New GDライブライリーは 2.0.28 2種類ありますので、あなたの必要とするPORTVERSIONを インストールしてください。今回はGDをインストールしました。 /usr/ports/graphics/gd と /usr/ports/japanese/gdは 日本語対応となっています。 # cd /usr/ports/graphics/gd # cd /usr/ports/japanese/gd # make # make install clean GDが正常にインストールされれば、次にPHPをインストールします。 # cd /usr/ports/lang/php4 # make install clean # cd /usr/ports/lang/php4-extensions # make install clean エラー無く終了すればApacheにPHPが追加されています。 # cd /usr/local/etc/apacheへ移動しhttpd.confを見てみますと。 LoadModule php4_module libexec/apache/libphp4.so AddModule mod_php4.c 上2行追加となっていますので PHP4 は追加されました。 次に/usr/local/etc/rc.dのapache.shで再起動します、 /usr/local/etc/rc.d/apache.sh stop /usr/local/etc/rc.d/apache.sh start を行えばPHPは動作しているはずです、確認のため /usr/local/www/data/test.phpをeditします。以下php.info <?php phpinfo(); ?> ブラウザでtest.phpを起動しますと以下の様に画面-1,画面-2 表示されます。 ![]() 画面-1 ![]() 画面-2 Web・DB数値データグラフ管理(Apache+PHP+GD+MySQL)New これについては次回掲載したいと思います。 |
| 1)FreeBSD-5.3稼動中PCスペック 2005/04/18 |
| 名 称 | 内 容 | 備考 |
| CPU | PentiumV600MHz×2(Dual) | |
| RAMメモリ | 256MB (DIMM 128MB×2) | |
| CASEケース | SVECFD7130-DP 300W 4U FA19インチラック収納 | |
| M/B | TYAN製 S1832DL Tiger100 | |
| Video | ATI 3D Rage Pro Turbo AGP 8MB | |
| SCSI I/F | Adaptec2930 20MB/Sec | |
| HDD(RVC 内蔵) | IDE(IBM) 15GB(system)×1, 30GB(data)×1 | |
| NetWorkCard | Intel PILA8460B Management Adaptor | |
| FDD | 2モード・ドライブ | |
| メンテナンスKey | 108Key | |
| メンテナンス(CRT) | VGAモード |
|
2)ちなみにFreeBSD-5.3をインストールしているサーバ関連 (1)apache+mod_ssl-1.3.33+2.8.22、samba-2.2.12 イントラネットで運用中です |
|
3)FreeBSD Symmetric Multi-Processor Kernl (Symmetric Multi-Processor Kernl) 4) FreeBSD-5.3 インストール 19インチラックサーバ (1)カスタムカーネルの構築とインストール FreeBSD ハンドブックより Note: もし, あなたのシステムに/usr/src/sys 以下のディレクトリがなければ, カーネルのソースが インストールされていません. もっとも簡単な方法は (rootで) /stand/sysinstall を用いて以下のようにします. 設定(Configure) を選んでから 配布ファイル(Distribution) を選択し, src の中の sys をインストールしてください. つぎに, i386/confに移動して, GENERIC コンフィグレーションファイルをカーネルに与えたい名前にコピーしてください. たとえば: # cd /usr/src/sys/i386/conf # cp GENERIC MYKERNEL ← お好きな名称に変更 例:BSD01 慣習として, この名前はすべて大文字でつづられます. もし, いくつかの異なるハードウェアのFreeBSDマシンを扱うなら, この名前にホスト名を含めるとよいでしょう. ここでは, 例として MYKERNEL と呼ぶことにします. Note: この作業は root権限でおこなう必要があります. そうでなければ, permission deniedというエラーが出ます. では, MYKERNEL をあなたの好きなエディタで編集してください. もし, システムをインストールしたばかりならば, 利用できるエディタは viだけかもしれません. ここでは使い方 の説明はしませんが, 参考図書にあるような多くの本で詳しく説明 されていますので, そちらを参照してください. FreeBSD にはより簡単なエディタとして ``ee'' があります. 初心者の方であればこちらをエディタに選ぶとよいでしょう. まずファイルの最初の方のコメント行を編集し, あなたのコンフィグ レーションに合せて変更した点などを記述して GENERIC と区別がつくようにしておきましょう. もし SunOSや他の BSDオペレーティングシステムでカーネルの 再構築をしたことがあれば, このファイルはとても親しみやすいでしょう. しかし, DOSのようなその他の オペレーティングシステムしか知らない人から見れば, GENERIC コンフィグレーションファイルはとても なじみにくいものかもしれません. そのような場合は, コンフィグレーションファイル の節をゆっくりと注意深く読んでください. Note: 古いバージョンの FreeBSD からアップグレードを おこなう場合, 新しいカーネルソースを得た場所より新しいバージョンの config(8) を取ってくる必要があるかもしれません. これは /usr/src/usr.sbinにあります. したがってこれらのソースをダ ウンロードする必要があります. 次のコマンドを実行する前に (configを)作りインストールをしておいてください. (2)編集個所は61行目の様に追加するだけです 以下の1箇所です (SMPカーネルを有効にするためには、次の1個所を必要とします) FreeBSD-4.XXまでは、GENERIC内に以下の様にコメントアウト されていましたが、FreeBSD-5.XXでは 別ファイルで 「 SMP 」が存在します。 ただ単にカーネルの 再構築を行っても追加されませんでしたので 従来の様に追加してみました、また options APIC_IOが64行目に「device apic # I/O APIC」が存在しましたので 以下の行は追加していません。 #options APIC_IO # Symmetric (APIC) I/O
1 #
2 # GENERIC -- Generic kernel configuration file for FreeBSD/i386
3 #
4 # For more information on this file, please read the handbook section on
5 # Kernel Configuration Files:
6 #
7 # http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
8 #
9 # The handbook is also available locally in /usr/share/doc/handbook
10 # if you've installed the doc distribution, otherwise always see the
11 # FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
12 # latest information.
13 #
14 # An exhaustive list of options and more detailed explanations of the
15 # device lines is also present in the ../../conf/NOTES and NOTES files.
16 # If you are in doubt as to the purpose or necessity of a line, check first
17 # in NOTES.
18 #
19 # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.413.2.6.2.2 2004/10/24 18:02:52 scottl Exp $
20
21 machine i386
22 cpu I486_CPU
23 cpu I586_CPU
24 cpu I686_CPU
25 ident BSD01 ← GENERICをBSD01にした。
26
27 # To statically compile in device wiring instead of /boot/device.hints
28 #hints "GENERIC.hints" # Default places to look for devices.
29 #options SCHED_ULE # 5BSD scheduler
30 options SCHED_4BSD # 4BSD scheduler
31 options INET # InterNETworking
32 options INET6 # IPv6 communications protocols
33 options FFS # Berkeley Fast Filesystem
34 options SOFTUPDATES # Enable FFS soft updates support
35 options UFS_ACL # Support for access control lists
36 options UFS_DIRHASH # Improve performance on big directories
37 options MD_ROOT # MD is a potential root device
38 options NFSCLIENT # Network Filesystem Client
39 options NFSSERVER # Network Filesystem Server
40 options NFS_ROOT # NFS usable as /, requires NFSCLIENT
41 options MSDOSFS # MSDOS Filesystem
42 options CD9660 # ISO 9660 Filesystem
43 options PROCFS # Process filesystem (requires PSEUDOFS)
44 options PSEUDOFS # Pseudo-filesystem framework
45 options GEOM_GPT # GUID Partition Tables.
46 options COMPAT_43 # Compatible with BSD 4.3 [KEEP THIS!]
47 options COMPAT_FREEBSD4 # Compatible with FreeBSD4
48 options SCSI_DELAY=3000 # Delay (in ms) before probing SCSI
49 options KTRACE # ktrace(1) support
50 options SYSVSHM # SYSV-style shared memory
51 options SYSVMSG # SYSV-style message queues
52 options SYSVSEM # SYSV-style semaphores
53 options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
54 options KBD_INSTALL_CDEV # install a CDEV entry in /dev
55 options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
56 # output. Adds ~128k to driver.
57 options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
58 # output. Adds ~215k to driver.
59 options ADAPTIVE_GIANT # Giant mutex is adaptive.
60
61 options SMP # Symmetric MultiProcessor Kernel
62
63
64 device apic # I/O APIC ← FreeBSD-4.XXでは optionだった
65
66 # Bus support. Do not remove isa, even if you have no isa slots
67 device isa
68 device eisa
69 device pci
編集し終ったら、次のコマンドによってコンパイル, インストール を行って下さい。 # /usr/sbin/config BSD01 # cd ../compile/BSD01 ← 注意:不明ですがcompileのディレクトリが変わっていますのでBSD01はここに存在します。 # make depend # make # make install 新しいカーネルはルートディレクトリに /kernelという 名前でコピーされ、今までのカーネルは /kernel.old という名前へ変更されます。では、システムをシャットダウン、リブートして新しいカーネルを使って下さい。うまく行かない場合は、この章の終りの 問題が起きた場合には を参照して下さい。この章の新しいカーネルがブートしない場合のリカバリの方法を注意深く読んでおいて下さい。 (3)FreeBSD-5.3でTOPコマンドで、MAP(Duaul)CPU0(画面-1)、 CPU1(画面-2)が動作が確認されればOKです。 ![]() 画面-1 ![]() 画面-2 |
|
1)K&R-Cでプログラミング
あるHP Internet-Webサーバ・メンテナンスで更新のために夜中に転送していて、 何でこんなことをしているんだろうか? やっぱこれこそCPUにやってもらわないとね! Stimerを作っちゃいました。単なるTimerプログラムです。 |
|
→ 定期日付時間指定でプログラム&スクリプトをForkするプログラム(テキストファイル) → おまけサンプルbashスクリプト(FTPファイル転送)(テキストファイル) |
/********************************************************************************/
/* */
/* 著作権は放棄しません、自由に使用・改造・再配布可能です。 */
/* 改造版を再配布する際は、必ずファイル名を変更して、オリジナルを添付して */
/* 配布してください。 */
/* */
/* プログラム名 : 定期日付時間指定でプログラムをForkする */
/* 別のshスクリプトファイルでFTPファイル転送 */
/* ファイル名 : stimer.c */
/* 概要 : 自動で年月日時間 毎日/毎週 時間指定で */
/* パラメータ指定したプログラムを実行する。 */
/* */
/* 作成者 : S.Hata */
/* */
/* 適応装置 : FreeBSD & Linuxサーバ */
/* */
/* 変更履歴 : Make 2000/12/10 */
/* Ver Date 履歴(History) 氏名(Name) */
/* ---- -------- -------------------------------- ----------------- */
/* 0.1 00/12/12 新規作成 S.Hata */
/* 0.2 00/12/14 機能追加 毎時/毎週 S.Hata */
/* */
/********************************************************************************/
#include <stdio.h>
#include <time.h>
main(int argc, char *argv[])
{
int weeki;
int yeari,moni,mdayi;
int houi,mini,seci;
/********************************************************************************/
/* */
/* 処理 :パラメータのチェックと各種表示と説明 */
/* -o は年月日時分秒指定で1回のみ実効される */
/* -d は時分秒指定で毎日 指定時間に1回のみ実効される */
/* -w は時分秒指定で毎週 指定時間に1回のみ実効される */
/* */
/********************************************************************************/
if (( argc == 1 ) || ( argc < 6)) {
usage();
}
if (( argc == 2 ) && ( argv[1][0] == '-' ) && ( argv[1][1] == '?' )){
usage();
}
/********************************************************************************/
/* */
/* 処理 :パラメータはオプション -o のチェックと月日時分秒の範囲チェック */
/* -o は年月日時分秒指定で1回のみ実効される */
/* */
/********************************************************************************/
if (( argc == 9 ) && ( argv[1][0] =='-' ) &&
( argv[1][1] == 'o' || argv[1][1] =='O')){
/* fprintf( stdout, "No't loop day parameter \n");
fprintf(stdout,"%s \n",argv[1]);
fprintf(stdout,"%s \n",argv[2]);
fprintf(stdout,"%s \n",argv[3]);
fprintf(stdout,"%s \n",argv[4]);
fprintf(stdout,"%s \n",argv[5]);
fprintf(stdout,"%s \n",argv[6]);
fprintf(stdout,"%s \n",argv[7]);
fprintf(stdout,"%s \n",argv[8]);
*/
yeari = atoi(argv[2]);
moni = atoi(argv[3]);
mdayi = atoi(argv[4]);
houi = atoi(argv[5]);
mini = atoi(argv[6]);
seci = atoi(argv[7]);
if ((moni == 0 ) || (moni > 12 )){
fprintf(stdout,"\7err: month no't val\n");
exit(0);
}
if ((mdayi == 0 ) || (mdayi > 31 )){
fprintf(stdout,"\7err: day no't val\n");
exit(0);
}
if ( houi > 23 ){
fprintf(stdout,"\7err: hour no't val\n");
exit(0);
}
if (( mini > 59 ) || ( seci >59 )){
fprintf(stdout,"\7err: min & sec no't val\n");
exit(0);
}
for (;;){
time_t t = time(NULL);
struct tm *tp = localtime(&t);
char *s = asctime(tp);
/*
fprintf(stdout,"%04d/%02d/%02d %02d:%02d:%02d \n", 1900+tp->tm_year,1+tp->
tm_mon, tp->tm_mday, tp->tm_hour, tp->tm_min, tp->tm_sec);
*/
if (( yeari == 1900+tp->tm_year) && ( moni == 1+tp->tm_mon)
&& (mdayi == tp->tm_mday ) && (houi == tp->tm_hour)
&& ( mini == tp->tm_min) && ( seci == tp->tm_sec)){
execlp( argv[8], argv[8], NULL);
exit(0);
}
/********************************************************************************/
/* もっと クリティカル な時間にしたい人は以下usleep()とsleep(1)を置き換えてください */
/* 100/1000秒眠って待つ 100msec usleep(100) */
/* usleep(1000 * 1000); */
/* */
/********************************************************************************/
sleep(1);
}
}
/********************************************************************************/
/* */
/* 処理 :パラメータはオプション -d のチェックと時分秒の範囲チェック */
/* -d は時分秒指定で毎日 指定時間に1回のみ実効され終了するKillシグナルで停止 */
/* */
/********************************************************************************/
if(( argc == 6 ) && ( argv[1][0] =='-' ) &&
( argv[1][1] == 'd' || argv[1][1] == 'D')){
fprintf(stdout,"%s ",argv[1]);
fprintf(stdout,"%s:",argv[2]);
fprintf(stdout,"%s:",argv[3]);
fprintf(stdout,"%s ",argv[4]);
fprintf(stdout,"%s \n",argv[5]);
houi = atoi(argv[2]);
mini = atoi(argv[3]);
seci = atoi(argv[4]);
if ( houi > 23 ){
fprintf(stdout,"\7err: hour no't val\n");
exit(0);
}
if (( mini > 59 ) || ( seci >59 )){
fprintf(stdout,"\7err: min & sec no't val\n");
exit(0);
}
for (;;){
time_t t = time(NULL);
struct tm *tp = localtime(&t);
/* char *s = asctime(tp); */
fprintf(stdout,"%02d:%02d:%02d \n", tp->tm_hour,
tp->tm_min, tp->tm_sec);
if ((houi == tp->tm_hour) && ( mini == tp->tm_min) &&
( seci == tp->tm_sec)){
system( argv[5] );
}
/********************************************************************************/
/* もっと クリティカル な時間にしたい人は以下usleep()とsleep(1)を置き換えてください */
/* 100/1000秒眠って待つ 100msec usleep(100) */
/* usleep(1000 * 1000); */
/* */
/********************************************************************************/
sleep(1);
}
}
/********************************************************************************/
/* */
/* 処理 :パラメータはオプション -w 1,2,3,4,5,6,7 のチェックと時分秒の範囲チェック */
/* 対応順は1,2,3,4,5,6,7 日月火水木金土 */
/* -w は時分秒指定で毎週 指定時間に1回のみ実効され終了Killシグナルで終了する */
/* */
/********************************************************************************/
if (( argc == 7 ) && ( argv[1][0] =='-' ) &&
( argv[1][1] == 'w' || argv[1][1] =='W')){
fprintf(stdout,"%s ",argv[1]);
fprintf(stdout,"%s ",argv[2]);
fprintf(stdout,"%s:",argv[3]);
fprintf(stdout,"%s:",argv[4]);
fprintf(stdout,"%s ",argv[5]);
fprintf(stdout,"%s \n",argv[6]);
weeki = atoi(argv[2]);
houi = atoi(argv[3]);
mini = atoi(argv[4]);
seci = atoi(argv[5]);
if ( houi > 23 ){
fprintf(stdout,"\7err: hour no't val\n");
exit(0);
}
if (( mini > 59 ) || ( seci >59 )){
fprintf(stdout,"\7err: min & sec no't val\n");
exit(0);
}
if (( weeki <0 ) || ( weeki>8 )){
fprintf(stdout,"\7err: week-day no't val 1,2 3,4,5,6,7 \n");
exit(0);
}
for (;;){
time_t t = time(NULL);
struct tm *tp = localtime(&t);
/* char *s = asctime(tp);
fprintf(stdout,"%02d:%02d:%02d \n", tp->tm_hour, tp->tm_min, tp->tm_sec); */
if ((houi == tp->tm_hour) && ( mini == tp->tm_min)
&& ( seci == tp->tm_sec)){
system( argv[6] );
}
/********************************************************************************/
/* もっと クリティカル な時間にしたい人は以下usleep()とsleep(1)を置き換えてください */
/* 100/1000秒眠って待つ 100msec usleep(100) */
/* usleep(1000 * 1000); */
/* */
/********************************************************************************/
sleep(1);
}
}
}
usage()
{
fprintf(stdout,"\7Usage : stimer -o yyyy mm day hour min sec
fork-program\n");
fprintf(stdout," : -d hour min sec fork-program\n");
fprintf(stdout," : -w (1-7) hour min sec fork-program\n");
fprintf(stdout," : -w 1=Sunday - W 7=Satuday hour min sec
fork-program\n");
exit(0);
}
/* end of program eof */
|
|
さっそく遊んでみましょう。 cc -o stimer stimer.c でコンパイルが通ればOKです。 オブジェクトを cp stimer /usr/local/bin/stimer にコピーして、 stimer -o 2001 01 03 12 00 00 /pcusr/tmp/sh.ftp & で、 その時間になれば、sh.ftpが実行されます。 バックグランドジョブで動かしたければ >/dev/null & ログをとりたければファイルへ >/tmp/stimer.log |
| 注意 : | このプログラムは個人の責任において御試用して下さい。 私は一切の責任をとらないものとします。 |