chyba segmentace

dokonce i v roce 2018, kdy jsou moderní aplikace pro rychlé zasílání zpráv, jako je Gitter nebo extrémně populární Slack, stejně všudypřítomné jako vždy, zůstává IRC preferovaným způsobem komunikace pro mnoho vývojářů. Je to jednoduché, stabilní, všudypřítomné a hlavně plně decentralizované. Jedná se však o starý protokol, o kterém IRC kope Od počátku devadesátých let (protokol IRC RFC byl publikován v roce 1993). Jako takový, IRC přichází se svými omezeními.

jedním z nejpozoruhodnějších pro mě je nedostatek archivace zpráv. Všechny zprávy odeslané a přijaté klientem IRC nejsou uloženy ve vašem počítači, ani se vám nepodaří přehrát minulé konverzace v kanálu, ke kterému jste se právě připojili. Pokaždé, když se přihlásíte do chatovací místnosti IRC, dostanete čistý štít. To je nepohodlné, vzhledem k tomu, že IRC je velmi často používán jako komunikační kanál mimo pásmo. Připojíte se k kanálu, zanechte otázku a počkejte několik hodin, než někdo odpoví, Protože lidé nemají tendenci sledovat IRC tak často jako u jiných aplikací pro rychlé zasílání zpráv.

naštěstí a možná ne překvapivě je to již nějakou dobu vyřešený problém. Nejrychlejší a nejjednodušší metodou je navázání trvalého připojení k IRC serveru ze serveru pod naší kontrolou, který je zapnutý 24/7, a navázání relace SSH / tmux s ním pokaždé, když chceme zkontrolovat IRC. Až budeme hotovi, stačí odpojit relaci s C-a d na obrazovce GNU nebo C-b d na tmuxu. To řeší problém chybí všechny zprávy odeslané v kanálu, když jsme byli pryč, ale to je asi vše, co dostanete. Pokud hledáte řešení, které nabízí mnohem víc než toto, je čas se podívat na vyhazovače.

co je to vyhazovač server?

bouncer server je server, který používáme jako proxy pro přístup k IRC. Vyhazovač vezme naše IRC detaily a naváže spojení s IRC serverem naším jménem a dokonce se připojí k seznamu předdefinovaných kanálů.

pak se připojíme k tomuto vyhazovači serveru z našeho IRC klienta namísto přímo k IRC serveru a od tohoto okamžiku budou naše zprávy „odraženy“ vyhazovačem na cílový server.

vyhazovači nabízejí několik výhod, včetně:

  • trvalé relace serverů a kanálů
  • protokolování konverzací kanálů do textového souboru pro archivaci
  • ověření uživatele Bouncer
  • automatické ověřování serveru IRC přes NickServ nebo SASL
  • Automatizujte stavy uživatelů IRC (nechte & pryč zprávy atd.)
  • a mnohem více!

nastavení bouncer server na AWS

chystáme se nastavit vlastní Bouncer server pomocí ZNC, nejpopulárnější aplikace bouncer server, na levnou instanci AWS EC2.

spusťte novou instanci Ubuntu Server 16.04 t2.nano EC2 se všemi výchozími nastaveními kromě následujících:

  • uživatelská data: instalace bouncer software (ZNC), vytvořit uživatele pro proces a adresář pro něj ukládat své soubory a soubor systemd jednotky jej spustit při spuštění.
#!/bin/bashapt-get update && apt-get dist-upgrade -y && \apt-get install -y znc znc-dev znc-perl znc-python znc-tcl && \useradd -M -s /bin/false znc && usermod -L znc && \mkdir /opt/znc && \cat > /etc/systemd/system/znc.service <<- EOFDescription=ZNC IRC BouncerExecStart=/usr/bin/znc -d /opt/zncExecReload=/bin/kill -HUP $MAINPIDKillMode=processRestart=alwaysType=forkingUser=zncWantedBy=multi-user.targetAlias=znc.serviceEOF

vzhledem k tomu, že soubor systemd jednotky byl umístěn přímo v /etc/systemd/system, bude automaticky spuštěn při spuštění. Není třeba to povolit.

  • podsíť: ujistěte se, že instance je spuštěna ve veřejné podsíti s připojenou internetovou bránou, takže je snadno přístupná z Internetu.
  • EBS volume: vaše ZNC (Bouncer) heslo, IRC server heslo a IRC konverzace protokoly budou uloženy v prostém textu souborů, takže důrazně doporučujeme šifrovat hlasitost.
  • vytvořte novou skupinu zabezpečení, která se k ní připojí, aby byly otevřeny následující porty:
    • SSH: takže můžeme nakonfigurovat instanci
    • TCP port 7078 (ve skutečnosti to udělá jakýkoli nezasloužený port): ZNC poslechový port
  • nastavte jeho značku“ Name “ na něco smysluplného, pokud si přejete

