Compare commits
No commits in common. "6ca8567911c28cfa1462bf531f3de65bc59978ca" and "600be44a0f8fe6a86bb4d7df8235e7b159b853b7" have entirely different histories.
6ca8567911
...
600be44a0f
1 changed files with 25 additions and 116 deletions
141
README.md
141
README.md
|
@ -1,96 +1,26 @@
|
||||||
# Linux Fax Stack Setup (HylaFax & SIP)
|
# Linux Fax Stack Setup (HylaFax & SIP)
|
||||||
|
|
||||||
Linux Fax Stack using Hylafax and t38modem.
|
- ***This guide is WIP***
|
||||||
|
- Ubuntu 20.04 LTS VM (VirtualBox, LXC?)
|
||||||
|
- **TODO: Test on Debian / RockPi / RaspberryPi**
|
||||||
|
- **TODO: Test on Eventphone Infra**
|
||||||
|
|
||||||
***THIS GUIDE IS WIP***
|
<hr/>
|
||||||
|
|
||||||
This guide was created using information from the opalvoid wiki (http://wiki.opalvoip.org/index.php?n=Main.HomePage)
|
## Setup t38modem
|
||||||
|
|
||||||
## Softwarestack
|
- **TODO: Package t38modem with service files and config**
|
||||||
|
|
||||||
### ptlib
|
## Opal
|
||||||
(legacy) library for doing a little bit of everything.
|
|
||||||
|
|
||||||
### Opal
|
- http://wiki.opalvoip.org/index.php?n=Main.HomePage
|
||||||
Voice codec used by e.g. mumble.
|
|
||||||
|
|
||||||
### t38modem
|
|
||||||
Emulates a serial modem from SIP connetion
|
|
||||||
|
|
||||||
### Hylafax
|
|
||||||
Enterprise grade software, managing physical and emulated modems.
|
|
||||||
|
|
||||||
Has some problems: https://github.com/lexbailey/compilerfax/blob/main/hylafax_is_broken
|
|
||||||
|
|
||||||
## Operating Systems
|
|
||||||
Unfortunately this software stack uses a lot of legacy software. Because of this, this guide was only tested on specific software versions
|
|
||||||
|
|
||||||
### Debian 12 Bookworm
|
|
||||||
For Debian 12, we´ll only install dependencies which are hard requirements.
|
|
||||||
For this guide we'll use ptlib 2.18.6 and opal 3.18.6.
|
|
||||||
|
|
||||||
#### Installing Requirements
|
|
||||||
First we'll need some packages
|
|
||||||
```bash
|
|
||||||
apt-get install build-essential git wget pkg-config libssl-dev libsrtp2-dev -y
|
|
||||||
```
|
|
||||||
#### Download sourcecode
|
|
||||||
Versions:
|
|
||||||
- libpt (2.18.6) https://sourceforge.net/projects/opalvoip/files/v3.18 Cygni/Stable 6/
|
|
||||||
- opal (3.18.6) https://sourceforge.net/projects/opalvoip/files/v3.18 Cygni/Stable 6/
|
|
||||||
- t38mdem (4.6.2) https://github.com/hehol/t38modem/releases/tag/4.6.2
|
|
||||||
|
|
||||||
#### ptlib
|
|
||||||
```bash
|
|
||||||
./configure
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
```
|
|
||||||
|
|
||||||
#### opal
|
|
||||||
```bash
|
|
||||||
./configure
|
|
||||||
make -j5
|
|
||||||
make runtest
|
|
||||||
make install
|
|
||||||
```
|
|
||||||
|
|
||||||
#### t38modem
|
|
||||||
If you are getting error about `-1` not being able to be casted to a `long unsigned int` due to `-Wnarrowing` inside `dle.cxx`, you can add `-Wno-narrowing` after the `CPPFLAGS` in the Makefile to disable this error
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone https://github.com/hehol/t38modem
|
|
||||||
cd t38modem
|
|
||||||
make
|
|
||||||
```
|
|
||||||
|
|
||||||
If running the t38modem executable, you should run these commands
|
|
||||||
```bash
|
|
||||||
cp /usr/local/lib/libpt.so.2.18.6 /lib
|
|
||||||
cp /usr/local/lib/libopal.so.3.18.6 /lib
|
|
||||||
```
|
|
||||||
|
|
||||||
To install t38modem run
|
|
||||||
```bash
|
|
||||||
cp ./t38modem /usr/local/bin
|
|
||||||
```
|
|
||||||
|
|
||||||
### Ubuntu 20.04 LTS
|
|
||||||
Was tested on Ubuntu 20.04 LTS VM (VirtualBox, LXC?)
|
|
||||||
|
|
||||||
You can relies heavily on http://wiki.opalvoip.org/index.php?n=Main.HomePage
|
|
||||||
|
|
||||||
Versions:
|
|
||||||
- libpt (2.18.6) https://sourceforge.net/projects/opalvoip/files/v3.18 Cygni/Stable 6/
|
|
||||||
- opal (3.18.6) https://sourceforge.net/projects/opalvoip/files/v3.18 Cygni/Stable 6/
|
|
||||||
- t38mdem (4.6.2) https://github.com/hehol/t38modem/releases/tag/4.6.2
|
|
||||||
|
|
||||||
Follow http://wiki.opalvoip.org/index.php?n=Main.BuildingPTLibUnix and http://wiki.opalvoip.org/index.php?n=Main.HomePage **but**
|
|
||||||
- Don't use `libavformat-dev` -> Compile error in Opal
|
- Don't use `libavformat-dev` -> Compile error in Opal
|
||||||
- Configure script needs `pkg-config` to be installed to find ptlib install
|
- https://sourceforge.net/projects/opalvoip/files/
|
||||||
- On SourceForge downloads `.tar.bz2` files for *nix
|
- Version 3.18.6
|
||||||
|
- **TODO: Test out other versions**
|
||||||
|
- `.tar.bz2` files for *nix
|
||||||
|
|
||||||
#### Build PTLib
|
### Build PTLib
|
||||||
|
|
||||||
- Version 2.18.6
|
- Version 2.18.6
|
||||||
- Dependency of Opal, bundled with Opal source code (SourceForge)
|
- Dependency of Opal, bundled with Opal source code (SourceForge)
|
||||||
|
@ -101,7 +31,7 @@ Follow http://wiki.opalvoip.org/index.php?n=Main.BuildingPTLibUnix and http://wi
|
||||||
sudo apt install \
|
sudo apt install \
|
||||||
g++ git make autoconf libpcap-dev libexpat1-dev libssl-dev libsasl2-dev libldap2-dev \
|
g++ git make autoconf libpcap-dev libexpat1-dev libssl-dev libsasl2-dev libldap2-dev \
|
||||||
unixodbc-dev liblua5.3-dev libv8-dev libncurses-dev libsdl2-dev \
|
unixodbc-dev liblua5.3-dev libv8-dev libncurses-dev libsdl2-dev \
|
||||||
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev pkg-config
|
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
- PTLib will be installed in the `/usr/local` tree -> set `PKG_CONFIG_PATH` to be findable (compile time)
|
- PTLib will be installed in the `/usr/local` tree -> set `PKG_CONFIG_PATH` to be findable (compile time)
|
||||||
|
@ -120,7 +50,7 @@ make
|
||||||
sudo make install
|
sudo make install
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Build Opal
|
### Build Opal
|
||||||
|
|
||||||
- Version 3.18.6
|
- Version 3.18.6
|
||||||
- http://wiki.opalvoip.org/index.php?n=Main.BuildingOpalUnix
|
- http://wiki.opalvoip.org/index.php?n=Main.BuildingOpalUnix
|
||||||
|
@ -146,11 +76,11 @@ make
|
||||||
sudo make install
|
sudo make install
|
||||||
```
|
```
|
||||||
|
|
||||||
#### t38modem
|
## t38modem
|
||||||
|
|
||||||
- https://github.com/hehol/t38modem, Version 4.6.2
|
- https://github.com/hehol/t38modem, Version 4.6.2
|
||||||
- https://github.com/T38Modem/t38modem could also be used, but seems to be not as maintained
|
- Could also use https://github.com/T38Modem/t38modem, not as maintained
|
||||||
- If you are getting error about `-1` not being able to be casted to a `long unsigned int` due to `-Wnarrowing` inside `dle.cxx`, you can add `-Wno-narrowing` after the `CPPFLAGS` in the Makefile to disable this error
|
- If you are getting error about `-1` not being able to be casted to a `long unsigned int` due to `-Wnarrowing` inside `dle.cxx`, you can add `-Wno-narrowing` to the `CPPFLAGS` in the Makefile to disable this error
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd t38modem-x.y.z/
|
cd t38modem-x.y.z/
|
||||||
|
@ -160,18 +90,11 @@ sudo cp ./t38modem /usr/local/bin
|
||||||
|
|
||||||
- t38modem can only find Opal if `LD_LIBRARY_PATH` and `PTLIBPLUGINDIR` are environment variables to the program
|
- t38modem can only find Opal if `LD_LIBRARY_PATH` and `PTLIBPLUGINDIR` are environment variables to the program
|
||||||
|
|
||||||
<hr/>
|
|
||||||
|
|
||||||
## Configuring t38modem
|
|
||||||
### Init script
|
### Init script
|
||||||
|
|
||||||
- To automatically start t38modem, you need to create Systemd services, as well as start and stop scripts
|
- To automatically start t38modem, you need to create Systemd services, as well as start and stop scripts
|
||||||
- script is adapted from https://web.archive.org/web/20111231021042/https://www.foriamroot.org/hylafax-6-0-debian-or-ubuntu-t38modem-1-0-asterisk-1-6/
|
- script is adapted from https://web.archive.org/web/20111231021042/https://www.foriamroot.org/hylafax-6-0-debian-or-ubuntu-t38modem-1-0-asterisk-1-6/
|
||||||
|
- `sudo mkdir -p /etc/t38modem/bin/`
|
||||||
First we'll create the configuration directory under `/etc` using `sudo mkdir -p /etc/t38modem/bin/`.
|
|
||||||
|
|
||||||
Then create a file named `/etc/t38modem/bin/run` using the following content.
|
|
||||||
It will be the script to manage the current status of t38modem.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
@ -216,23 +139,16 @@ esac
|
||||||
exit 0
|
exit 0
|
||||||
```
|
```
|
||||||
|
|
||||||
And then we'll have to make it executable like this.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo chmod +x /etc/t38modem/bin/run
|
sudo chmod +x /etc/t38modem/bin/run
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Quick script overview
|
|
||||||
- Using that script, it is possible to `start` or `stop` the emulated modem.
|
|
||||||
- `-t` enables debugging
|
- `-t` enables debugging
|
||||||
- More `t`'s is deeper debugging (e.g. `-tttt`)
|
- More `t`'s is deeper debugging (e.g. `-tttt`)
|
||||||
- You can of course run the t38modem command without this init script
|
- You can of course run the t38modem command without this init script
|
||||||
- If t38modem says it was able to create the virtual modem but `/dev/ttyT38-1` is not available, you do not have sufficient permissions
|
- If t38modem says it was able to create the virtual modem but `/dev/ttyT38-1` is not available, you do not have sufficient permissions
|
||||||
- Configuration is specified in `/etc/t38modem/config`
|
- Configuration is specified in `/etc/t38modem/config`
|
||||||
|
|
||||||
### Create the configuration file
|
|
||||||
Create a file using the following contents at `/etc/t38modem/config`.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# /etc/t38modem/config
|
# /etc/t38modem/config
|
||||||
T38MODEM_SIP_USERNAME="USERNAME"
|
T38MODEM_SIP_USERNAME="USERNAME"
|
||||||
|
@ -240,19 +156,18 @@ T38MODEM_SIP_PASSWORD="PASSWORD"
|
||||||
T38MODEM_SIP_SERVER="voip.example.com"
|
T38MODEM_SIP_SERVER="voip.example.com"
|
||||||
```
|
```
|
||||||
|
|
||||||
You should give only root access to the config.
|
- Give only root access to the config
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo chown root:root /etc/t38modem/config
|
sudo chown root:root /etc/t38modem/config
|
||||||
sudo chmod 700 /etc/t38modem/config
|
sudo chmod 700 /etc/t38modem/config
|
||||||
```
|
```
|
||||||
|
|
||||||
### Testing your setup
|
- You can now communicate with your modem `/dev/ttyT38-1` , just as if it was a real Hayes compatible modem (https://www.computerhope.com/atcom.htm)
|
||||||
- You can now communicate with your modem `/dev/ttyT38-1`, just as if it was a real Hayes compatible modem (https://www.computerhope.com/atcom.htm)
|
|
||||||
- Test using minicom, configure it to point to our modem. Each command is initiated by a Return
|
- Test using minicom, configure it to point to our modem. Each command is initiated by a Return
|
||||||
- Dial a number:
|
- Dial a number:
|
||||||
- Get the attention of the modem: `at` -> `OK`
|
- Get the attention of the modem: `at` -> `OK`
|
||||||
- Dial: `atd[NUMBER]`, replace '[NUMBER]' using the number, you want to call
|
- Dial: `atd0123456789`
|
||||||
- If all works correctly you should be able to answer the phone and hear a single beep
|
- If all works correctly you should be able to answer the phone and hear a single beep
|
||||||
- Answer a call:
|
- Answer a call:
|
||||||
- Get the attention of the modem: `at` -> `OK`
|
- Get the attention of the modem: `at` -> `OK`
|
||||||
|
@ -265,8 +180,6 @@ sudo chmod 700 /etc/t38modem/config
|
||||||
- Test the command before running the init script!
|
- Test the command before running the init script!
|
||||||
|
|
||||||
### systemd service
|
### systemd service
|
||||||
If you want to run a fax server, you can create a systemd service to let your emulated fax modem start automatically on system boot.
|
|
||||||
To do this you have to copy paste the following into `/etc/systemd/system/t38modem.service`.
|
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
# /etc/systemd/system/t38modem.service
|
# /etc/systemd/system/t38modem.service
|
||||||
|
@ -286,7 +199,8 @@ Restart=always
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
```
|
```
|
||||||
Enable and start the service using the following commands:
|
|
||||||
|
- Enable the service:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo systemctl daemon-reload
|
sudo systemctl daemon-reload
|
||||||
|
@ -345,8 +259,3 @@ FaxMaster: $USER # replace with fax admin account
|
||||||
CountryCode: 1
|
CountryCode: 1
|
||||||
AreaCode: 999
|
AreaCode: 999
|
||||||
```
|
```
|
||||||
|
|
||||||
## TODO
|
|
||||||
- **TODO: Test on Debian / RockPi / RaspberryPi**
|
|
||||||
- **TODO: Test on Eventphone Infra**
|
|
||||||
- **TODO: Package t38modem with service files and config**
|
|
||||||
|
|
Loading…
Reference in a new issue