FreeBSD対応

このコミットが含まれているのは:
守矢諏訪子 2023-02-20 12:19:31 +09:00
コミット 634d1dd9ec
7個のファイルの変更149行の追加24行の削除

3
config.json ノーマルファイル
ファイルの表示

@ -0,0 +1,3 @@
{
"domain": "https://urlo.li"
}

71
install.sh ノーマルファイル → 実行可能ファイル
ファイルの表示

@ -1,16 +1,30 @@
#!/bin/sh
su
mkdir /etc/urloli
cp links.sample.json /etc/urloli/links.json
go build
mv urloli /usr/local/bin
chown -R urloli:urloli /usr/local/bin/urloli
chown -R urloli:urloli /etc/urloli
unamestr=$(uname)
domain="$1"
case "$domain" in
*.i2p) network="i2p" ;;
*.onion) network="tor" ;;
*) network="www" ;;
esac
if [ "$unamestr" = 'FreeBSD' ]; then
mkdir /usr/local/etc/urloli
cp -i links.sample.json /usr/local/etc/urloli/links.json
cp -i config.json /usr/local/etc/urloli/config.json
sed -i .orig "s/urlo\.li/$domain/g" /usr/local/etc/urloli/config.json
rm -rf /usr/local/etc/urloli/config.json.orig
go build -buildvcs=false
else
mkdir /etc/urloli
cp -i links.sample.json /etc/urloli/links.json
cp -i config.json /etc/urloli/config.json
sed -i "s/urlo\.li/$domain/g" /etc/urloli/config.json
go build
fi
mv -i urloli /usr/local/bin
if [ "$unamestr" = 'Linux' ]; then
platform=$(cat /etc/os-release | grep "^ID=")
@ -21,19 +35,44 @@ if [ "$unamestr" = 'Linux' ]; then
elif [ "$platform" = "ID=centos" -o "$platform" = "ID=rhel" ]; then
dnf install certbot
fi
certbot certonly --webroot urlo.li www.urlo.li
cp srv/linux/etc/nginx/sites-enabled/urloli.conf /etc/nginx/sites-enabled
cp srv/linux/etc/init.d/urloli /etc/init.d
if [ "$network" = 'www' ]; then
certbot certonly --webroot -d $domain -d www.$domain
cp -i srv/linux/etc/nginx/sites-enabled/urloli-clear.conf /etc/nginx/sites-enabled/urloli.conf
else
cp -i srv/linux/etc/nginx/sites-enabled/urloli-dark.conf /etc/nginx/sites-enabled/urloli.conf
fi
sed -i "s/urlo\.li/$domain/g" /etc/nginx/sites-enabled/urloli.conf
cp -i srv/linux/etc/init.d/urloli /etc/init.d
chmod +x /etc/init.d/urloli
/etc/init.d/urloli start
elif [ "$unamestr" = 'OpenBSD' ]; then
cat /etc/acme-client.conf src/openbsd/etc/acme-client.conf > /etc/acme-client.conf
if [ "$network" = 'www' ]; then
cat /etc/acme-client.conf srv/openbsd/etc/acme-client.conf > /etc/acme-client.conf
sed -i "s/urlo\.li/$domain/g" /etc/acme-client.conf
fi
cat /etc/httpd.conf srv/openbsd/etc/httpd.conf > /etc/httpd.conf
sed -i "s/urlo\.li/$domain/g" /etc/httpd.conf
rcctl restart httpd
acme-client -v urlo.li
cp srv/openbsd/etc/rc.d/urloli /etc/rc.d
if [ "$network" = 'www' ]; then
acme-client -v $domain
fi
cp -i srv/openbsd/etc/rc.d/urloli /etc/rc.d
chmod +x /etc/rc.d/urloli
rcctl start urloli
elif [ "$unamestr" = 'FreeBSD' ]; then
pkg install py39-certbot
if [ "$network" = 'www' ]; then
certbot certonly --webroot -d $domain -d www.$domain
cp -i srv/linux/etc/nginx/sites-enabled/urloli-clear.conf /usr/local/etc/nginx/sites-enabled/urloli.conf
else
cp -i srv/linux/etc/nginx/sites-enabled/urloli-dark.conf /usr/local/etc/nginx/sites-enabled/urloli.conf
fi
sed -i .orig "s/urlo\.li/$domain/g" /usr/local/etc/nginx/sites-enabled/urloli.conf
rm -rf /usr/local/etc/nginx/sites-enabled/urloli.conf.orig
cp -i srv/freebsd/usr/local/etc/rc.d/urloli /usr/local/etc/rc.d
chmod +x /usr/local/etc/rc.d/urloli
sysrc urloli_enable=YES
service start urloli
fi
exit

42
main.go
ファイルの表示

