Skip to content

Commit

Permalink
Merge branch 'develop' for release v3.29.0
Browse files Browse the repository at this point in the history
  • Loading branch information
epoupon committed May 26, 2022
2 parents 3f87d6b + 24995ed commit 7cb2a7d
Show file tree
Hide file tree
Showing 137 changed files with 2,303 additions and 3,006 deletions.
4 changes: 2 additions & 2 deletions .lgtm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ extraction:
- libtag1-dev
- libpam0g-dev
after_prepare:
- export WT_VERSION=4.5.0
- export WT_VERSION=4.7.2
- export WT_INSTALL_PREFIX=${LGTM_WORKSPACE}/wt-${WT_VERSION}
- pushd ${LGTM_WORKSPACE}
- git clone https://github.com/emweb/wt.git ${LGTM_WORKSPACE}/wt
Expand All @@ -28,7 +28,7 @@ extraction:
- popd
configure:
command:
- export WT_VERSION=4.5.0
- export WT_VERSION=4.7.2
- export WT_INSTALL_PREFIX=${LGTM_WORKSPACE}/wt-${WT_VERSION}
- cmake -DCMAKE_PREFIX_PATH=${WT_INSTALL_PREFIX} -DCMAKE_BUILD_TYPE=Release

55 changes: 0 additions & 55 deletions .travis.yml

This file was deleted.

2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ project(lms)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules/)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
if (UNIX)
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined")
endif ()
Expand Down
6 changes: 3 additions & 3 deletions Dockerfile-build
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
FROM --platform=$BUILDPLATFORM tonistiigi/xx AS xx
FROM --platform=$BUILDPLATFORM alpine:3.14
FROM --platform=$BUILDPLATFORM alpine:3.16

ARG BUILD_PACKAGES="\
clang \
Expand Down Expand Up @@ -30,7 +30,7 @@ RUN xx-apk add --no-scripts --no-cache ${LMS_BUILD_PACKAGES}
ARG PREFIX="/tmp/install"

# STB
ARG STB_VERSION=b42009b3b9d4ca35bc703f5310eedc74f584be58
ARG STB_VERSION=af1a5bc352164740c1cc1354942b1c6b72eacb8a
RUN \
DIR=/tmp/stb && mkdir -p ${DIR} && cd ${DIR} && \
curl -sLO https://github.com/nothings/stb/archive/${STB_VERSION}.tar.gz && \
Expand All @@ -47,4 +47,4 @@ RUN \
PKG_CONFIG_PATH=/$(xx-info)/usr/lib/pkgconfig cmake /tmp/lms/ -DCMAKE_INCLUDE_PATH=${PREFIX}/include -DCMAKE_BUILD_TYPE=${LMS_BUILD_TYPE} $(xx-clang --print-cmake-defines) -DCMAKE_PREFIX_PATH=/$(xx-info)/usr/lib/cmake -DBUILD_TESTING=${BUILD_TESTS} && \
VERBOSE=1 make -j$(nproc) && \
xx-verify src/lms/lms && \
xx-info is-cross || make test
(xx-info is-cross || make test)
11 changes: 8 additions & 3 deletions Dockerfile-release
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM alpine:3.14 AS build
FROM alpine:3.16 AS build

WORKDIR /tmp/workdir

Expand Down Expand Up @@ -77,7 +77,7 @@ RUN \
make distclean

# WT
ARG WT_VERSION=4.5.0
ARG WT_VERSION=4.7.2
RUN \
DIR=/tmp/wt && mkdir -p ${DIR} && cd ${DIR} && \
curl -sLO https://github.com/emweb/wt/archive/${WT_VERSION}.tar.gz && \
Expand Down Expand Up @@ -126,8 +126,13 @@ RUN \
rm -rf /tmp/fakeroot/share/doc && \
rm -rf /tmp/fakeroot/share/man

# Remove useless stuff
RUN \
rm -rf /tmp/fakeroot/share/Wt/resources/jPlayer \
rm -rf /tmp/fakeroot/share/Wt/resources/themes

## Release Stage
FROM alpine:3.14 AS release
FROM alpine:3.16 AS release
LABEL maintainer="Emeric Poupon <[email protected]>"

