diff options
author | Sergey Lukin <sergej.lukin@gmail.com> | 2015-09-14 15:32:39 +0300 |
---|---|---|
committer | Sergey Lukin <sergej.lukin@gmail.com> | 2015-09-14 16:17:22 +0300 |
commit | ebf801ed672b13c2081288e0d54ff067ba386af2 (patch) | |
tree | dffbbe9b7e829b54e5f22c773fe2264a4fe08fe8 | |
download | lists.alpinelinux.org-ebf801ed672b13c2081288e0d54ff067ba386af2.tar.bz2 lists.alpinelinux.org-ebf801ed672b13c2081288e0d54ff067ba386af2.tar.xz |
-rwxr-xr-x | README | 31 | ||||
-rwxr-xr-x | etc/hypermail/hmrc | 17 | ||||
-rwxr-xr-x | etc/hypermail/hypermail-footer.html | 2 | ||||
-rwxr-xr-x | etc/hypermail/hypermail-index-header.html | 18 | ||||
-rwxr-xr-x | etc/hypermail/hypermail-message-header.html | 18 | ||||
-rwxr-xr-x | etc/hypermail/mdir2mbox.lua | 98 | ||||
-rwxr-xr-x | etc/hypermail/mdir2mbox.sh | 119 | ||||
-rwxr-xr-x | etc/hypermail/reverse-summary-order.sh | 17 | ||||
-rwxr-xr-x | etc/hypermail/styles.css | 226 | ||||
-rwxr-xr-x | etc/periodic/15min/hyperarchives | 63 |
10 files changed, 609 insertions, 0 deletions
@@ -0,0 +1,31 @@ + +/etc/periodic/15min/hyperarchives + cron job that periodically recreate the mail archive + packages needed: + hypermail lua lua-posix + +/etc/hypermail/hmrc + hypermail config + +/etc/hypermail/mdir2mbox.lua + lua script to convert maildir to mbox format + +/var/spool/mlmmj/*/archive/ + the mlmmj archives in maildir format + postfix sends mails to pipe, mlmmj + mail files are saved into + /var/spool/mlmmj + +/var/www/domains/lists.alpinelinux.org/www + mail archive in html (created by /etc/periodic/15min/hyperarchives) + running webserver: + busybox httpd -p 80 -h /var/www/domains/lists.alpinelinux.org/www/ + + + + + + + + + diff --git a/etc/hypermail/hmrc b/etc/hypermail/hmrc new file mode 100755 index 0000000..a5307ab --- /dev/null +++ b/etc/hypermail/hmrc @@ -0,0 +1,17 @@ +language=en +about=none +spamprotect=1 +icss_url=/style.css +mcss_url=/style.css + +#folder_by_date="%y%m" +monthly_index=1 +yearly_index=1 +reverse=1 +usemeta=1 +hm_reverse=1 + +hm_ihtmlheaderfile=/etc/hypermail/hypermail-index-header.html +hm_ihtmlfooterfile=/etc/hypermail/hypermail-footer.html +hm_mhtmlheaderfile=/etc/hypermail/hypermail-message-header.html +hm_mhtmlfooterfile=/etc/hypermail/hypermail-footer.html diff --git a/etc/hypermail/hypermail-footer.html b/etc/hypermail/hypermail-footer.html new file mode 100755 index 0000000..7a15064 --- /dev/null +++ b/etc/hypermail/hypermail-footer.html @@ -0,0 +1,2 @@ +</body> +</html> diff --git a/etc/hypermail/hypermail-index-header.html b/etc/hypermail/hypermail-index-header.html new file mode 100755 index 0000000..1c53e0a --- /dev/null +++ b/etc/hypermail/hypermail-index-header.html @@ -0,0 +1,18 @@ +<!doctype html> +<html> +<head> + <meta charset="utf-8"> + <meta name="generator" content="hypermail, see http://www.hypermail-project.org/" /> + <title>%l: %s</title> + <meta name="%l" content="%s" /> + <link rel="stylesheet" type="text/css" href="../styles.css"/> + <link rel="stylesheet" type="text/css" href="http://alpinelinux.org/font.css"/> <!-- logo --> + <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Open+Sans:400,300,600" /> + <link rel="shortcut icon" href="http://alpinelinux.org/alpine-logo.ico" /> +</head> +<body> + <div class="head_top"> + <a class="alpine-logo left" href="http://alpinelinux.org"><span class="icon-alpine-logo"></span></a> + <div id="title"><h1>Mail archive<br />%l (%s)</h1></div> + </div> + <div class="footer">This archive was generated by <a href="%h">%p %v</a> : %g</div> diff --git a/etc/hypermail/hypermail-message-header.html b/etc/hypermail/hypermail-message-header.html new file mode 100755 index 0000000..e4f0512 --- /dev/null +++ b/etc/hypermail/hypermail-message-header.html @@ -0,0 +1,18 @@ +<!doctype html> +<html> +<head> + <meta charset="utf-8"> + <meta name="generator" content="hypermail, see http://www.hypermail-project.org/" /> + <title>%l: %s</title> + <meta name="%l" content="%s" /> + <link rel="stylesheet" type="text/css" href="../styles.css"/> + <link rel="stylesheet" type="text/css" href="http://alpinelinux.org/font.css"/> <!-- logo --> + <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Open+Sans:400,300,600" /> + <link rel="shortcut icon" href="http://alpinelinux.org/alpine-logo.ico" /> +</head> +<body> + <div class="head_top"> + <a class="alpine-logo left" href="http://alpinelinux.org"><span class="icon-alpine-logo"></span></a> + <div id="title"><h1>Mail archive<br />%l</h1></div> + </div> + <div class="footer">This archive was generated by <a href="%h">%p %v</a> : %g</div> diff --git a/etc/hypermail/mdir2mbox.lua b/etc/hypermail/mdir2mbox.lua new file mode 100755 index 0000000..99b6f59 --- /dev/null +++ b/etc/hypermail/mdir2mbox.lua @@ -0,0 +1,98 @@ +#!/usr/bin/lua +-- This script takes a mlmmj archive "maildir format" directory and +-- writes out an mbox formatted file to stdout +-- Copyright (c) 2009,2010 N. Angelacos under the GPL 2 License + +posix = require "posix" + +-- command line parser, or exit +check_command_line = function () + local source_dir = arg[1] + local source_time = arg[2] + + if (source_dir == nil ) then + io.stderr:write("mdir2mbox source_dir [hours]\n" .. + "Writes an mbox formatted file to stdout from the files in source_dir\n" .. + "If [hours] is given, then only files newer then [hours] are processed\n") + os.exit(-1) + end + + if (posix.stat(source_dir, "type") ~= "directory") then + io.stderr:write(source_dir .. " is not a directory\n") + os.exit(-1) + end + + return source_dir, source_time +end + +-- Get candidates +get_candidates = function (source, hours) + local all = posix.dir(source) + local candidates = {} + local timestamp = 0 + + if (hours) then + timestamp = os.time() - hours * 3600 + end + + for k,v in ipairs(all) do + local st = posix.stat(source .. "/" .. v) + if (st) and (st.type == "regular") and (st.mtime > timestamp) then + table.insert(candidates,source .. "/" .. v) + end + end + + return candidates +end + +file_to_mbox = function (path) + local fh = io.open(path) + if (fh == nil) then + return + end + local headers = "" + local l = "" + -- get headers + repeat + headers = headers .. l + l = (fh:read("*l") or "" ) .. "\n" + until (#l == 1) + + local from = string.match("\n" .. headers, "\nFrom: ([^\n]*)") + if from == nil then + from = string.match("\n" .. headers, "\nReply-To: ([^\n]*)") + end + if from == nil then + from = "<nobody@nowhere.com>" + end + from = string.match(from, "<([^>]*)>") or string.match(from, "([^ ]*)") + + + local date = string.match("\n" .. headers, "\nDate: ([^\n]*)") + if date == nil then + date = os.date ("%a, %d %b %Y %X +%z", posix.stat(path, "mtime")) + end + + local weekday,day,month,year,time,offset = string.match((date or ""), "([^,]*), +(%d+)[%s-](%a+)[%s-](%d+) ([%d:]*) ([-+%w]*)") + + print ("From " .. from .. " " .. string.format("%s %s %s %s %s", weekday, month, day, time, year, offset )) + print (headers) + + -- get rest of message + repeat + local foo = fh:read("*l") + if foo then + print(foo) + end + until (foo == nil) + +fh:close() +end + +candidates = get_candidates(check_command_line ()) + +for k,v in ipairs(candidates) do + file_to_mbox(v) +end +print ("") + diff --git a/etc/hypermail/mdir2mbox.sh b/etc/hypermail/mdir2mbox.sh new file mode 100755 index 0000000..2446e55 --- /dev/null +++ b/etc/hypermail/mdir2mbox.sh @@ -0,0 +1,119 @@ +#! /bin/bash +# +# For alpinelinux - this script /does/ require bash +# +# Get a directory name as input and convert all mail files inside +# to mbox format +# +# NOTE: processing of subdirectories not yet implemented correctly: +# all mails in subfolders are put into the same mbox +# (it would be better if an mbox file will be generated for +# each subfolder) +# NOTE: calculation of message date in case of 'From:' doesn't recognise +# time zones +# +# History: +# Feb 06 2001 Joerg Reinhardt +# - first edition +# Feb 07 2001 Joerg Reinhardt +# - added usage output +# Feb 12 2001 Joerg Reinhardt +# - mails not containing a 'From:' field but an 'X-From-Line:' or a +# 'Reply-To:' field are now recognised and also processed (e.g. put into +# the mbox file); this works fine for all my mails +# - added progress information +# - warning about corrupt files is now written to stderr +# +# +# check for argument or help argument respectively +if [[ ($1 == "") || + ($1 == "-h") || + ($1 == "--help") || + ($1 == "-help") ]]; then + echo "Usage: "$0" <Xfmail-mail-directory>"; +fi; + +# check if parameter is a directory +if [[ -d $1 ]]; then +# set target filename + dirname=`echo $1 | awk '{while(substr($0,length($0),1)=="/"){$0=substr($0,1,length($0)-1);}print $0;}'`; + mboxfile=$dirname'.mbox'; + +# check if directory is empty + if [[ `find $dirname -type f` == "" ]]; then + echo $dirname": directory empty." + exit 1; + fi; + +# prevent automatic overwriting of target + if [[ -e $mboxfile ]]; then \ + dialogtext="Write file "$mboxfile"?"; + if dialog --yesno "$dialogtext" 10 60; then + clear; + rm -vf $mboxfile; + else + clear; exit 1; + fi; + fi; + + echo "writing xfmail mail directory '$1' to '$mboxfile'."; + +# collect files inside Xfmail mail-directory and produce MBOX format +# target file + for i in `find $1/* -type f`; do +# output progress information + echo -n -e \\r" " + echo -n -e \\rprocessing $i +# look for senders email address in the order +# 'From:' +# 'X-From-Line:' +# 'Reply-To:' + shortfromflag='true'; + fromline=`grep 'From:' $i`; +# parse 'From:' field + from=`echo $fromline | awk 'BEGIN{FS="<";}{if($0~/</) {pos=index($2,">");if(pos!=0) {print substr($2,1,pos-1);}} else {pos=index($0,":");print substr($0,pos+1);}}'`; + if [[ $from == "" ]]; then + shortfromflag='false'; + fromline=`grep 'X-From-Line:' $i`; + from=`echo $fromline | awk 'BEGIN{FS="Line:";}{print $2;}'`; + if [[ $from == "" ]]; then + shortfromflag='true'; + fromline=`grep 'Reply-To:' $i`; +# parse 'Reply-To:' field + from=`echo $fromline | awk 'BEGIN{FS="<";}{if($0~/</) {pos=index($2,">");if(pos!=0) {print substr($2,1,pos-1);}} else {pos=index($0,":");print substr($0,pos+1);}}'`; + if [[ $from == "" ]]; then + echo; + echo "WARNING: "$i": no 'From:' nor 'X-From-Line:' nor 'Reply-To:' field found." >&2; + continue; + fi; + fi; + fi; + if [[ $shortfromflag == "true" ]]; then +# parse date field + dateline=`grep 'Date:' $i`; + if [[ $dateline == "" ]]; then +# set dummy date if no date field found + dateline="Date: Thu, 01 Jan 1970 00:00:00 +0000 (GMT)"; + fi; + weekday=`echo $dateline | awk '{gsub(/,/,"",$2);print $2;}'`; + day=`echo $dateline | awk '{print $3;}'`; + month=`echo $dateline | awk '{print $4;}'`; + year=`echo $dateline | awk '{print $5;}'`; + time=`echo $dateline | awk '{print $6;}'`; + diffGMT=`echo $dateline | awk '{print $7;}'`; + timezone=`echo $dateline | awk '{print $8;}'`; + +# output MBOX mail header + echo "From " $from $weekday $month $day $time $year >> $mboxfile; + else +# output long MBOX mail header found in 'X-From-Line:' field + echo $from >> $mboxfile; + fi; + +# output mail itself + cat $i >> $mboxfile; + done; + echo; +else + echo $1": not a directory."; +fi; diff --git a/etc/hypermail/reverse-summary-order.sh b/etc/hypermail/reverse-summary-order.sh new file mode 100755 index 0000000..4845cac --- /dev/null +++ b/etc/hypermail/reverse-summary-order.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +if [ -n "$1" ]; then + echo "" > /tmp/summary-rows + while read line; do + if [ -n "$(echo $line | grep '<tr><td>')" ]; then + echo $line >> /tmp/summary-rows + else + if [ -n "$(echo $line | grep '</table>')" ]; then + tac /tmp/summary-rows + fi + echo $line + fi + done < $1 +else + echo "Error in reverse sorting summary." +fi diff --git a/etc/hypermail/styles.css b/etc/hypermail/styles.css new file mode 100755 index 0000000..7df2339 --- /dev/null +++ b/etc/hypermail/styles.css @@ -0,0 +1,226 @@ +html { + position: relative; + height: 100%; +} + +html, body { + overflow-x: hidden; + margin: 0; + padding: 0; +} + +body { + background-color: white; + color: #111; + font-family: "Open Sans", sans-serif; + font-size: .9em; + position: relative; + min-height: 100%; +} + +.head_top { + background: #eee; /* Old browsers */ + /* IE9 SVG, needs conditional override of 'filter' to 'none' */ + background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMTAwJSI+CiAgICA8c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iNDAlIiBzdG9wLWNvbG9yPSIjZWVlZWVlIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iNzUlIiBzdG9wLWNvbG9yPSIjZWVlZWVlIiBzdG9wLW9wYWNpdHk9IjEiLz4KICAgIDxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2RkZGRkZCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4="); + background: -moz-linear-gradient(-45deg, #ffffff 0%, #eeeeee 40%, #eeeeee 75%, #dddddd 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,#ffffff), color-stop(40%,#eeeeee), color-stop(75%,#eeeeee), color-stop(100%,#dddddd)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(-45deg, #ffffff 0%,#eeeeee 40%,#eeeeee 75%,#dddddd 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(-45deg, #ffffff 0%,#eeeeee 40%,#eeeeee 75%,#dddddd 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(-45deg, #ffffff 0%,#eeeeee 40%,#eeeeee 75%,#dddddd 100%); /* IE10+ */ + background: linear-gradient(135deg, #ffffff 0%,#eeeeee 40%,#eeeeee 75%,#dddddd 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#dddddd',GradientType=1 ); /* IE6-8 fallback on horizontal gradient */ + vertical-align: top; + border-color: #17a; + + position: relative; + z-index: 1; + + width: 100%; + display: inline-block; + margin: 0 0 -4px 0; /* in bottom -4px to remove unneeded space after object with inline-block */ + padding: 0; + border-style: none none solid none; +} + +.head, #navbar ul { + /* background: #e8f1f6; */ + /* generate on http://www.colorzilla.com/gradient-editor/ */ + /* background: #def0f9; */ /* Old browsers */ + background: #d3e5ef; + /* IE9 SVG, needs conditional override of 'filter' to 'none' */ + background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RlZjBmOSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwJSIgc3RvcC1jb2xvcj0iI2QzZTVlZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjcwJSIgc3RvcC1jb2xvcj0iI2QzZTVlZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNiM2M1Y2YiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+"); + background: -moz-linear-gradient(top, #def0f9 0%, #d3e5ef 10%, #d3e5ef 70%, #b3c5cf 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#def0f9), color-stop(10%,#d3e5ef), color-stop(70%,#d3e5ef), color-stop(100%,#b3c5cf)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #def0f9 0%,#d3e5ef 10%,#d3e5ef 70%,#b3c5cf 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #def0f9 0%,#d3e5ef 10%,#d3e5ef 70%,#b3c5cf 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #def0f9 0%,#d3e5ef 10%,#d3e5ef 70%,#b3c5cf 100%); /* IE10+ */ + background: linear-gradient(to bottom, #def0f9 0%,#d3e5ef 10%,#d3e5ef 70%,#b3c5cf 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#def0f9', endColorstr='#b3c5cf',GradientType=0 ); /* IE6-8 */ + border-style: none none solid none; + border-color: #8db2c5; + margin: 0; + padding: 1.7em 2.3em; + +} +.head #navbar ul { + background: none; + border: none; + padding: .5em .3em; +} +.head ul.links { + padding: 0em .3em; +} + +.head h1 { + margin: 0; +} + +.mail { + /* for centering use: margin: 0 auto; */ + /*max-width: 54em;*/ + margin: 0; + padding: 1.4em 1.4em; + overflow: hidden; +} + +.foot { + background: #eee; + border-color: #d3e5ef; + border-style: solid none; + margin: 0; + padding: 0; +} + +.links { + margin: 0; + padding: 0.7em 2em; +} + +.footer { + background-color: #0D597F; + font-size: .7em; + color: white; + text-align: center; + width: 100%; + position: absolute; + bottom: 0; + margin: 0; + padding: 0.7em; + height: 1.1em; /* height with padding is 1.8em */ + overflow: hidden; +} +.footer a, .footer a:link, .footer a:hover, .footer a:active, .footer a:visited { + color: #CDCDCD; +} + +.alpine-logo { + font-size: 425%; + color: #0D597F; + padding: .1em .5em .0765em .25em; +} +a.alpine-logo:hover, a.alpine-logo:active { + text-decoration: none; +} + +#title { + float: right; + padding-right: 1em; +} +#title h1 { + text-align: right; +} + +.left { float: left; } +.right { float: right; } + +a { color: #0D597F; text-decoration: none; } +a:hover, a:active { text-decoration: underline; } + +h1, h2, h3, h4 { + margin: 1em 1ex 0.5ex 0; + color: #0D597F; +} +h1 { font-size: 1.4em; } +h2 { font-size: 1.3em; } +h3 { font-size: 1.2em; } +h4 { font-size: 1.1em; } + +table { + text-align: left; + border-spacing: 0; + margin: 1.7em 1.4em 3.2em 1.4em; + /* there is a footer (with position: absolute) in the bottom */ +} +.center table { + margin: 1.4em; /* without extra 1.8em in the bottom */ + /* in this case there is a .foot who makes bottom-margin */ +} +table.archive_list td { + font-size: 100%; +} +.foot { + margin-bottom: 1.8em; + /* there is a footer (with position: absolute) in the bottom */ +} + +tr:hover td { + background-color: #EDEDED; +} +td { + vertical-align: top; + padding: .1em .5em .1em .7em; + border-bottom: 1px solid #DCDCDC; + font-size: 85%; +} + +.center, .mail, li{ + font-size: 95%; +} + +/* .foot should not be inside ul li but hypermate generates it so */ +/* fix */ +ul li .foot { + margin: 1em 1em 0 -2.5em; + padding: 1.4em 0; + font-size: 1.1em; + background: none; + border: none; +} +ul li .foot ul li { + list-style: disc; +} +.searchbox { + margin: 0; + padding: 1.5em 1.4em 0 1.4em; +} +.searchbox form { + margin-top: .3em; +} +.searchbox a { + font-size:90% +} + + +@media all and (max-width:32.000em) { + .alpine-logo { + font-size: 325%; + width: 100%; + background-color: white; + text-align: center; + padding: .2em .1em .0765em 0; + } + .head, .foot, #title, ul, #navbar a, ul { + padding: 0; + margin: 0; + } + ul { + padding: .5em; + } + #navbar ul { + padding-top: 1em; + padding-bottom: 1em; + } + #title h1 { + margin: 0; + } +} diff --git a/etc/periodic/15min/hyperarchives b/etc/periodic/15min/hyperarchives new file mode 100755 index 0000000..ef4b68b --- /dev/null +++ b/etc/periodic/15min/hyperarchives @@ -0,0 +1,63 @@ +#!/bin/sh +# Brute Force the hypermail archives each evening + + +candidates="$(find /var/spool/mlmmj -type d -name "archive" | sed "s-/archive--; s-^.*/--")" + +for x in $candidates; do + /etc/hypermail/mdir2mbox.lua /var/spool/mlmmj/$x/archive 2>/dev/null 1>/tmp/archive.mbox + rm -rf /var/www/domains/lists.alpinelinux.org/www/$x + hypermail -c /etc/hypermail/hmrc -d /var/www/domains/lists.alpinelinux.org/www/$x \ + -m /tmp/archive.mbox -l "$x" -s html -T 2>/dev/null 1>/dev/null + rm /tmp/archive.mbox + cp /etc/hypermail/*.css /var/www/domains/lists.alpinelinux.org/www/$x/ + sh /etc/hypermail/reverse-summary-order.sh /var/www/domains/lists.alpinelinux.org/www/$x/summary.html > /tmp/summary.html + mv /tmp/summary.html /var/www/domains/lists.alpinelinux.org/www/$x/summary.html +done + +cp /etc/hypermail/styles.css /var/www/domains/lists.alpinelinux.org/www/ + +cat >/var/www/domains/lists.alpinelinux.org/www/index.html <<-EOF +<!doctype html> +<html> +<head> + <meta charset="utf-8"> + <meta name="generator" content="hypermail, see http://www.hypermail-project.org/" /> + <title>lists.alpinelinux.org Mail archives</title> + <meta name="%l" content="%s" /> + <link rel="stylesheet" type="text/css" href="styles.css"/> + <link rel="stylesheet" type="text/css" href="http://alpinelinux.org/font.css"/> <!-- logo --> + <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Open+Sans:400,300,600" /> + <link rel="shortcut icon" href="http://alpinelinux.org/alpine-logo.ico" /> +</head> +<body> + <div class="head_top"> + <a class="alpine-logo left" href="http://alpinelinux.org"><span class="icon-alpine-logo"></span></a> + <div id="title"><h1>lists.alpinelinux.org<br />Mail archives</h1></div> + </div> + <div class="searchbox"> + Google site search for <a href="http://lists.alpinelinux.org">http://lists.alpinelinux.org</a> + <form method="get" action="http://www.google.com/search?query"> + <input size="50" name="query" value=""> + <input type="hidden" name="sitesearch" value="lists.alpinelinux.org"> + <input type="submit" value="Search"> + </form> + </div> + <table class="archive_list"> +EOF + +for x in $candidates; do + echo " + <tr> + <td><a href=\"$x/summary.html\">$x</a></td> + <td><a href=\"$x/summary.html\">summary</a></td> + <td><a href=\"$x/index.html\">all</a></td> + </tr> + " >> /var/www/domains/lists.alpinelinux.org/www/index.html +done +cat >>/var/www/domains/lists.alpinelinux.org/www/index.html <<-EOF + </table> + <div class="footer">© Copyright 2015 Alpine Linux Development Team all rights reserved | <a href="/privacy-policy.html">Privacy Policy</a></div> +</body> +</html> +EOF |