nyní Vygenerujte novou elastickou IP adresu a přidružte ji k instanci.

instalace ZNC

SSH do nově vytvořené instance EC2 a spusťte proces nastavení ZNC poprvé, který nás požádá o nastavení poslechového portu pro vyhazovač a vytvoření administrátorského účtu. Vyberte možnosti, jak je uvedeno níže.

$ znc --makeconf Checking for list of available modules... -- Global settings -- Listen on port (1025 to 65534): 7078 Listen using SSL (yes/no) : yes Verifying the listener... Unable to locate pem file: , creating it Writing Pem file ... Enabled global modules -- Admin user settings -- Username (alphanumeric): admin Enter password: Confirm password: Nick : Alternate nick : Ident : Real name (optional): Bind host (optional): Enabled user modules Set up a network? (yes/no) : no Writing config ... To connect to this ZNC you need to connect to it as your IRC server using the port that you supplied. You have to supply your login info as the IRC server password like this: user/network:pass. Try something like this in your IRC client... /server <znc_server_ip> +7078 admin:<pass> To manage settings, users and networks, point your web browser to https://<znc_server_ip>:7078/ Launch ZNC now? (yes/no) : no

tím se vygeneruje konfigurační soubor, který bude uložen v domovském adresáři pro uživatele, kterého jsme ssh ‚ D v as (ubuntu pokud používáte výchozí server Ubuntu Ami poskytovaný Amazonem). Přesuneme nově vytvořené konfigurační soubory z tohoto adresáře do /opt/znc a udělíme znc vlastnická práva uživatele.

