aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--www/tdiary-devel/Makefile11
-rw-r--r--www/tdiary-devel/files/tdiaryinst.rb.in253
-rw-r--r--www/tdiary-devel/pkg-message16
-rw-r--r--www/tdiary-devel/pkg-plist1
-rw-r--r--www/tdiary/Makefile11
-rw-r--r--www/tdiary/files/tdiaryinst.rb.in253
-rw-r--r--www/tdiary/pkg-message16
-rw-r--r--www/tdiary/pkg-plist1
8 files changed, 540 insertions, 22 deletions
diff --git a/www/tdiary-devel/Makefile b/www/tdiary-devel/Makefile
index c960f4cedec8..4a933ae10043 100644
--- a/www/tdiary-devel/Makefile
+++ b/www/tdiary-devel/Makefile
@@ -7,7 +7,7 @@
PORTNAME= tdiary
PORTVERSION= 1.5.4
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= www ruby
MASTER_SITES= \
${MASTER_SITE_SOURCEFORGE} \
@@ -27,6 +27,8 @@ RUN_DEPENDS+= ${RUBY_SITEARCHLIBDIR}/web/escape_ext.so:${PORTSDIR}/www/ruby-nora
NO_BUILD= yes
USE_RUBY= yes
+RUBY_SHEBANG_FILES= index.rb update.rb misc/convert2.rb misc/posttdiary.rb misc/plugin/squeeze.rb misc/plugin/weather.rb \
+misc/plugin/windex.rb misc/plugin/a/a_conf.rb misc/plugin/todo/todo.rb misc/plugin/trackback/tb.rb
TDIARYDIR= ${PREFIX}/share/examples/${PORTNAME}
WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}
@@ -47,8 +49,11 @@ pre-everything::
@${ECHO_MSG}
do-install:
- @if [ -d ${TDIARYDIR} ]; then ${RM} -rf ${TDIARYDIR}; fi
- ${MKDIR} ${TDIARYDIR}
+# @if [ -d ${TDIARYDIR} ]; then ${RM} -rf ${TDIARYDIR}; fi
+ -${MKDIR} ${TDIARYDIR}
+ @${SED} -e 's,@@@@PREFIX@@@@,${PREFIX},g' \
+ -e 's,@@@@LANG@@@@,${TDIARY_LANG},g' \
+ ${FILESDIR}/tdiaryinst.rb.in > ${TDIARYDIR}/tdiaryinst.rb
@${SED} -e 's,@@@@PREFIX@@@@,${PREFIX},g' \
-e 's,@@@@LANG@@@@,${TDIARY_LANG},g' \
${FILESDIR}/tdiary-FreeBSD.sh.in > ${TDIARYDIR}/tdiary-FreeBSD.sh
diff --git a/www/tdiary-devel/files/tdiaryinst.rb.in b/www/tdiary-devel/files/tdiaryinst.rb.in
new file mode 100644
index 000000000000..da176f83bd40
--- /dev/null
+++ b/www/tdiary-devel/files/tdiaryinst.rb.in
@@ -0,0 +1,253 @@
+#!/usr/local/bin/ruby
+#
+# tdiaryinstall.rb - tDiary user directory copy script
+# Date created: 13 July 2003
+# Whom: KAMIYA Satosi <mimoriso@anet.ne.jp>
+#
+# $FreeBSD$
+#
+
+require 'getoptlong'
+require 'etc.so'
+require 'fileutils'
+require 'find'
+require 'tempfile'
+
+# make install時に置換されるグローバル変数 --tdiarymaster, --lang オプションで上書き可能
+$OPT_TDIARYMASTER = "@@@@PREFIX@@@@/share/examples/tdiary"
+$OPT_LANG = '@@@@LANG@@@@'
+
+def usage
+ STDERR.print "Usage: #{File.basename($0)} [options]\n"
+ STDERR.print "Options:\n"
+ STDERR.print " --help Display this information\n"
+ STDERR.print " --user=<username> Specify user's login name\n"
+ STDERR.print " --diarydir=<diarydir> Specify tDiary data directory default: diary\n"
+ STDERR.print " --httpdir=<httpdir> Specify apache UserDirectory default: public_html\n"
+ STDERR.print " --name=<author_name> Specify author name\n"
+ STDERR.print " --mail=<author_mail> Specify author mail address\n"
+ STDERR.print " --tdiarymaster=<dir> Specify tDiary master directory default: @@@@PREFIX@@@@/share/examples/tdiary\n"
+ STDERR.print " --lang=<language> Specify your language ('en' or 'ja') default: @@@@LANG@@@@\n"
+ STDERR.print " --suexec Use suExec for CGI execution\n"
+ STDERR.print " --symlink Use symbolic link for tDiary master files\n"
+ STDERR.print " --quiet Do not display any information\n"
+ STDERR.print " --noop Do not install any file. Use this option with --verbose\n"
+ STDERR.print " --verbose Verbose; display verbose debugging messages.\n"
+ exit 1
+end
+
+# 引数の解析
+parser = GetoptLong.new
+parser.set_options(
+ ['--user', '-u', GetoptLong::REQUIRED_ARGUMENT],
+ ['--diarydir','-d', GetoptLong::REQUIRED_ARGUMENT],
+ ['--httpdir' ,'-h', GetoptLong::REQUIRED_ARGUMENT],
+ ['--name', '-n', GetoptLong::REQUIRED_ARGUMENT],
+ ['--mail', '-m', GetoptLong::REQUIRED_ARGUMENT],
+ ['--tdiarymaster' , GetoptLong::REQUIRED_ARGUMENT],
+ ['--lang' , GetoptLong::REQUIRED_ARGUMENT],
+ ['--suexec' , GetoptLong::NO_ARGUMENT],
+ ['--symlink', '-l', GetoptLong::NO_ARGUMENT],
+ ['--quiet', '-q', GetoptLong::NO_ARGUMENT],
+ ['--noop' , GetoptLong::NO_ARGUMENT],
+ ['--verbose' , GetoptLong::NO_ARGUMENT],
+ ['--help' , GetoptLong::NO_ARGUMENT])
+begin
+ parser.each_option do |name, arg|
+ eval "$OPT_#{name.sub(/^--/, '').gsub(/-/, '_').upcase} = '#{arg}'"
+ end
+rescue
+ raise "getoptlong"
+end
+usage() if defined?($OPT_HELP)
+
+class TdiaryInstall
+ attr_accessor :tdiarymaster
+ attr_accessor :tdconfig
+ attr_accessor :lang
+ attr_reader :euid # tdiaryinstallを実行しているユーザID
+ attr_accessor :username
+ attr_accessor :diarydir
+ attr_accessor :httpdir
+ attr_reader :passwd
+ attr_accessor :fileutilOptions
+ attr_accessor :author_name
+ attr_accessor :author_mail
+ attr_accessor :author_host
+ def initialize # 初期値の設定
+ @passwd = Etc.getpwuid() # 初期値はログインユーザ
+ @euid = @passwd.uid
+ @username = (@passwd.name) # username=(value) メソッドで再定義している
+ @diarydir = 'diary'
+ @httpdir = 'public_html'
+ @fileutilOptions = []
+ @author_name = @passwd.gecos # F.Kimura
+ @author_host = "#{`hostname`.chomp}" # F.Kimura
+ @author_mail = "#{@username}@#{`hostname`.chomp}"
+ end
+
+ def username=(value) # username を代入する際に passwdメンバ変数も更新する
+ @username = value
+ @passwd = Etc.getpwnam(@username) # getpwnam(3) により passwd 構造体を取得する
+ # ユーザ名が存在しなかった場合、Etc.getpwnam() は例外を発生する。
+ @author_name = @passwd.gecos
+ @author_mail = "#{@username}@#{`hostname`.chomp}"
+ end
+
+ def lang=(value)
+ case value
+ when 'tdiary.conf-en' , 'en'
+ @lang = 'en'
+ @tdconfig = 'tdiary.conf-en'
+ when 'tdiary.conf-ja' , 'ja'
+ @lang = 'ja'
+ @tdconfig = 'tdiary.conf-ja'
+ else
+ raise "Unknown Language : #{value}"
+ end
+ end
+
+ def installAll
+ raise "You can not use tDiary for superuser." if @passwd.uid == 0
+
+ echo "************************************************************\n"
+ echo "Starting tDiary for FreeBSD user directory installation ...\n"
+ prepareDirs()
+
+ echo "Copy tDiary ...\n"
+ if $OPT_SYMLINK then
+ linkBaseFile()
+ else
+ copyBaseFile()
+ end
+
+ installConfig()
+ setPermissions() if ! defined?($OPT_NOOP)
+
+ echo "***\n"
+ echo "You have to execute the following commands:\n"
+ echo " % /usr/local/sbin/htpasswd -c #{@passwd.dir}/.htpasswd #{@username}\n\n"
+ echo "Please read #{@tdiarymaster}/README\n"
+ echo " for additional information.\n"
+ echo "************************************************************\n"
+ end
+
+ def prepareDirs
+ # インストール先ディレクトリの用意
+ if ! FileTest.exist?("#{@passwd.dir}/#{@diarydir}")
+ FileUtils.mkdir_p("#{@passwd.dir}/#{@diarydir}", *@fileutilOptions)
+ end
+ if ! FileTest.exist?("#{@passwd.dir}/#{@httpdir}/#{@diarydir}")
+ FileUtils.mkdir_p("#{@passwd.dir}/#{@httpdir}/#{@diarydir}", *@fileutilOptions)
+ end
+ end
+
+ def linkBaseFile # tDiaryの配布ファイルはコピーしない
+ FileUtils.cp_r("#{@tdiarymaster}/plugin", "#{@passwd.dir}/#{@httpdir}/#{@diarydir}", :preserve, *@fileutilOptions)
+ FileUtils.ln_s("#{@tdiarymaster}/theme", "#{@passwd.dir}/#{@httpdir}/#{@diarydir}", *@fileutilOptions)
+ FileUtils.ln_s("#{@tdiarymaster}/doc", "#{@passwd.dir}/#{@httpdir}/#{@diarydir}", *@fileutilOptions)
+ tempfile = Tempfile.new("index.rb")
+ tempfile.write "#!/usr/local/bin/ruby\nrequire '#{@tdiarymaster}/index'\n"
+ tempfile.close
+ FileUtils.cp(tempfile.path, "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/index.rb", *@fileutilOptions)
+ FileUtils.chmod(0755, "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/index.rb", *@fileutilOptions)
+ tempfile = Tempfile.new("update.rb")
+ tempfile.write "#!/usr/local/bin/ruby\nrequire '#{@tdiarymaster}/update'\n"
+ tempfile.close
+ FileUtils.cp(tempfile.path, "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/update.rb", *@fileutilOptions)
+ FileUtils.chmod(0755, "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/update.rb", *@fileutilOptions)
+ end
+
+ def copyBaseFile # tDiaryの配布ファイルをすべてコピー
+ FileUtils.cp_r("#{@tdiarymaster}/", "#{@passwd.dir}/#{@httpdir}/#{@diarydir}", :preserve, *@fileutilOptions)
+ end
+
+ def installConfig
+ # 設定ファイルを生成してインストール
+ tempfile = Tempfile.new("tdiary.conf-ja") # 日本語環境サンプル
+ tempfile.write tdiaryConfReplace("#{@tdiarymaster}/tdiary.conf.sample")
+ tempfile.close
+ FileUtils.cp(tempfile.path, "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/tdiary.conf-ja", *@fileutilOptions)
+
+ tempfile = Tempfile.new("tdiary.conf-en") # sample configuration for English Environment
+ tempfile.write tdiaryConfReplace("#{@tdiarymaster}/misc/i18n/tdiary.conf.sample-en")
+ tempfile.close
+ FileUtils.cp(tempfile.path, "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/tdiary.conf-en", *@fileutilOptions)
+
+ if ! FileTest.exist?("#{@passwd.dir}/#{@httpdir}/#{@diarydir}/tdiary.conf") # tdiary.conf がなければ設置
+ FileUtils.cp("#{@passwd.dir}/#{@httpdir}/#{@diarydir}/#{@tdconfig}", "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/tdiary.conf", *@fileutilOptions)
+ end
+ # TODO: @langの値によって plugin/00lang.en.rb コピー/削除の制御もしたい
+
+ tempfile = Tempfile.new("dot.htaccess")
+ tempfile.write dothtaccessReplace("#{@tdiarymaster}/dot.htaccess")
+ tempfile.close
+ FileUtils.cp(tempfile.path, "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/dot.htaccess", *@fileutilOptions)
+ if ! FileTest.exist?("#{@passwd.dir}/#{@httpdir}/#{@diarydir}/.htaccess")
+ FileUtils.cp("#{@passwd.dir}/#{@httpdir}/#{@diarydir}/dot.htaccess", "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/.htaccess", *@fileutilOptions)
+ end
+ end
+
+ def setPermissions # ファイルコピー・生成以外の処理
+ FileUtils.chmod(0777, "#{@passwd.dir}/#{@diarydir}", *@fileutilOptions) if ! defined?($OPT_SUEXEC)
+ FileUtils.chmod(0777, "#{@passwd.dir}/#{@httpdir}/#{@diarydir}", *@fileutilOptions) if ! defined?($OPT_SUEXEC)
+ FileUtils.rm("#{@passwd.dir}/#{@httpdir}/#{@diarydir}/tdiary-FreeBSD.sh", :force, *@fileutilOptions)
+
+ if @euid == 0 then # superuser 権限でこのインストーラを実行している場合
+ # すべてのディレクトリ・ファイルに chown で所有者変更
+ Find.find("#{@passwd.dir}/#{@diarydir}", "#{@passwd.dir}/#{@httpdir}/#{@diarydir}") do |f|
+ File.chown(@passwd.uid, @passwd.gid, f)
+ end
+ if File::Stat.new("#{@passwd.dir}/#{@httpdir}").uid == 0 # ~/public_html のオーナーがsuperuser
+ File.chown(@passwd.uid, @passwd.gid, "#{@passwd.dir}/#{@httpdir}")
+ end
+ end
+ end
+
+ def echo(s) # --quiet が指定されていなかった場合にメッセージを出力する
+ STDOUT.print s if ! defined?($OPT_QUIET)
+ end
+
+ def tdiaryConfReplace(filename) # サンプル tdiary.conf を書き換えるメソッド
+ s = ''
+ File.open(filename) { |fp|
+ fp.each { |line|
+ line = "@data_path = '#{@passwd.dir}/#{@diarydir}'\n" if line =~ /^\@data_path\s/
+ line = "@author_name = '#{@author_name}'\n" if line =~ /^\@author_name\s/
+ line = "@author_mail = '#{@author_mail}'\n" if line =~ /^\@author_mail\s/
+ line = "@html_title = '#{@author_name} diary'\n" if line =~ /^\@html_title\s/
+ line = "@index_page = 'http://#{@author_host}/~#{@username}\/'" if line =~ /^\@index_page\s/ # F.Kimura
+ s += line
+ }
+ }
+ s
+ end
+
+ def dothtaccessReplace(filename) # サンプル dot.htaccess を書き換えるメソッド
+ s = ''
+ File.open(filename) { |fp|
+ fp.each { |line|
+ line = "\tAuthUserFile #{@passwd.dir}/.htpasswd\n" if line =~ /^\s*AuthUserFile\s/
+ line = "\tRequire user #{@username}\n" if line =~ /^\s*Require user\s/
+ line = "Options +FollowSymLinks\n" if line =~ /^\#Options \+FollowSymLinks/ && $OPT_SYMLINK
+ s += line
+ }
+ }
+ s
+ end
+end
+
+tdiaryinst = TdiaryInstall.new
+tdiaryinst.tdiarymaster = $OPT_TDIARYMASTER
+tdiaryinst.lang = $OPT_LANG
+tdiaryinst.username = $OPT_USER if defined?($OPT_USER) # $OPT_NAMEの設定より前でないといけない
+tdiaryinst.diarydir = $OPT_DIARYDIR if defined?($OPT_DIARYDIR)
+tdiaryinst.httpdir = $OPT_HTTPDIR if defined?($OPT_HTTPDIR)
+tdiaryinst.author_name = $OPT_NAME if defined?($OPT_NAME)
+tdiaryinst.author_mail = $OPT_MAIL if defined?($OPT_MAIL)
+tdiaryinst.fileutilOptions.push(:noop) if defined?($OPT_NOOP)
+tdiaryinst.fileutilOptions.push(:verbose) if defined?($OPT_VERBOSE)
+
+tdiaryinst.installAll
+
+exit 0
diff --git a/www/tdiary-devel/pkg-message b/www/tdiary-devel/pkg-message
index 2832b58c9abd..13f818501adc 100644
--- a/www/tdiary-devel/pkg-message
+++ b/www/tdiary-devel/pkg-message
@@ -1,17 +1,17 @@
=============================================================================
There is a script to install tDiary in a user directory.
-You can run the script manually as
+This script should be run manually.
- # @@@@PREFIX@@@@/share/examples/tdiary/tdiary-FreeBSD.sh USERid
- or
- % @@@@PREFIX@@@@/share/examples/tdiary/tdiary-FreeBSD.sh install
-
-There is a document in English under the following directory.
+ # ruby @@@@PREFIX@@@@/share/examples/tdiary/tdiaryinst.rb --user=hoge
+ or
+ % ruby @@@@PREFIX@@@@/share/examples/tdiary/tdiaryinst.rb
+There is a document by English in the following directories.
+ See ...
@@@@PREFIX@@@@/share/examples/tdiary/misc/i18n/
-
-And, you can find information on the tdiary system at :
+ and
+ Explanation by English of a tDiary system can refer to the following page :
http://tdiary-users.sourceforge.jp/cgi-bin/wiki.cgi?FrontPage_en
=============================================================================
diff --git a/www/tdiary-devel/pkg-plist b/www/tdiary-devel/pkg-plist
index 2d28a019b5e8..4758eb8b7e98 100644
--- a/www/tdiary-devel/pkg-plist
+++ b/www/tdiary-devel/pkg-plist
@@ -1 +1,2 @@
+share/examples/tdiary/tdiaryinst.rb
share/examples/tdiary/tdiary-FreeBSD.sh
diff --git a/www/tdiary/Makefile b/www/tdiary/Makefile
index c960f4cedec8..4a933ae10043 100644
--- a/www/tdiary/Makefile
+++ b/www/tdiary/Makefile
@@ -7,7 +7,7 @@
PORTNAME= tdiary
PORTVERSION= 1.5.4
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= www ruby
MASTER_SITES= \
${MASTER_SITE_SOURCEFORGE} \
@@ -27,6 +27,8 @@ RUN_DEPENDS+= ${RUBY_SITEARCHLIBDIR}/web/escape_ext.so:${PORTSDIR}/www/ruby-nora
NO_BUILD= yes
USE_RUBY= yes
+RUBY_SHEBANG_FILES= index.rb update.rb misc/convert2.rb misc/posttdiary.rb misc/plugin/squeeze.rb misc/plugin/weather.rb \
+misc/plugin/windex.rb misc/plugin/a/a_conf.rb misc/plugin/todo/todo.rb misc/plugin/trackback/tb.rb
TDIARYDIR= ${PREFIX}/share/examples/${PORTNAME}
WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}
@@ -47,8 +49,11 @@ pre-everything::
@${ECHO_MSG}
do-install:
- @if [ -d ${TDIARYDIR} ]; then ${RM} -rf ${TDIARYDIR}; fi
- ${MKDIR} ${TDIARYDIR}
+# @if [ -d ${TDIARYDIR} ]; then ${RM} -rf ${TDIARYDIR}; fi
+ -${MKDIR} ${TDIARYDIR}
+ @${SED} -e 's,@@@@PREFIX@@@@,${PREFIX},g' \
+ -e 's,@@@@LANG@@@@,${TDIARY_LANG},g' \
+ ${FILESDIR}/tdiaryinst.rb.in > ${TDIARYDIR}/tdiaryinst.rb
@${SED} -e 's,@@@@PREFIX@@@@,${PREFIX},g' \
-e 's,@@@@LANG@@@@,${TDIARY_LANG},g' \
${FILESDIR}/tdiary-FreeBSD.sh.in > ${TDIARYDIR}/tdiary-FreeBSD.sh
diff --git a/www/tdiary/files/tdiaryinst.rb.in b/www/tdiary/files/tdiaryinst.rb.in
new file mode 100644
index 000000000000..da176f83bd40
--- /dev/null
+++ b/www/tdiary/files/tdiaryinst.rb.in
@@ -0,0 +1,253 @@
+#!/usr/local/bin/ruby
+#
+# tdiaryinstall.rb - tDiary user directory copy script
+# Date created: 13 July 2003
+# Whom: KAMIYA Satosi <mimoriso@anet.ne.jp>
+#
+# $FreeBSD$
+#
+
+require 'getoptlong'
+require 'etc.so'
+require 'fileutils'
+require 'find'
+require 'tempfile'
+
+# make install時に置換されるグローバル変数 --tdiarymaster, --lang オプションで上書き可能
+$OPT_TDIARYMASTER = "@@@@PREFIX@@@@/share/examples/tdiary"
+$OPT_LANG = '@@@@LANG@@@@'
+
+def usage
+ STDERR.print "Usage: #{File.basename($0)} [options]\n"
+ STDERR.print "Options:\n"
+ STDERR.print " --help Display this information\n"
+ STDERR.print " --user=<username> Specify user's login name\n"
+ STDERR.print " --diarydir=<diarydir> Specify tDiary data directory default: diary\n"
+ STDERR.print " --httpdir=<httpdir> Specify apache UserDirectory default: public_html\n"
+ STDERR.print " --name=<author_name> Specify author name\n"
+ STDERR.print " --mail=<author_mail> Specify author mail address\n"
+ STDERR.print " --tdiarymaster=<dir> Specify tDiary master directory default: @@@@PREFIX@@@@/share/examples/tdiary\n"
+ STDERR.print " --lang=<language> Specify your language ('en' or 'ja') default: @@@@LANG@@@@\n"
+ STDERR.print " --suexec Use suExec for CGI execution\n"
+ STDERR.print " --symlink Use symbolic link for tDiary master files\n"
+ STDERR.print " --quiet Do not display any information\n"
+ STDERR.print " --noop Do not install any file. Use this option with --verbose\n"
+ STDERR.print " --verbose Verbose; display verbose debugging messages.\n"
+ exit 1
+end
+
+# 引数の解析
+parser = GetoptLong.new
+parser.set_options(
+ ['--user', '-u', GetoptLong::REQUIRED_ARGUMENT],
+ ['--diarydir','-d', GetoptLong::REQUIRED_ARGUMENT],
+ ['--httpdir' ,'-h', GetoptLong::REQUIRED_ARGUMENT],
+ ['--name', '-n', GetoptLong::REQUIRED_ARGUMENT],
+ ['--mail', '-m', GetoptLong::REQUIRED_ARGUMENT],
+ ['--tdiarymaster' , GetoptLong::REQUIRED_ARGUMENT],
+ ['--lang' , GetoptLong::REQUIRED_ARGUMENT],
+ ['--suexec' , GetoptLong::NO_ARGUMENT],
+ ['--symlink', '-l', GetoptLong::NO_ARGUMENT],
+ ['--quiet', '-q', GetoptLong::NO_ARGUMENT],
+ ['--noop' , GetoptLong::NO_ARGUMENT],
+ ['--verbose' , GetoptLong::NO_ARGUMENT],
+ ['--help' , GetoptLong::NO_ARGUMENT])
+begin
+ parser.each_option do |name, arg|
+ eval "$OPT_#{name.sub(/^--/, '').gsub(/-/, '_').upcase} = '#{arg}'"
+ end
+rescue
+ raise "getoptlong"
+end
+usage() if defined?($OPT_HELP)
+
+class TdiaryInstall
+ attr_accessor :tdiarymaster
+ attr_accessor :tdconfig
+ attr_accessor :lang
+ attr_reader :euid # tdiaryinstallを実行しているユーザID
+ attr_accessor :username
+ attr_accessor :diarydir
+ attr_accessor :httpdir
+ attr_reader :passwd
+ attr_accessor :fileutilOptions
+ attr_accessor :author_name
+ attr_accessor :author_mail
+ attr_accessor :author_host
+ def initialize # 初期値の設定
+ @passwd = Etc.getpwuid() # 初期値はログインユーザ
+ @euid = @passwd.uid
+ @username = (@passwd.name) # username=(value) メソッドで再定義している
+ @diarydir = 'diary'
+ @httpdir = 'public_html'
+ @fileutilOptions = []
+ @author_name = @passwd.gecos # F.Kimura
+ @author_host = "#{`hostname`.chomp}" # F.Kimura
+ @author_mail = "#{@username}@#{`hostname`.chomp}"
+ end
+
+ def username=(value) # username を代入する際に passwdメンバ変数も更新する
+ @username = value
+ @passwd = Etc.getpwnam(@username) # getpwnam(3) により passwd 構造体を取得する
+ # ユーザ名が存在しなかった場合、Etc.getpwnam() は例外を発生する。
+ @author_name = @passwd.gecos
+ @author_mail = "#{@username}@#{`hostname`.chomp}"
+ end
+
+ def lang=(value)
+ case value
+ when 'tdiary.conf-en' , 'en'
+ @lang = 'en'
+ @tdconfig = 'tdiary.conf-en'
+ when 'tdiary.conf-ja' , 'ja'
+ @lang = 'ja'
+ @tdconfig = 'tdiary.conf-ja'
+ else
+ raise "Unknown Language : #{value}"
+ end
+ end
+
+ def installAll
+ raise "You can not use tDiary for superuser." if @passwd.uid == 0
+
+ echo "************************************************************\n"
+ echo "Starting tDiary for FreeBSD user directory installation ...\n"
+ prepareDirs()
+
+ echo "Copy tDiary ...\n"
+ if $OPT_SYMLINK then
+ linkBaseFile()
+ else
+ copyBaseFile()
+ end
+
+ installConfig()
+ setPermissions() if ! defined?($OPT_NOOP)
+
+ echo "***\n"
+ echo "You have to execute the following commands:\n"
+ echo " % /usr/local/sbin/htpasswd -c #{@passwd.dir}/.htpasswd #{@username}\n\n"
+ echo "Please read #{@tdiarymaster}/README\n"
+ echo " for additional information.\n"
+ echo "************************************************************\n"
+ end
+
+ def prepareDirs
+ # インストール先ディレクトリの用意
+ if ! FileTest.exist?("#{@passwd.dir}/#{@diarydir}")
+ FileUtils.mkdir_p("#{@passwd.dir}/#{@diarydir}", *@fileutilOptions)
+ end
+ if ! FileTest.exist?("#{@passwd.dir}/#{@httpdir}/#{@diarydir}")
+ FileUtils.mkdir_p("#{@passwd.dir}/#{@httpdir}/#{@diarydir}", *@fileutilOptions)
+ end
+ end
+
+ def linkBaseFile # tDiaryの配布ファイルはコピーしない
+ FileUtils.cp_r("#{@tdiarymaster}/plugin", "#{@passwd.dir}/#{@httpdir}/#{@diarydir}", :preserve, *@fileutilOptions)
+ FileUtils.ln_s("#{@tdiarymaster}/theme", "#{@passwd.dir}/#{@httpdir}/#{@diarydir}", *@fileutilOptions)
+ FileUtils.ln_s("#{@tdiarymaster}/doc", "#{@passwd.dir}/#{@httpdir}/#{@diarydir}", *@fileutilOptions)
+ tempfile = Tempfile.new("index.rb")
+ tempfile.write "#!/usr/local/bin/ruby\nrequire '#{@tdiarymaster}/index'\n"
+ tempfile.close
+ FileUtils.cp(tempfile.path, "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/index.rb", *@fileutilOptions)
+ FileUtils.chmod(0755, "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/index.rb", *@fileutilOptions)
+ tempfile = Tempfile.new("update.rb")
+ tempfile.write "#!/usr/local/bin/ruby\nrequire '#{@tdiarymaster}/update'\n"
+ tempfile.close
+ FileUtils.cp(tempfile.path, "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/update.rb", *@fileutilOptions)
+ FileUtils.chmod(0755, "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/update.rb", *@fileutilOptions)
+ end
+
+ def copyBaseFile # tDiaryの配布ファイルをすべてコピー
+ FileUtils.cp_r("#{@tdiarymaster}/", "#{@passwd.dir}/#{@httpdir}/#{@diarydir}", :preserve, *@fileutilOptions)
+ end
+
+ def installConfig
+ # 設定ファイルを生成してインストール
+ tempfile = Tempfile.new("tdiary.conf-ja") # 日本語環境サンプル
+ tempfile.write tdiaryConfReplace("#{@tdiarymaster}/tdiary.conf.sample")
+ tempfile.close
+ FileUtils.cp(tempfile.path, "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/tdiary.conf-ja", *@fileutilOptions)
+
+ tempfile = Tempfile.new("tdiary.conf-en") # sample configuration for English Environment
+ tempfile.write tdiaryConfReplace("#{@tdiarymaster}/misc/i18n/tdiary.conf.sample-en")
+ tempfile.close
+ FileUtils.cp(tempfile.path, "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/tdiary.conf-en", *@fileutilOptions)
+
+ if ! FileTest.exist?("#{@passwd.dir}/#{@httpdir}/#{@diarydir}/tdiary.conf") # tdiary.conf がなければ設置
+ FileUtils.cp("#{@passwd.dir}/#{@httpdir}/#{@diarydir}/#{@tdconfig}", "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/tdiary.conf", *@fileutilOptions)
+ end
+ # TODO: @langの値によって plugin/00lang.en.rb コピー/削除の制御もしたい
+
+ tempfile = Tempfile.new("dot.htaccess")
+ tempfile.write dothtaccessReplace("#{@tdiarymaster}/dot.htaccess")
+ tempfile.close
+ FileUtils.cp(tempfile.path, "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/dot.htaccess", *@fileutilOptions)
+ if ! FileTest.exist?("#{@passwd.dir}/#{@httpdir}/#{@diarydir}/.htaccess")
+ FileUtils.cp("#{@passwd.dir}/#{@httpdir}/#{@diarydir}/dot.htaccess", "#{@passwd.dir}/#{@httpdir}/#{@diarydir}/.htaccess", *@fileutilOptions)
+ end
+ end
+
+ def setPermissions # ファイルコピー・生成以外の処理
+ FileUtils.chmod(0777, "#{@passwd.dir}/#{@diarydir}", *@fileutilOptions) if ! defined?($OPT_SUEXEC)
+ FileUtils.chmod(0777, "#{@passwd.dir}/#{@httpdir}/#{@diarydir}", *@fileutilOptions) if ! defined?($OPT_SUEXEC)
+ FileUtils.rm("#{@passwd.dir}/#{@httpdir}/#{@diarydir}/tdiary-FreeBSD.sh", :force, *@fileutilOptions)
+
+ if @euid == 0 then # superuser 権限でこのインストーラを実行している場合
+ # すべてのディレクトリ・ファイルに chown で所有者変更
+ Find.find("#{@passwd.dir}/#{@diarydir}", "#{@passwd.dir}/#{@httpdir}/#{@diarydir}") do |f|
+ File.chown(@passwd.uid, @passwd.gid, f)
+ end
+ if File::Stat.new("#{@passwd.dir}/#{@httpdir}").uid == 0 # ~/public_html のオーナーがsuperuser
+ File.chown(@passwd.uid, @passwd.gid, "#{@passwd.dir}/#{@httpdir}")
+ end
+ end
+ end
+
+ def echo(s) # --quiet が指定されていなかった場合にメッセージを出力する
+ STDOUT.print s if ! defined?($OPT_QUIET)
+ end
+
+ def tdiaryConfReplace(filename) # サンプル tdiary.conf を書き換えるメソッド
+ s = ''
+ File.open(filename) { |fp|
+ fp.each { |line|
+ line = "@data_path = '#{@passwd.dir}/#{@diarydir}'\n" if line =~ /^\@data_path\s/
+ line = "@author_name = '#{@author_name}'\n" if line =~ /^\@author_name\s/
+ line = "@author_mail = '#{@author_mail}'\n" if line =~ /^\@author_mail\s/
+ line = "@html_title = '#{@author_name} diary'\n" if line =~ /^\@html_title\s/
+ line = "@index_page = 'http://#{@author_host}/~#{@username}\/'" if line =~ /^\@index_page\s/ # F.Kimura
+ s += line
+ }
+ }
+ s
+ end
+
+ def dothtaccessReplace(filename) # サンプル dot.htaccess を書き換えるメソッド
+ s = ''
+ File.open(filename) { |fp|
+ fp.each { |line|
+ line = "\tAuthUserFile #{@passwd.dir}/.htpasswd\n" if line =~ /^\s*AuthUserFile\s/
+ line = "\tRequire user #{@username}\n" if line =~ /^\s*Require user\s/
+ line = "Options +FollowSymLinks\n" if line =~ /^\#Options \+FollowSymLinks/ && $OPT_SYMLINK
+ s += line
+ }
+ }
+ s
+ end
+end
+
+tdiaryinst = TdiaryInstall.new
+tdiaryinst.tdiarymaster = $OPT_TDIARYMASTER
+tdiaryinst.lang = $OPT_LANG
+tdiaryinst.username = $OPT_USER if defined?($OPT_USER) # $OPT_NAMEの設定より前でないといけない
+tdiaryinst.diarydir = $OPT_DIARYDIR if defined?($OPT_DIARYDIR)
+tdiaryinst.httpdir = $OPT_HTTPDIR if defined?($OPT_HTTPDIR)
+tdiaryinst.author_name = $OPT_NAME if defined?($OPT_NAME)
+tdiaryinst.author_mail = $OPT_MAIL if defined?($OPT_MAIL)
+tdiaryinst.fileutilOptions.push(:noop) if defined?($OPT_NOOP)
+tdiaryinst.fileutilOptions.push(:verbose) if defined?($OPT_VERBOSE)
+
+tdiaryinst.installAll
+
+exit 0
diff --git a/www/tdiary/pkg-message b/www/tdiary/pkg-message
index 2832b58c9abd..13f818501adc 100644
--- a/www/tdiary/pkg-message
+++ b/www/tdiary/pkg-message
@@ -1,17 +1,17 @@
=============================================================================
There is a script to install tDiary in a user directory.
-You can run the script manually as
+This script should be run manually.
- # @@@@PREFIX@@@@/share/examples/tdiary/tdiary-FreeBSD.sh USERid
- or
- % @@@@PREFIX@@@@/share/examples/tdiary/tdiary-FreeBSD.sh install
-
-There is a document in English under the following directory.
+ # ruby @@@@PREFIX@@@@/share/examples/tdiary/tdiaryinst.rb --user=hoge
+ or
+ % ruby @@@@PREFIX@@@@/share/examples/tdiary/tdiaryinst.rb
+There is a document by English in the following directories.
+ See ...
@@@@PREFIX@@@@/share/examples/tdiary/misc/i18n/
-
-And, you can find information on the tdiary system at :
+ and
+ Explanation by English of a tDiary system can refer to the following page :
http://tdiary-users.sourceforge.jp/cgi-bin/wiki.cgi?FrontPage_en
=============================================================================
diff --git a/www/tdiary/pkg-plist b/www/tdiary/pkg-plist
index 2d28a019b5e8..4758eb8b7e98 100644
--- a/www/tdiary/pkg-plist
+++ b/www/tdiary/pkg-plist
@@ -1 +1,2 @@
+share/examples/tdiary/tdiaryinst.rb
share/examples/tdiary/tdiary-FreeBSD.sh