Перейти к содержанию

Часто решаемые задачи

Полезные команды в терминале

Здесь указаны базовые команды, которые могут потребоваться для установки системы и будут полезны новичкам. Если для любой из указанных ниже команд выводится сообщение о недостатке прав, то введите перед командой слово 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-3.0.0.7z в текущую папку:

7za x tessa-3.0.0.7z

Чтобы извлечь все файлы в папку destination:

7za x -o./destination tessa-3.0.0.7z

Для дистрибутива ALT Linux аналогичным образом используйте команду 7z вместо 7za:

7z x tessa-3.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 на дистрибутивы, где он отсутствует в репозиториях

Для RedHat Enterprise Linux, Oracle Linux, 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="" 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.

Back to top