====== 󥹥ȡˡ ======

Starbug1ϡSQLite3cgicgettexticonvѤƤޤ ѥ뤹뤿ˤϡgettextsqlite3cgicɬפǤ(FreeBSDǥѥ뤹ˤϡ˲älibiconvɬפˤʤޤ)

===== SQLite3Υ󥹥ȡ =====

OSˡSQLite3󥹥ȡ뤵Ƥ(libsqlite3.so, sqlite3.h ¸ߤ)ϡSQLite3Υ󥹥ȡפǤ
http://www.sqlite.org/ 顢 sqlite-3.5.4.tar.gz ɤ롣

<code>
$ wget http://www.sqlite.org/sqlite-3.5.4.tar.gz
</code>

ŬʾŸѥ롢󥹥ȡ뤹롣
<code>
$ tar zxf sqlite-3.5.4.tar.gz
$ mkdir bld
$ cd bld
$ ../sqlite-3-5-4/configure --disable-tcl
$ make
$ su
# make install
</code>
      
===== cgicΥ󥹥ȡ =====

OSˡcgicl205ʾ夬󥹥ȡ뤵ƤϡcgicΥ󥹥ȡפǤ
http://www.boutell.com/cgic/  cgic205.tar.gz ɤ롣

<code>
$ wget http://www.boutell.com/cgic/cgic205.tar.gz
</code>
      
ŬʾŸѥ롢󥹥ȡ뤹롣

<code>
$ tar zxf cgic205.tar.gz
$ cd cgic205
$ make
$ su
# make install
</code>
      
===== Starbug1Υѥ =====

롣

Downloadǿ롣https://sourceforge.jp/projects/starbug1/
==== ѥ ====

Ÿѥ뤷ޤ
<code>
$ tar zxf starbug1-x.x.x.tar.gz
$ cd starbug1
$ make
$ make webapp
</code>
      
Starbug1򥳥ѥ뤹ϡgnumakeɬפǤOSFreeBSDʤɤξǡmakegnumakeǤʤϡgmakeѤƥѥ뤷Ƥ
dist/starbug1 ǥ쥯ȥˡwebץ켰ޤ


Starbug1 1.3ʹߤξ硢¾ǻѤ뤳ȤǤޤ(1.3.01Ǥϡܸ졢Ѹ졢бƤޤ)

=== ѸǤȤƥѥ뤹 ===

<code>
$ tar zxf starbug1-x.x.x.tar.gz
$ cd starbug1
$ make INITIAL_LOCALE=en_US
$ make webapp
</code>

=== ѸǤȤƥѥ뤹 ===

<code>
$ tar zxf starbug1-x.x.x.tar.gz
$ cd starbug1
$ make INITIAL_LOCALE=zh_CN
$ make webapp
</code>
==== Starbug1 ====

Web(ưǧƤΤapache)DocumentRoot۲ dist/starbug1 ǥ쥯ȥ֤ޤϡ/var/www/ DocumentRootȤǤ

<code>
$ su
# cp -r dist/starbug1 /var/www/
</code>


(󥹥ȡǥ쥯ȥ)/starbug1 ۲cgi¹ԥ桼θ¤ѹޤ

<code>
# cd /var/www
# chown -R www-data:www-data starbug1
</code>      

==== WebФ˹碌եŬڤԽޤ(ʲapacheǤ) ====

dot.htaccess.htaccess˥ե̾ѹơ Ŭڤ˹ԤʤäƤ ApacheʳWebФǱѤϡ줾WebФ˹碌ƱͤԤʤäƤ

<code sh>
$ mv dot.htaccess .htaccess
$ cat .htaccess
</code>

<code apache>
# 顼ڡλ
ErrorDocument 500 /starbug1/error.html
# CGIμ¹Ե
AddHandler cgi-script cgi
Options +ExecCGI
# ڡ
DirectoryIndex index.cgi

# ̥桼ǧڤˤĤƤ
<Files index.cgi>
    AuthName      "authentication for guest user."
    AuthType      Basic
    AuthUserFile  /etc/starbug1/.guest-passwd
    Require       valid-user
</Files>

# 桼ǧڤˤĤƤ
<Files admin.cgi>
    AuthName      "authentication for administrator user."
    AuthType      Basic
    AuthUserFile  /etc/starbug1/.admin-passwd
    Require       valid-user
</Files>
# եǥ쥯ȥ
<FilesMatch ".*">
  deny from all