@ -10,6 +10,12 @@ import (
"unicode/utf8"
"io/ioutil"
"os"
"runtime"
)
var (
linkpath string
configpath string
)
func mkstring () string {
@ -49,7 +55,7 @@ func checkcharlim (url string) bool {
}
func geturl (key string) string {
data, err := ioutil.ReadFile("/etc/urloli/links.json")
data, err := ioutil.ReadFile(linkpath)
if err != nil {
fmt.Println("links.jsonを開けられません: ", err)
}
@ -67,7 +73,7 @@ func geturl (key string) string {
}
func checkjson (url string) bool {
data, err := ioutil.ReadFile("/etc/urloli/links.json")
data, err := ioutil.ReadFile(linkpath)
if err != nil {
fmt.Println("links.jsonを開けられません: ", err)
}
@ -85,7 +91,7 @@ func checkjson (url string) bool {
}
func insertjson (url string) string {
data, err := ioutil.ReadFile("/etc/urloli/links.json")
data, err := ioutil.ReadFile(linkpath)
if err != nil {
fmt.Println("links.jsonを開けられません: ", err)
}
@ -96,7 +102,7 @@ func insertjson (url string) string {
newstring := mkstring()
payload[newstring] = url
m, _ := json.Marshal(&payload)
ioutil.WriteFile("/etc/urloli/links.json", m, os.ModePerm)
ioutil.WriteFile(linkpath, m, os.ModePerm)
// fmt.Printf("%s\n", m)
return newstring
@ -106,10 +112,32 @@ type Page struct {
Tit string
Err string
Url string
Dom string
Lan string
}
func main () {
if runtime.GOOS == "freebsd" {
linkpath = "/usr/local/etc/urloli/links.json"
configpath = "/usr/local/etc/urloli/config.json"
} else {
linkpath = "/etc/urloli/links.json"
configpath = "/etc/urloli/config.json"
}
var domain string
data, err := ioutil.ReadFile(configpath)
if err != nil {
fmt.Println("config.jsonを開けられません: ", err)
}
var payload map[string]interface{}
json.Unmarshal(data, &payload)
for k := range payload {
domain = payload[k].(string)
}
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
@ -163,9 +191,9 @@ func main () {
} else {
res := insertjson(addurl)
if cookie.Value == "ja" {
data = &Page{Tit: "短縮済み", Lan: cookie.Value, Url: res}
data = &Page{Tit: "短縮済み", Lan: cookie.Value, Url: res, Dom: domain}
} else {
data = &Page{Tit: "Shortened", Lan: cookie.Value, Url: res}
data = &Page{Tit: "Shortened", Lan: cookie.Value, Url: res, Dom: domain}
}
tmpl = template.Must(template.ParseFiles("view/submitted.html", "view/header.html", "view/footer.html"))
}
@ -204,7 +232,7 @@ func main () {
tmpl = template.Must(template.ParseFiles("view/404.html", "view/header.html", "view/footer.html"))
}
} else if uri == "/" && qnewurl != "" {
data = &Page{Tit: "短縮済み", Url: qnewurl}
data = &Page{Tit: "短縮済み", Url: qnewurl, Dom: domain}
tmpl = template.Must(template.ParseFiles("view/submitted.html", "view/header.html", "view/footer.html"))
} else {
if cookie.Value == "ja" {

42
srv/freebsd/usr/local/etc/rc.d/urloli 実行可能ファイル
ファイルの表示

@ -0,0 +1,42 @@
#!/bin/sh
# PROVIDE: urloli
# REQUIRE: NETWORKING SYSLOG
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf to enable urloli:
#
#urloli_enable="YES"
. /etc/rc.subr
name="urloli"
rcvar="urloli_enable"
load_rc_config $name
: ${urloli_enable:="NO"}
: ${urloli_facility:="daemon"}
: ${urloli_priority:="debug"}
command="/usr/local/bin/${name}"
procname="/usr/local/bin/${name}"
pidfile="/var/run/${name}.pid"
start_cmd="${name}_start"
urloli_start() {
for d in /var/db/urloli /var/log/urloli; do
if [ ! -e "$d" ]; then
mkdir "$d"
fi
done
/usr/sbin/daemon -S -l ${urloli_facility} -s ${urloli_priority} -T ${name} \
-p ${pidfile} \
/usr/bin/env -i \
"PATH=/usr/local/bin:${PATH}" \
$command
}
run_rc_command "$1"

ファイルの表示

@ -0,0 +1,13 @@
server {
server_name urlo.li;
access_log off;
error_log off;
location / {
proxy_pass http://localhost:9910;
}
listen 80;
listen [::]:80;
}

ファイルの表示

@ -2,7 +2,7 @@
{{template "header" .}}
{{if eq .Lan "ja"}}下記のURLからアクセス出来ます。{{else}}Please enter a URL.{{end}}
<br />
<a href="https://urlo.li/{{ .Url }}">https://urlo.li/{{ .Url }}</a>
<a href="{{ .Dom }}/{{ .Url }}">{{ .Dom }}/{{ .Url }}</a>
<br /><br />
<a href="/">{{if eq .Lan "ja"}}トップページに戻る{{else}}Return to toppage{{end}}</a>
{{template "footer" .}}