PHPackages                             igorgoroun/ftns - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. igorgoroun/ftns

ActiveProject[Utility &amp; Helpers](/categories/utility)

igorgoroun/ftns
===============

Server-side package for FTNW point system

0.2.3(9y ago)424[1 issues](https://github.com/igorgoroun/FTNS/issues)GPL-2.0PHPPHP ^5.5|^7.0

Since Sep 22Pushed 9y ago2 watchersCompare

[ Source](https://github.com/igorgoroun/FTNS)[ Packagist](https://packagist.org/packages/igorgoroun/ftns)[ RSS](/packages/igorgoroun-ftns/feed)WikiDiscussions master Synced 4w ago

READMEChangelog (5)Dependencies (6)Versions (6)Used By (0)

FTNS - server side system for FTNW &amp; ifmail &amp; binkd
===========================================================

[](#ftns---server-side-system-for-ftnw--ifmail--binkd)

Серверная часть фидоноды ftns/ftnw, её задачи и функции таковы:

- Прием сообщений от ifmail/ifnews и помещение их в спулы.
- Тоссинг rfc-0822/rfc-1036 спуленых сообщений и раскидывание их классическим поинтам и в базу для ббс-поинтов.
- Сканирование эхо- и нетмыла в базе и помещение в спулы тоссера.
- Роутинг мыла (пока заплатка, в разработке).
- Подписка (отписка) на эхи у аплинков.
- Areafix - общий для классических и ббс-поинтов.
- Синхронизация поинтов между базой ftnw и конфигом ftns.
- Синхронизация эх узла между конфигом ftns и базой ftnw.
- Синхронизация подписок поинтов между конфигом ftns и базой ftnw.

Замена ifmail на встроенный тоссер FTS-0001 пакетов планируется, но позже.

Установка
---------

[](#установка)

Вся установка делается с помощью `composer`, сначала создаем директорию там, где на нужно:

```
mkdir ftns && cd ftns

```

Загружаем файлы:

```
composer require igorgoroun/ftns

```

Выполняем пост-инсталляционный скрипт:

```
cd vendor/igorgoroun/ftns/ && composer run-script post-install-cmd

```

Настройка
---------

[](#настройка)

Теперь возвращаемся в корень, туда скопировалась директория `etc/`, основной файл `ftns` и маленький bash-скрипт `ftns-toss`.

### etc/ftns.yml

[](#etcftnsyml)

Главный конфиг-файл, правим согласно нашим потребностям.

### ftns-toss

[](#ftns-toss)

Shell-скрипт проверяющий наличие сообщений в спуле нетмейла и эхомейла и запускающий соответсвующий тоссер. Путь к спул-директории нетмыла:

```
NM_DIR="/var/spool/ftn/netmailspool/"

```

Путь к спул-директории эхомыла:

```
EM_DIR="/var/spool/ftn/echospool/"

```

Полный абсолютный путь с файлу `ftns`:

```
FTNS_PATH=“/opt/ftns/ftns"

```

Команды ftns
------------

[](#команды-ftns)

`./ftns list` - список доступных команд. Для каждой команды можно получить подсказку, например:

```
./ftns help echomail:post

```

#### Echomail

[](#echomail)

`./ftns echomail:spool` - принимает на STDIN сообщение от ifnews и складывает в echomail\_spool.

`./ftns echomail:toss` - тоссит сообщения в echomail\_spool и раскладыает их поинтам.

`./ftns echomail:scan` - смотрит новые сообщения в БД и складывает их для тоссера в echomail\_spool.

`./ftns echomail:subscribe Point_IFAddr Area1 Area2 …` - Подписывает поинта на эхи. Point\_IFAddr в формате *p34.f4.n466.z2.fidonet.org*.

`./ftns echomail:newarea Uplink_IFAddr Area1 Area2 …` - Подписаться у аплинка на эху и внести её в конфиг. Uplink\_IFAddr в формате *f55.n466.z2.fidonet.org*.

`./ftns echomail:post -s “Subject” -m “Message” -t “Tearline” -o “Origin” ECHOAREA` - Отправить сообщение в эху

#### Netmail

[](#netmail)

`./ftns netmail:spool -f From_RFC -t To_RFC ` - принимает от ifmail на STDIN сообщения и складывает их в netmail\_spool

`./ftns netmail:toss` - тоссит сообщения в netmail\_spool и раскладыает их поинтам.

`./ftns netmail:scan` - смотрит новые нетмейл-сообщения в БД и складывает их для тоссера в netmail\_spool.

#### Sync

[](#sync)

`./ftns sync:points` - Синхронизирует поинтов в ftns с конфиг-файлом ftns.

`./ftns sync:subscr` - Синхронизирует подписки поинтов между ftns и ftnw.

`./ftns sync:areas` - Синхронизирует список доступных эх между ftns и ftnw.

Настройки ifmail
----------------

[](#настройки-ifmail)

Покажу только нюансы связанные с ftns.

#### Areas

[](#areas)

У меня только одна запись в файле, этого достаточно:

```
* * world

```

#### config

[](#config)

Важные две настройки - отвязка от классической связки ifmail+sendmail+innd:

```
sendmail /var/www/fidonews-server/ftns netmail:spool --from=$F --to=$T

```

```
rnews /var/www/fidonews-server/ftns echomail:spool

```

Остальные настройки - на ваше усмотрение, там фактически ничего больше нет важного, кроме данных сисопа.

Настройки binkd
---------------

[](#настройки-binkd)

Ftns генерирует файл *points.inc* с паролями поинтов в директории конфигов **binkd**, у меня это `/etc/binkd`, так что этот файл должен быть создан и доступен для записи. В конфиг binkd должна быть добавлена команда для подключения файла:

```
include /etc/binkd/points.inc

```

crontab
-------

[](#crontab)

Как и что запускать - дело ваше, у меня все скрипты работают по крону, примерно вот так:

```
*/1 * * * * ftn /usr/lib/ifmail/ifpack 2>&1
*/1 * * * * ftn /usr/lib/ifmail/ifunpack 2>&1
*/1 * * * * ftn /usr/bin/php /var/www/fidonews-server/ftns netmail:scan 2>&1
*/3 * * * * ftn /usr/bin/php /var/www/fidonews-server/ftns echomail:scan 2>&1
*/2 * * * * ftn /var/www/fidonews-server/ftns-toss 2>&1
*/10 * * * * ftn /usr/bin/php /var/www/fidonews-server/ftns sync:subscr 2>&1
*/10 * * * * ftn /usr/bin/php /var/www/fidonews-server/ftns sync:points 2>&1
0 0 * * * ftn /usr/bin/php /var/www/fidonews-server/ftns echomail:post r46.alive -m "Ping" -s "Alive" 2>&1

```

###  Health Score

24

—

LowBetter than 31% of packages

Maintenance15

Infrequent updates — may be unmaintained

Popularity11

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~38 days

Total

5

Last Release

3415d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/0206e12b75dcdb91d163b5eec03170bef57d00692226e713632285d6af48df14?d=identicon)[Igor Goroun](/maintainers/Igor%20Goroun)

---

Top Contributors

[![igorgoroun](https://avatars.githubusercontent.com/u/608121?v=4)](https://github.com/igorgoroun "igorgoroun (2 commits)")

### Embed Badge

![Health badge](/badges/igorgoroun-ftns/health.svg)

```
[![Health](https://phpackages.com/badges/igorgoroun-ftns/health.svg)](https://phpackages.com/packages/igorgoroun-ftns)
```

###  Alternatives

[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.4M196](/packages/sulu-sulu)[matomo/matomo

Matomo is the leading Free/Libre open analytics platform

21.6k38.2k](/packages/matomo-matomo)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

585.4M524](/packages/shopware-core)[drupal/core

Drupal is an open source content management platform powering millions of websites and applications.

19664.8M1.6k](/packages/drupal-core)[drupal/core-recommended

Locked core dependencies; require this project INSTEAD OF drupal/core.

6941.5M396](/packages/drupal-core-recommended)[typo3/cms

TYPO3 CMS is a free open source Content Management Framework initially created by Kasper Skaarhoj and licensed under GNU/GPL.

1.2k1.9M122](/packages/typo3-cms)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