</FilesMatch>
# ե
<FilesMatch "(^$|\.cgi$|\.jpg$|\.png$|\.gif$|\.css$|\.js$)">
  allow from all
</FilesMatch>
</code>      

  * 顼ڡλ

URLŬڤ˻ꤷƤץΥե̾(starbug1)ѹϡ顼ڡλURLѹƤ

  * CGIμ¹Ե

פǤСȥȤƤ

  * ǥեȥڡ(welcomeڡ)

פǤСȥȤƤ

  * Basicǧ

BasicǧڤѤ硢htpasswdʤɤǥѥɥեؤΥ桼ϿԤʤäƤ ̥桼ȴ桼̡˹ԤʤϡξꤷƤפǤХȥȤƤ httpd.confԽǤϡƱhttpd.confǹԤʤ˾ޤǤ


http://www.example.com/starbug1/index.cgi ˥ޤ(www.example.comϥ󥹥ȡ뤷̾ѹƤ)

ȥåײ̤ɽС󥹥ȡǤ

===== hookǽˤĤ =====

====  ====

hookǽϡåȤϿֿλ˳ץƤӽФǽǤ hookȤơץꤹȡåϿֿλ˳ץ¹Ԥ뤳Ȥǽˤʤޤ ޤhookθƤӽФ󥿡եץƤӽФǤ뤿ᡢоμ¹ԲǽեǤС䤤ޤ ǥȤƤϡʲΤ褦ʤȤ¸Ǥޤ

=== ᡼ ===

Ͽ줿Ƥ򡢥᡼󥰥ꥹȤإ᡼褦ץȤhookϿ롣

=== Ͽ¸ ===

Ͽ줿Ƥ򡢥ե¸褦ץȤhookϿ롣

=== å󥸥㡼 ===

Ͽ줿Ƥ򡢥å󥸥㡼˼ưƤ륹ץȤhookϿ롣

=== ƥӥ ===

Ͽ줿Ƥ顢ץȤΥưӥɤ륹ץȤhookϿ롣

ǥǤϡ򤤤ȤǤ뤫⤷ޤ̾Υ󥹥ȡԤʤȡ᡼Ѥ perl ץȤΥץ뤬scriptǥ쥯ȥ֤ޤ(᡼Ԥʤˤϡ꤬ɬפǤ)

==== hookǽλ ====

Starbug1ϡоǥåȤϿֿλ˰ʲưԤʤޤ
${Starbug1Υ󥹥ȡǥ쥯ȥ}/scriptǥ쥯ȥˤ롢hook_ ǻϤޤե̾μ¹ԥե򸡺ޤ¹ԥե뤬դä硢ƤjsonѴĶѿ${STARBUG1_CONTENT}ꤷ֤ǡ¹ԥե¹Ԥޤ¹ԥե뤬ʣ¸ߤϡ˼¹ԥե¹Ԥޤ
åϿֿλΥåȰˡץȤμ¹Է̤ɽޤ
hookǽϿ줿ץȤǥ顼ȯϡϿλޤפΥåθˡץȤμ¹ԤԤݤΥåɽޤ

Ķѿ${STARBUG1_CONTENT}ꤵjsonϰʲΤ褦ʷˤʤޤ(פ褦Ƥޤ) Ƹjsonȥ֥ȤѴ饤֥ѴСñƤǤޤ
<code javascript>
{
  project: { name: "ƥȥץ ץ"},
  ticket: {
    id: 2,
    url: "http://popnuts.ddo.jp/starbug1/index.cgi/ticket/2",
    fields: [
      { name: "̾",     value: "ïǤƤǤ褦ˤʤäƤˤĤ" },
      { name: "Ƽ",   value: "smeghead" },
      { name: "",     value: "պ" },
      { name: "ƥ", value: " " },
      { name: "ͥ",   value: "" },
      { name: "ܺ",     value: "ƥȾܺ2" },
      { name: "Ƹ", value: "ƥȺƸ2" },
      { name: "", value: "" }
    ]
  }
}
</code>
      
==== źդΥ᡼ץȤˡ ====

== perl⥸塼Υ󥹥ȡ ==

źդΥץ᡼ץȤϡHTTP::DateȡJSON:SyckѤƤޤ餫ᡢcpanʤɤǥ󥹥ȡ뤷ƤƤ

== ᡼ץȤ ==