$ sudo mv ~/.znc/* /opt/znc$ rmdir ~/.znc$ sudo chown -R znc:znc /opt/znc

nyní můžete začít ZNC

$ sudo systemctl start znc

ujistěte se, že ZNC úspěšně začal

$ systemctl status znc● znc.service - ZNC IRC Bouncer Loaded: loaded (/etc/systemd/system/znc.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2018-07-29 13:02:07 UTC; 21min ago Process: 1181 ExecStart=/usr/bin/znc -d /opt/znc (code=exited, status=0/SUCCESS) Main PID: 1245 (znc) Tasks: 1 Memory: 10.8M CPU: 54ms CGroup: /system.slice/znc.service └─1245 /usr/bin/znc -d /opt/znc

konfigurace ZNC

první fáze konfigurace je dokončena. Nyní musíme přidat uživatele, kterého se přihlásíme jako, a IRC síť, která se k tomuto uživateli přidruží.

Chcete-li použít zbývající nastavení na vyhazovač, připojíme se k jeho webovému konfiguračnímu frontendu, který je k dispozici na portu, který jsme nakonfigurovali tak, aby poslouchal (v mém případě port 7078). Takže v prohlížeči zadejte následující adresu URL: https://<bouncer_ip_address>:7078. Pokud se zobrazí chyba“ chybějící certifikát HTTPS “ nebo podobná, můžete to bezpečně ignorovat a dát prohlížeči pokyn, aby pokračoval. Nyní se přihlaste jako správce, kterého jste dříve vytvořili, pomocí zadaného hesla.

ZNC web frontend

jakmile se přihlásíte, můžete kliknout na položku nabídky“ Globální nastavení “ na pravé straně a podívat se na celkovou konfiguraci vyhazovače.

ZNC nainstaluje sbírku modulů (sdílených objektů) v /usr/lib/znc, které můžete načíst nebo uvolnit, když je démon spuštěn. Pokud se posunete dolů, uvidíte seznam globálních modulů, které ovlivňují činnost vyhazovače, které můžete povolit/zakázat přepnutím zaškrtávacích políček ve sloupci“ Název“. V mém případě mám povoleno“ log“, protože chci, aby můj vyhazovač ukládal do textového souboru všechny zprávy odeslané v kanálech, kterých jsem členem.

ZNC Global Modules

klikněte na“ Správa uživatelů “ v pravém menu pro vyvolání panelu Konfigurace uživatele. Nyní klikněte na „Přidat“ pro přidání nového uživatele a vyplňte podrobnosti: uživatelské jméno, heslo (všimněte si, že toto heslo bude použito pouze k ověření pomocí ZNC, nebude použito se serverem IRC), podrobnosti IRC a seznam modulů, které chcete pro tohoto uživatele konkrétně načíst.

 ZNC podrobnosti o uživateli

poté klikněte na“ Uložit a pokračovat “ dole, abychom mohli pro tohoto uživatele přidat IRC síť.

přidání sítě uživateli

vyplňte údaje pro IRC síť, se kterou bude tento uživatel přidružen, a případně povolte všechny moduly, které chcete automaticky načíst při připojení k této síti. Jeden takový modul může být sasl, pokud chcete ověřit pomocí této metody na IRC serveru. Povolím tento modul v této síti.

do textového pole“ servery této IRC sítě “ zadáte informace o IRC serveru, ke kterému se chcete připojit, ve formátu

<server> <port> <irc_password>

připojte k portu znaménko plus, které označuje připojení SSL. <irc_password> je heslo, které jste použili k registraci na IRC server pomocí příkazu /NickServ, který je zcela oddělen od hesla, které jste nastavili pro ověření výše uvedeného vyhazovače.

Chcete-li se například připojit k síti Freenode IRC přes SSL s dříve registrovaným účtem, obsah tohoto textového pole by byl

irc.freenode.net +6697 myNickServPassword123

jinak by to mohlo být jednoduše

irc.freenode.net 6667

konfigurace IRC sítě

všimnete si, že vaše IRC heslo je uloženo v prostém textu na serveru. Proto jsem během kroků nastavení VPS doporučil šifrovat hlasitost EBS a přirozeně mít velmi přísnou kontrolu nad tím, kdo má přístup k vašemu vyhazovacímu serveru. Doporučuje se uzamknout skupinu zabezpečení VPS, aby bylo možné povolit pouze příchozí připojení z velmi malé podmnožiny IP.

klikněte znovu na „Uložit a pokračovat“. Nyní můžete volitelně přidat seznam kanálů, které chcete vyhazovač se přihlásit do, ale to bude také pamatovat ty, které se připojíte sami, když se k němu připojíte.

nyní máme AWS VPS (Virtual Private Server) hostující plně funkční instalaci ZNC. Poslední věc, kterou musíte udělat, je ukázat našeho klienta IRC na vyhazovače.

připojení k vyhazovači

budu používat irssi pro připojení k vyhazovači. Zde jsou kroky, které jsem sledoval, aby to fungovalo. Váš počet najetých kilometrů se může lišit u jiného klienta, jako je HexChat nebo mIRC, ale samotné podrobnosti by měly zůstat většinou stejné.

spusťte irssi s uvedením Přezdívky pro připojení k vyhazovači

$ irssi -n <username>

vytvořte novou síť s názvem freenodebnc a přidejte do ní detaily vyhazovače. Protože se připojuji k serveru Freenode IRC přes SSL, používám port, který vystavuje pro zabezpečená připojení, 6697 a předávám příznak -ssl. username/freenode je kombinace uživatelského jména a sítě, kterou jsme vytvořili na panelu Konfigurace uživatele ZNC. password je heslo, které používáme k ověření pomocí ZNC, nikoli na IRC server.

/network add freenodebnc/server add -net freenodebnc -auto -ssl <bouncer_ip> 6697 username/freenode:password

Spusťte následující příkazy pro uložení těchto změn do konfiguračního souboru irssi a připojte se k vyhazovači.

/save/connect freenodebnc

pokud jste načetli modul SASL (můžete zkontrolovat, zda je načten spuštěním /msg *status ListModules), musíte jej v tomto okamžiku nakonfigurovat. Jakmile jste připojeni k vyhazovači, spusťte na svém IRC klientovi následující příkazy.

/query *saslmechanism external plainset <NickServName> <password>

kde NickServName je vaše registrované uživatelské jméno u IRC serveru a password heslo, které používáte k ověření na výše uvedený server.

nyní se znovu připojte k IRC síti pomocí rekonfigurovaného modulu SASL.

/msg *status jump

může trvat několik okamžiků, než vyhazovač naváže spojení (zejména pokud se připojujete přes SSL a používáte ověřovací mechanismy, jako je SASL), ale poté získáte trvalou a bezpečnou relaci se serverem IRC, kterou můžete kdykoli pozastavit a obnovit. Šťastné chatování!