user/dev discussion of public-inbox itself
 help / color / mirror / Atom feed
e59e4316785639960b6f708693b9849c46c2db61 blob 2072 bytes (raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
#!perl -w
# Copyright (C) 2020 all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
use strict;
use v5.10.1;
use Cwd qw(cwd);
use IO::Socket::UNIX;

if (eval { require IO::FDPass; 1 }) { # use daemon to reduce load time
	my $path = do {
		my $runtime_dir = ($ENV{XDG_RUNTIME_DIR} // '') . '/lei';
		if ($runtime_dir eq '/lei') {
			require File::Spec;
			$runtime_dir = File::Spec->tmpdir."/lei-$<";
		}
		unless (-d $runtime_dir && -w _) {
			require File::Path;
			File::Path::mkpath($runtime_dir, 0, 0700);
		}
		"$runtime_dir/sock";
	};
	my $sock = IO::Socket::UNIX->new(Peer => $path, Type => SOCK_STREAM);
	unless ($sock) { # start the daemon if not started
		my $err = $! + 0;
		my $env = { PERL5LIB => join(':', @INC) };
		my $cmd = [ $^X, qw[-MPublicInbox::LEI
			-E PublicInbox::LEI::lazy_start(@ARGV)],
			$path, $err ];
		require PublicInbox::Spawn;
		waitpid(PublicInbox::Spawn::spawn($cmd, $env), 0);
		warn "lei-daemon exited with \$?=$?\n" if $?;

		# try connecting again anyways, unlink+bind may be racy
		$sock = IO::Socket::UNIX->new(Peer => $path,
						Type => SOCK_STREAM) // die
			"connect($path): $! (after attempted daemon start)";
	}
	my $pwd = $ENV{PWD};
	my $cwd = cwd();
	if ($pwd) { # prefer ENV{PWD} if it's a symlink to real cwd
		my @st_cwd = stat($cwd) or die "stat(cwd=$cwd): $!\n";
		my @st_pwd = stat($pwd);
		# make sure st_dev/st_ino match for {PWD} to be valid
		$pwd = $cwd if (!@st_pwd || $st_pwd[1] != $st_cwd[1] ||
					$st_pwd[0] != $st_cwd[0]);
	} else {
		$pwd = $cwd;
	}
	local $ENV{PWD} = $pwd;
	$sock->autoflush(1);
	IO::FDPass::send(fileno($sock), $_) for (0..2);
	my $buf = "$$\0\0>" . join("]\0[", @ARGV) . "\0\0>";
	while (my ($k, $v) = each %ENV) { $buf .= "$k=$v\0" }
	$buf .= "\0\0";
	print $sock $buf or die "print(sock, buf): $!";
	local $/ = "\n";
	while (my $line = <$sock>) {
		$line =~ /\Aexit=([0-9]+)\n\z/ and exit($1 + 0);
		die $line;
	}
} else { # for systems lacking IO::FDPass
	require PublicInbox::LEI;
	PublicInbox::LEI::oneshot(__PACKAGE__);
}
debug log:

solving e59e4316 ...
found e59e4316 in https://80x24.org/public-inbox.git

user/dev discussion of public-inbox itself

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://public-inbox.org/meta
	git clone --mirror http://czquwvybam4bgbro.onion/meta
	git clone --mirror http://hjrcffqmbrq6wope.onion/meta
	git clone --mirror http://ou63pmih66umazou.onion/meta

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V1 meta meta/ https://public-inbox.org/meta \
		meta@public-inbox.org
	public-inbox-index meta

Example config snippet for mirrors.
Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.mail.public-inbox.meta
	nntp://ou63pmih66umazou.onion/inbox.comp.mail.public-inbox.meta
	nntp://czquwvybam4bgbro.onion/inbox.comp.mail.public-inbox.meta
	nntp://hjrcffqmbrq6wope.onion/inbox.comp.mail.public-inbox.meta
	nntp://news.gmane.io/gmane.mail.public-inbox.general
 note: .onion URLs require Tor: https://www.torproject.org/

code repositories for the project(s) associated with this inbox:

	https://80x24.org/public-inbox.git

AGPL code for this site: git clone https://public-inbox.org/public-inbox.git