źդΥ᡼ץȤˤϡ¿perlμɬפȤʤޤ
Starbug1źդƤ᡼ץȤˡޤ ${Starbug1Υ󥹥ȡǥ쥯ȥ}/scriptǥ쥯ȥˡsample.hook_sendmail.pl ¸ߤޤ ʲΥޥɤǡ᡼ץȤhook_ǻϤޤե̾ѹޤ

<code sh>
# cd ${Starbug1Υ󥹥ȡǥ쥯ȥ}/script
# mv sample.hook_sendmail.pl hook_sendmail.pl
</code>

ץȤΰܤperlpathѹޤ

<code sh>
#!/usr/local/bin/perl
</code>
      
᡼Τξꤷޤ$options ȤhashФԤʤޤ ʸʬޥʬǤ
<code perl>
my $options = {
  #ѤSMTPۥ̾
  smtp_host => 'localhost',
  #ѤSMTPݡֹ
  smtp_port => 25,
  #᡼FROMꤷƤ
  from => 'project-admin@example.com',
  #᡼ꤷƤΤ᡼󥰥ꥹȤΥɥ쥹ʤɡ
  to => 'project-ml@example.com'
};
</code>

塢󥿥å顼̵åޤcץꤷƼ¹ԤƤ

<code>
# perl -c hook_sendmail.pl
</code>
      
: ǡ⥸塼뤬դʤȤ顼ȯϡ­Ƥ饤֥򥤥󥹥ȡ뤷Ƥ
ʾԤʤä塢åȤϿֿԤʤäơưǧԤʤäƤ

===== Хååפˡ =====

Starbug1Ū˥ХååפԤʤϡ${󥹥ȡǥ쥯ȥ}/db/*.db ХååפƤ *.dbϡSQLite3Υǡ١եǤ
㤨cronϿϰʲΤ褦crontab -e ꤹСХååפǤޤ
<code>
# /var/www/starbug1 ˥󥹥ȡ뤵줿Starbug1Υǡ١
# gzipǰ̤ /var/backup ʲ¸Ǥ
0 1 * * * tar zcf /var/backup/starbug1backup_$(date +%Y%m%d).tar.gz /var/www/starbug1/db
</code>
      

===== 򥨥ݡȤ뵡ǽˤĤ =====

====  ====

򥨥ݡȤ뤳ȤǤޤ ȤϡץȤꤵ줿ܡܤʤɤξȥ桼ѥ륷ȤǤ ¸ߤץȤ顢ץȤܹԤ뤳ȤǤޤ

==== ¸ߤץȤǡ¸ˡ ====

¸ߤץȤưĶΥоǥޥɤ¹Ԥޤ

<code sh>
# cd /somewhere/to/old/project
# cd script
# ./pickup_template
</code>
      
¹Ը塢template ǥ쥯ȥ꤬졢˥ƥץ졼Ȥޤtemplateǥ쥯ȥ꤬¸ߤ硢ޤΤǥХååפɬפʾ˥ХååפƤ
==== ¸ǡ򿷤ץȤȿǤˡ ====

ץȤ򥤥󥹥ȡ뤷ޤ˥󥹥ȡ뤬λ֤ǡ¸Ƥätemplateǥ쥯ȥ񤭤ޤ

<code sh>
# cp -r /somewhere/to/old/project/template/* /somewhere/to/new/project/
</code>

θ塢ץȤdbǥ쥯ȥνͭԤhttpФμ¹ԥ桼ѹޤ
<code sh>
# cd /somewhere/to/new/project/
# chown -R www-data:www-data db
</code>

ʾǡץȤ˸ŤץȤȿǤޤ ץȤȸŤץȤΥС󤬰㤦ϡȿǤʤưʤǽޤ

===== ޤưʤ =====

  * 󥹥ȡ봰λ֥饦 http://www.example.com/starbug1/ ˥ȥ顼ȯWebФΥ顼ˡPremature end of script headers: index.cgiפΤ褦ʥåϤ롣

CGI¹Ԥ븢¤뤫ǧƤʲΤ褦ʴñperlcgi ץȤstarbug1ǥ쥯ȥ֤¹Ը¤ղäư뤫ɤǧ 뤳ȤǡCGIΤͭˤʤäƤ뤫ɤǧǤޤ

<code perl>
#!/usr/bin/perl
print "Content-Type: text/plain;\n\nhello.";
</code>

WebХץ桼starbug1ǥ쥯ȥ˽񤭹߸¤뤫ǧ Ƥǡ١եǼ뤿ˡWebХץ桼 starbug1ǥ쥯ȥ˽񤭹߲ǽȤʤäƤɬפޤ
