WebShop ショッピングサイト販売 Webサイト制作などお客様のインターネットショッピングサイトシステムを支援する企業です。

Webショッピング

ショッピングサイトを運営ソリューションサービス
企業情報
技術情報

有限会社ビットデシジョン
FAX 093-681-0086
メニューMail Mail
BBS7.COM
MENU RNDNEXT

PC-UNIX [ FreeBSD / Linux ]
FreeBSD-4.10 PHP-4.3.10+GD インストール

画面-1

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
画面-1
画面-2
画面-2
ついでですから、一気におまけGDライブラリーを使ったグラフを作成しました。
Web・DB数値データグラフ管理(Apache+PHP+GD+MySQL)New
これについては次回掲載したいと思います。

FreeBSD-5.3 SMP(Dual−CPU)化

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インチラックサーバ
FreeBSD-5.3  内部外観写真公開

 (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
画面-1
画面-2
画面-2

FreeBSD-4.0 Timerプログラミング

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

注意 : このプログラムは個人の責任において御試用して下さい。
私は一切の責任をとらないものとします。