Unofficial

BitchMyQnap

BitchMyQnap: IRC on your QNAP

Clients, a bot, a server with services, a bouncer and FTP.

BitchMyQnap puts a whole IRC setup on the NAS: the clients irssi and BitchX, the Eggdrop bot with Tcl, the UnrealIRCd server with Anope services, the ZNC bouncer and Pure-FTPd.

The package holds the programs. The Editor project in Bucket & Code Server IDE adds a wizard that asks for the names and your passwords, writes the configurations and starts a small network.

In App Center: (example) BitchMyQnap · Intel and AMD (x86_64) · QTS 6.0 or QuTS hero 6.0 or newer · freeware

The network running on a NAS

./irc.sh start

unrealircd: started

anope: started

znc: started

eggdrop: started

ftp: started

./irc.sh status

unrealircd: running (pid 10590)

anope: running (pid 10619)

znc: running (pid 10651)

eggdrop: running (pid 10683)

ftp: running (pid 10713)

What is inside

The recipe list names these programs, and the build adds the libraries they need.

Clients

irssi
the terminal IRC client, with TLS
BitchX
the classic terminal client, with TLS

Bot

eggdrop
Eggdrop 1.10, the IRC bot
tclsh
Tcl 8.6, the bot's scripting language

Server and services

unrealircd
UnrealIRCd 6, the IRC server, with unrealircdctl
services
Anope 2.0: NickServ, ChanServ, OperServ and the others

Bouncer

znc
ZNC 1.9 with its web panel; no Perl, Python or Tcl modules

FTP

pure-ftpd
Pure-FTPd with TLS
pure-pw
its own user database

Tools

busybox
chpst starts each program as its own user
screen
keeps a client running after the terminal closes

How it looks

Real screens from a small test network on a QNAP NAS: the wizard's channel, its bot, and two clients.

irssi: a user joins the channel bitchmyqnap, with the nicks sysop and BitchBot
irssi over TLS in the wizard's channel, with the operator and the bot.
BitchX: server statistics and the join to the channel bitchmyqnap
BitchX in the same channel.

Who it helps

You want a chat of your own

UnrealIRCd and Anope give you registered nicks and channels on a server you run yourself, for friends or a team.

You stay on IRC all day

ZNC stays connected while your computer sleeps, and irssi keeps running in screen after the terminal closes.

You like bots

Eggdrop sits in your channel, and you extend it with Tcl scripts.

Install it

  1. Add this site's repository to App Center once: the three steps.
  2. In the repository's list find (example) BitchMyQnap and press Install.
  3. Turn on SSH in Control Panel › Network & File Services › Telnet / SSH.

Start it

BitchMyQnap has no window of its own: you run it from a terminal. Sign in over SSH as admin and start a client. For a network of your own, use the project below.

ssh admin@192.0.2.10                      # your NAS's address
irssi -c irc.example.com -p 6697 --tls    # any IRC server over TLS

A network in three commands

The package holds the programs, and the wizard and the runner stay in the Editor project BitchMyQnap, so this part needs Bucket & Code. Build and activate the app as shown below, then run this in the Editor's terminal:

make setup       # the wizard: names, your passwords, the network folder
make start       # starts the network's programs
make irc-status  # which of them run

The wizard asks for the network's name, the server's and the services' names, the channel, your nick, the bot's nick and whether to set up FTP. It keeps your passwords only as hashes. The link password between UnrealIRCd and Anope and the cloak keys are random.

Each program runs as the user 65534, and irc.sh signals a program only when /proc shows its own binary running as that user.

Ports of the running network

PortWhat listens
6667UnrealIRCd, IRC, on every address
6697UnrealIRCd, IRC over TLS, on every address
9669UnrealIRCd, the services' link, on 127.0.0.1 only
9667ZNC, IRC over TLS and the web panel, on every address
9021, 9022-9031Pure-FTPd, control and passive ports, on every address

After the start

  • Connect a client to port 6697, and /oper with your nick and password makes you an IRC operator.
  • /msg NickServ REGISTER registers your nick. Anope makes that nick the services' root.
  • /msg the bot hello: the first person to say hello becomes its owner.
  • ZNC's web panel is on port 9667 over HTTPS, and an IRC client connects to the same port with TLS.

Good to know

  • UnrealIRCd, ZNC and Eggdrop refuse to run as root. To start them from the package alone, you write their configurations and pick a user yourself.
  • The network's programs stop when the NAS restarts. make start starts them again.
  • On QuTS hero a folder inside a share can be closed to the user 65534 by the share's ACL. The wizard checks this at the end and names the folder if it is closed. A folder on the app's own volume works.
  • BitchX opens each line with two 8-bit marks that a UTF-8 terminal cannot draw. The picture above leaves them blank.

Change it and build it again, whenever you want

BitchMyQnap is an example from Bucket & Code Server IDE, our free development environment for QNAP. It compiles each program from source on your own NAS and packs the result as a QPKG.

From the panel

  1. In Bucket & Code open Apps, then the Examples tab. Add Ubuntu 24.04 builder (full) if you have no builder environment yet.
  2. Press Use this example on BitchMyQnap (geek set 3). The app appears with its recipes, and nothing is built yet.
  3. Press Build, then Activate. Export makes a QPKG once a QDK toolchain is installed.

From a terminal

The Editor project BitchMyQnap holds the same list in recipes.txt. Take a line out or add a recipe from the library, then run this in the Editor's terminal:

make app        # makes the app from recipes.txt
make build      # builds it and follows the job
make activate   # /usr/app/BitchMyQnap now points to the build
make qpkg       # exports a QPKG (needs a QDK toolchain)

The QPKG holds the app's programs. setup.sh and irc.sh stay in the project.

The New app page of Bucket & Code's App Builder See it done in Bucket & Code Compile Any App You Need Without Linux Skills: Build QPKG & Deploy Easily (Freeware) 8 min on YouTube

Related pages