ARG RUNTIME_PACKAGES=" \
Expand Down
61 changes: 16 additions & 45 deletions INSTALL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
- [Installation](#installation)
* [Docker](#docker)
* [Debian Buster packages](#debian-buster-packages)
* [Debian Bullseye packages](#debian-bullseye-packages)
* [From source](#from-source)
+ [Build dependencies](#build-dependencies)
+ [Build](#build)
Expand All @@ -12,33 +12,25 @@
* [Deploy on non root path](#deploy-on-non-root-path)
* [Reverse proxy settings](#reverse-proxy-settings)
- [Run](#run)

# Installation

## Docker
_Docker_ images are available, please see detailed instructions on https://hub.docker.com/r/epoupon/lms.

## Debian Buster packages
_Buster_ packages are provided for _amd64_ and _armhf_ architectures.

## Debian Bullseye packages
_Bullseye_ packages are provided for _amd64_ and _armhf_ architectures.
As root, trust the following debian package provider and add it in your list of repositories:
```sh
wget -O - https://debian.poupon.dev/apt/debian/epoupon.gpg.key | apt-key add -
echo "deb https://debian.poupon.dev/apt/debian buster main" > /etc/apt/sources.list.d/epoupon.list
echo "deb https://debian.poupon.dev/apt/debian bullseye main" > /etc/apt/sources.list.d/epoupon.list
```

To install or upgrade _LMS_:
```sh
apt update
apt install lms
```

The _lms_ service is started just after the package installation, run by a dedicated _lms_ system user.</br>
Please refer to [Deployment](#deployment) for further configuration options.

## From source
__Note__: this installation process and the default values of the configuration files have been written for _Debian Buster_. Therefore, you may have to adapt commands and/or paths in order to fit to your distribution.

__Note__: this installation process and the default values of the configuration files have been written for _Debian Bullseye_. Therefore, you may have to adapt commands and/or paths in order to fit to your distribution.
### Build dependencies
__Notes__:
* a C++17 compiler is needed
Expand All @@ -49,12 +41,9 @@ apt-get install g++ cmake libboost-program-options-dev libboost-system-dev libav
__Notes__:
* libpam0g-dev is optional (only for using PAM authentication)
* libstb-dev can be replaced by libgraphicsmagick++1-dev (the latter will likely use more RAM)

You also need _Wt4_, which is not packaged yet on _Debian_. See [installation instructions](https://www.webtoolkit.eu/wt/doc/reference/html/InstallationUnix.html).</br>
No optional requirement is needed, except openSSL if you plan not to deploy behind a reverse proxy (which is not recommended).

### Build

Get the latest stable release and build it:
```sh
git clone https://github.com/epoupon/lms.git lms
Expand All @@ -66,80 +55,69 @@ cmake .. -DCMAKE_BUILD_TYPE=Release
__Notes__:
* you can customize the installation directory using `-DCMAKE_INSTALL_PREFIX=path` (defaults to `/usr/local`).
* you can customize the image library using `-DIMAGE_LIBRARY=<STB|GraphicsMagick++>`

```sh
make
```
__Note__: you can use `make -jN` to speed up compilation time (N is the number of compilation workers to spawn).

### Installation

__Note__: the commands of this section require root privileges.

```sh
make install
```

Create a dedicated system user:
```sh
useradd --system --group lms
```

Copy the configuration files:
```sh
cp /usr/share/lms/lms.conf /etc/lms.conf
cp /usr/share/lms/lms.service /lib/systemd/system/lms.service
```

Create the working directory and give it access to the _lms_ user:
```sh
mkdir /var/lms
chown lms:lms /var/lms
```

To make _LMS_ run automatically during startup:
```sh
systemctl enable lms
```

### Upgrade

To upgrade _LMS_ from sources, you need to update the master branch and rebuild/install it:
```sh
cd build
git pull
make
```

Then using root privileges:
```sh
make install
systemctl restart lms
```

# Deployment

__Note__: don't forget to give the _lms_ user read access to the music directory you want to scan.

## Configuration
_LMS_ uses a configuration file, installed by default in `/etc/lms.conf`. It is recommended to edit this file and change relevant settings (listen address, listen port, working directory, Subsonic API activation, deployment path, ...).

All other settings are set using the web interface (user management, scan settings, transcode settings, ...).

If a setting is not present in the configuration file, a hardcoded default value is used (the same as in the [default configuration file](conf/lms.conf))

## Authentication backend

You can define which authentication backend to be used thanks to the `authentication-backend` option:
* `internal` (default): _LMS_ uses an internal database to store users and their associated passwords (salted and hashed using [Bcrypt](https://en.wikipedia.org/wiki/Bcrypt)). Only the admin user can create, edit or remove other users.
* `PAM`: the user/password authentication request is forwarded to PAM (see the default [PAM configuration file](conf/pam/lms) provided).
* `http-headers`: _LMS_ uses a configurable HTTP header field, typically set by a reverse proxy to handle [SSO](https://en.wikipedia.org/wiki/Single_sign-on), to extract the login name. You can customize the field to be used using the `http-headers-login-field` option.

__Note__: the first created user is the admin user

### `internal` backend: reset admin password
Open the the database file located in `/var/lms/lms.db` using `sqlite3`:
```sh
sqlite3 /var/lms/lms.db
```
Now force reset the password of the admin user to `adminadmin`:
```sqlite3
UPDATE user SET password_salt="sliIgHUpEoAlBMquivH4VzKXbSzexlvS", password_hash="$2y$07$a0vnQUbGTV/DZyDqOizvbOdCaytNjDhkOPcGoBZup4V0MRKDzOpEG" WHERE id=1;
.quit
```
## Deploy on non root path
If you want to deploy on non root path (e.g. https://mydomain.com/newroot/), you have to set the `deploy-path` option accordingly in `lms.conf`.

As static resources are __not__ related to the `deploy-path` option, you have to perform the following steps if you want them to be on a non root path too:
* Create a new intermediary `newroot` directory in `/usr/share/lms/docroot` and move everything in it.
* Symlink `/usr/share/lms/docroot/newroot/resources` to `/usr/share/Wt/resources`.
Expand All @@ -149,12 +127,9 @@ wt-resources = "" # do not comment the whole line
docroot = "/usr/share/lms/docroot/;/newroot/resources,/newroot/css,/newroot/images,/newroot/js,/newroot/favicon.ico";`
deploy-path = "/newroot/"; # ending slash is important
```

If you use nginx as a reverse proxy, you can simply replace `location /` with `location /newroot/` to achieve the same result.

## Reverse proxy settings
_LMS_ is shipped with an embedded web server, but it is recommended to deploy behind a reverse proxy. You have to set the _behind-reverse-proxy_ option to _true_ in the `lms.conf` configuration file.

Here is an example to make _LMS_ properly work on _myserver.org_ using _nginx_:
```
server {
Expand Down Expand Up @@ -183,16 +158,12 @@ server {
}
}
```

# Run
```sh
systemctl start lms
```

Log traces can be accessed using journactl:
```sh
journalctl -u lms.service
```

To connect to _LMS_, just open your favorite browser and go to http://localhost:5082

To connect to _LMS_, just open your favorite browser and go to `http://localhost:5082`
Loading

0 comments on commit 7cb2a7d

Please sign in to comment.