Часто решаемые задачи¶
Полезные команды в терминале¶
Здесь указаны базовые команды, которые могут потребоваться для установки системы и будут полезны новичкам. Если для любой из указанных ниже команд выводится сообщение о недостатке прав, то введите перед командой слово sudo
.
Команда |
Описание |
---|---|
cd ~/folder1/folder2 |
Перейти в папку относительно домашней папки. |
cd /home/tessa/folder |
Перейти в папку по абсолютному пути |
cd .. |
Перейти в папку на уровень выше. |
ls |
Вывести содержимое текущей папки. |
mkdir -p folder1/folder2/folder3 |
Создать папку, если она не создана, а также родительские папки в пути, которые ещё не созданы. |
mv file-old file-new |
Переименовать файл file-old в file-new . |
mv source/file destination/file |
Переместить файл file из папки source в папку destination . |
cp -r source destination/ |
Скопировать файлы с подпапками из папки source в папку destination (если папка destination не существует, то она будет создана). |
rm -rf folder1/folder2 |
Удалить папку folder2 с подпапками. |
Распаковка архивов .zip¶
Установите утилиту командной строки для распаковки архивов .zip
, выполнив команду для вашего пакетного менеджера.
Для пакетного менеджера apt
:
sudo apt -y install unzip
Для пакетного менеджера apt
и Linux Mint
:
sudo /usr/bin/apt -y install unzip
Для пакетного менеджера apt-get
:
sudo apt-get -y install unzip
Для пакетного менеджера yum
:
sudo yum -y install unzip
Для пакетного менеджера emerge
:
sudo emerge app-arch/unzip
Для пакетного менеджера zypper
:
sudo zypper -n install unzip
Чтобы извлечь все файлы из архива tessa.zip
в текущую папку (перезаписывает файлы, которые уже существуют в папке):
unzip -o tessa.zip
Чтобы извлечь все файлы из архива tessa.zip
в заданную папку destination
(перезаписывает файлы, которые уже существуют в папке):
unzip -o build.zip -d destination
Распаковка архивов .7z¶
Установите утилиту командной строки для распаковки архивов .7z
, выполнив команду для вашего пакетного менеджера.
Для пакетного менеджера apt
:
sudo apt -y install p7zip-full
Для пакетного менеджера apt
и Linux Mint
:
sudo /usr/bin/apt -y install p7zip-full
Для пакетного менеджера apt-get
:
sudo apt-get -y install p7zip-full
Для пакетного менеджера yum
:
sudo yum -y install p7zip p7zip-plugins
Для пакетного менеджера emerge
:
sudo emerge app-arch/p7zip
Для пакетного менеджера zypper
:
sudo zypper -n install p7zip
Чтобы извлечь все файлы из архива tessa-4.0.0.7z
в текущую папку:
7za x tessa-4.0.0.7z
Чтобы извлечь все файлы в папку destination
:
7za x -o./destination tessa-4.0.0.7z
Для дистрибутива ALT Linux
аналогичным образом используйте команду 7z
вместо 7za
:
7z x tessa-4.0.0.7z
Перезапуск сервисов¶
Если система TESSA была установлена с использованием веб-сервера Nginx, то для перезапуска всех сервисов на сервере приложений выполните команду в терминале:
sudo systemctl restart chronos tessa nginx
Если система TESSA была установлена с использованием веб-сервера Apache, то для перезапуска всех сервисов на сервере приложений выполните команду в терминале:
sudo systemctl restart chronos tessa apache2
Для дистрибутива Calculate Linux
выполните команду:
sudo /etc/init.d/chronos restart && sudo /etc/init.d/tessa restart && sudo /etc/init.d/nginx restart
Для перезапуска сервера СУБД выполните команду в терминале:
sudo systemctl restart postgresql
Для дистрибутива Calculate Linux
выполните команду:
sudo /etc/init.d/postgresql-10 restart
Определение IP-адреса сервера¶
Чтобы определить IP-адрес сервера, к которому должны подключаться клиентские компьютеры, используйте команду:
ip addr show
Если команда недоступна на вашем дистрибутиве, то вы можете использовать команду ifconfig
:
ifconfig
Если команда не была найдена, то требуется сначала установить пакет net-tools
в терминале.
Для пакетного менеджера apt
:
sudo apt -y install net-tools
Для пакетного менеджера apt
и Linux Mint
:
sudo /usr/bin/apt -y install net-tools
Для пакетного менеджера apt-get
:
sudo apt-get -y install net-tools
Для пакетного менеджера yum
:
sudo yum -y install net-tools
Для пакетного менеджера emerge
:
sudo emerge sys-apps/net-tools
Для пакетного менеджера zypper
:
sudo zypper -n install net-tools-deprecated
После установки заново введите команду:
ifconfig
Права доступа для группы www-data¶
Если вы настроили сервис tessa на запуск от имени группы www-data
, то потребуется настроить дополнительные права.
Добавим текущую учётную запись tessa
в группу www-data
, чтобы эта учётная запись могла изменять права для папок на эту группу.
sudo usermod -aG www-data tessa
Для SUSE Enterprise Linux
и OpenSUSE
команда имеет параметры:
sudo usermod -A www-data tessa
Чтобы назначить права на папку с файлами, она должна существовать. Если её нет - создаём:
mkdir -p /home/tessa/tessa/files
Определим, что папкой с файлами теперь владеет группа www-data
:
sudo chgrp www-data /home/tessa/tessa/files
sudo chmod g+rwxs /home/tessa/tessa/files
Настройка подключения к СУБД для пользователя, который не является суперпользователем СУБД¶
Для более тонкой настройки прав доступа может потребоваться, чтобы пользователь СУБД, который используется для подключения к базе данных от сервера приложений (веб-сервис, сервис Chronos, а также утилиты tools
), не входил в роль суперпользователей. Т.е. чтобы он имел права исключительно на базу данных tessa
, но не на создание/просмотр/изменение других баз данных.
Вместо способа создания пользователя, описанного в этой инструкции, подключитесь к серверу PostgreSQL, и выполните команды: создайте базу данных и пользователя, далее настройте права.
sudo -u postgres psql postgres
Команда \password postgres
здесь также указана, чтобы задать пароль для пользователя postgres. Без пароля вы не сможете выполнить вход в систему от суперпользователя после редактирования настроек в файле pg_hba.conf
способом, предложенным в этой инструкции.
\password postgres
Теперь введите пароль суперпользователя. Далее введите команды:
CREATE DATABASE tessa;
CREATE USER tessa WITH PASSWORD 'Master1234';
GRANT ALL PRIVILEGES ON DATABASE tessa TO tessa;
\q
Tip
В команде GRANT ALL PRIVILEGES
первым словом tessa
указано имя созданной базы данных, а вторым tessa
- имя пользователя в СУБД. Эти имена могут быть изменены, в этом случае также требуется отредактировать строки подключения в файлах app.json
в папках chronos
, tools
и web
.
При установке скриптом setup.sh
теперь не указывайте имя базы данных tessa
при вводе, вместо этого имя базы данных должно быть указано в строке подключения (по умолчанию оно уже указано как tessa
). Тогда скрипт не будет создавать базу данных, а будет подключаться к ней с учётом настроенных прав доступа.
Установка на виртуальную машину VMWare¶
Для многих дистрибутивов Linux в репозиториях уже есть пакет, упрощающий интеграцию с операционной системой хоста, когда Linux запущен как гостевая ОС в виртуальной машине. Это включает в себя общий буфер обмена с передачей файлов, автоподстройка разрешения экрана Linux в зависимости от размера окна виртуальной машины и др.
Установите пакет в окне терминала:
sudo apt -y install open-vm-tools-desktop
Если этот пакет отсутствует, то иногда доступен пакет без интеграции с оконным менеджером, но всё так же разрешающий общий буфер обмена:
sudo apt -y install open-vm-tools
Вместо apt
может потребоваться использовать другой пакетный менеджер, например, apt-get
, yum
, emerge
или zypper
:
sudo apt-get -y install open-vm-tools
sudo yum -y install open-vm-tools
sudo emerge open-vm-tools
sudo zypper -n install open-vm-tools
Если ни один из пакетов не найден, то установите VMWare Tools обычным образом: в меню сверху VM -> Install VMWare Tools...
, будет примонтирован диск с архивом VMwareTools-***.tar.gz
, который распакуйте в домашнюю папку, после чего перейдите в папку и выполните скрипт sudo ./vmware-install.pl
. На большинство вопросов достаточно ответить нажатием Enter. За подробностями обратитесь к документации VMWare
.
Установка интерпретатора python3 на дистрибутивы, где он отсутствует в репозиториях¶
Для CentOS
и некоторых других дистрибутивов для использования совместно со сторонним ПО (не входящим в рамки данной инструкции) может потребоваться установить интерпретатор Python версии 3.
Если такая версия отсутствует в репозиториях, то необходимо собрать из исходных кодов актуальную версию python3
. В примере ниже это команды для сборки Python v3.7.0, которая являлась последней версией на момент написания инструкции. При сборке make
и установке make install
некоторые модули могут выводить ошибки из-за отсутствия зависимостей, игнорируйте их и выполняйте следующие команды.
sudo yum -y groupinstall development
sudo yum -y install zlib-devel
cd ~
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
tar xJf Python-3.7.0.tar.xz
cd Python-3.7.0
./configure --enable-optimizations
make
sudo make install
Note
Сборка make
может занять до получаса времени.
Теперь проверьте местоположение исполняемого файла python3
и выведите версию Python:
which python3
python3 -V
Вывод команд должен быть похож на следующий:
Папку и архив Python-3.*
в домашней папке теперь можно удалить.
Настройка сервисов для дистрибутива, в котором отсутствует система инициализации System D¶
На некоторых дистрибутивах может отсутствовать система инициализации System D
, и связанная с ней команда systemctl
. Из тех дистрибутивов, для которых выполнялось тестирование и для которых установка платформы официально поддерживается, это Calculate Linux, но в нём присутствует система OpenRC
, установка для которой описана в разделе по ссылке.
Если у вас дистрибутив, в котором нет ни System D
, ни OpenRC
, то это означает, что поддерживается только система инициализации System V
. В этом разделе описано, как настроить сервисы tessa
и chronos
в виде System V
скриптов с автозапуском при загрузке системы.
В скриптах ниже будут присутствовать следующие переменные (в верхней части скрипта), которые можно изменить в соответствии с вашей установкой:
-
DAEMONUSER
- имя учётной записи, с правами которой запускается сервис. -
DAEMONDIR
- абсолютный путь к папке с сервисом. -
DAEMON
- путь к запускаемому файлу сервиса в папкеDAEMONDIR
. -
DAEMON_ARGS
- аргументы, с которым запускается сервис, обычно не заданы. Здесь, например, для веб-сервисаtessa
можно указать аргумент"http://localhost:5001"
, чтобы запустить веб-сервис по порту 5001, вместо порта по умолчанию 5000.
Создайте скрипт для запуска веб-сервиса tessa
, выполнив команду:
sudo nano /etc/init.d/tessa
Скопируйте следующий текст Shift+Insert и закройте редактор с сохранением изменений: Ctrl+X, Y, Enter.
#! /bin/sh
### BEGIN INIT INFO
# Provides: tessa
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Syntellect TESSA
# Description: Syntellect TESSA web services.
### END INIT INFO
# Author: Syntellect <tessa@syntellect.ru>
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Syntellect TESSA"
NAME=tessa
DAEMONUSER="tessa"
DAEMONDIR="/home/$DAEMONUSER/tessa/web"
DAEMON="$DAEMONDIR/Tessa.Web.Server"
DAEMON_ARGS="5000"
LOGDIR="/home/$DAEMONUSER/tessa/logs"
LOGFILE="$LOGDIR/$NAME.log"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions
#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --name "$DESC" --user $DAEMONUSER \
--make-pidfile --pidfile "$PIDFILE" --background \
--stdout "$LOGFILE" --stderr "$LOGFILE" \
--chdir "$DAEMONDIR" --exec "$DAEMON" --umask 002 \
--test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --name "$DESC" --user $DAEMONUSER \
--make-pidfile --pidfile "$PIDFILE" --background \
--stdout "$LOGFILE" --stderr "$LOGFILE" \
--chdir "$DAEMONDIR" --exec "$DAEMON" --umask 002 -- \
$DAEMON_ARGS \
|| return 2
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile "$PIDFILE" --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec "$DAEMON"
[ "$?" = 2 ] && return 2
rm -f "$PIDFILE"
return "$RETVAL"
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac
:
Аналогично создайте скрипт для запуска фоновых сервисов chronos
, выполнив команду:
sudo nano /etc/init.d/chronos
Скопируйте следующий текст Shift+Insert и закройте редактор с сохранением изменений: Ctrl+X, Y, Enter.
#! /bin/sh
### BEGIN INIT INFO
# Provides: chronos
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Syntellect Chronos
# Description: Syntellect Chronos background services.
### END INIT INFO
# Author: Syntellect <tessa@syntellect.ru>
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Syntellect Chronos"
NAME=chronos
DAEMONUSER="tessa"
DAEMONDIR="/home/$DAEMONUSER/tessa/chronos"
DAEMON="$DAEMONDIR/Chronos"
DAEMON_ARGS=""
LOGDIR="/home/$DAEMONUSER/tessa/logs"
LOGFILE="$LOGDIR/$NAME.log"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions
#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --name "$DESC" --user $DAEMONUSER \
--make-pidfile --pidfile "$PIDFILE" --background \
--stdout "$LOGFILE" --stderr "$LOGFILE" \
--chdir "$DAEMONDIR" --exec "$DAEMON" --umask 002 \
--test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --name "$DESC" --user $DAEMONUSER \
--make-pidfile --pidfile "$PIDFILE" --background \
--stdout "$LOGFILE" --stderr "$LOGFILE" \
--chdir "$DAEMONDIR" --exec "$DAEMON" --umask 002 -- \
$DAEMON_ARGS \
|| return 2
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile "$PIDFILE" --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec "$DAEMON"
[ "$?" = 2 ] && return 2
rm -f "$PIDFILE"
return "$RETVAL"
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac
:
Добавьте права на выполнение для созданных скриптов:
sudo chmod 755 /etc/init.d/tessa /etc/init.d/chronos
Настройте автозапуск сервисов:
sudo chkconfig --add /etc/init.d/tessa
sudo chkconfig --add /etc/init.d/chronos
Для запуска сервисов выполните команды:
sudo /etc/init.d/tessa start
sudo /etc/init.d/chronos start
Сервисы перезапускаются командами:
sudo /etc/init.d/tessa restart
sudo /etc/init.d/chronos restart
Сервисы останавливаются командами:
sudo /etc/init.d/tessa stop
sudo /etc/init.d/chronos stop
Текущее состояние сервисов (запущен ли сервис) можно получить, выполнив команды:
sudo /etc/init.d/tessa status
sudo /etc/init.d/chronos status
В скриптах настроено логирование информации, которая обычно выводится сервисами на консоль, в файлы в папке ~/tessa/logs
(относительно домашней папки пользователя, от имени которого запускаются сервисы).
-
~/tessa/logs/tessa.log
- вывод на консоль для веб-сервисаtessa
. -
~/tessa/logs/chronos.log
- вывод на консоль для фоновых сервисовchronos
.