PostgreSQL-9.5.1 из репозитория для TinyCoreLinux v7.2 запустить не удалось. Вместо этого можно установить PostgreSQL-9.6.6 (для TinyCoreLinux v8.x) или даже PostgreSQL-9.6.10 (для TinyCoreLinux v9.x)

PostgreSQL-9.6 с файлом зависимостей необходимо скопировать из соответствующего репозитория в локальный репозиторий для TinyCoreLinux v7.2

tc@box:/mnt/sdb1/repo-tce7-x86/$ wget "http://tinycorelinux.net/9.x/x86/tcz/postgresql-9.6.tcz"

tc@box:/mnt/sdb1/repo-tce7-x86/$ wget "http://tinycorelinux.net/9.x/x86/tcz/postgresql-9.6.tcz.dep"

Устанавливать придется вручную (удобнее написать скрипт для установки из локального репозитория)

  • Скопировать файлы postgresql-9.6.tcz и postgresql-9.6.tcz.dep в соответствующую папку /etc/sysconfig/tcedir/optional
  • Аналогичную рекурсивно процедуру проделать с каждым пакетом, от которого зависит postgresql-9.6.tcz
  • Добавить postgresql-9.6 в список пакетов, устанавливаемых при каждой загрузке системы

    tc@box:~$ echo postgresql-9.6 | sudo tee -a /etc/sysconfig/tcedir/onboot.lst

  • Далее необходимо установить в систему файлы более поздних библиотек

    Файлы ставятся из библиотек для TinyCoreLinux v8.x(!)

    tc@box:~$ sudo mkdir /tmp/tcloop/readline7

    tc@box:~$ mount /mnt/sdb1/repo-tce8-x86/readline.tcz /tmp/tcloop/readline7/ -t squashfs -o loop

    tc@box:~$ cp -as /tmp/tcloop/readline7/usr/local/lib/lib*7* /usr/local/lib/

    tc@box:~$ mkdir /tmp/tcloop/ncurses6

    tc@box:~$ mount /mnt/sdb1/repo-tce8-x86/ncurses.tcz /tmp/tcloop/ncurses6/ -t squashfs -o loop

    tc@box:~$ cp -as /tmp/tcloop/ncurses6/usr/local/lib/*6* /usr/local/lib/

    Чтобы после перезагрузки системы они восстанавливались, нужно все эти команды поместить в файл /opt/bootlocal.sh

    tc@box:~$ echo mkdir /tmp/tcloop/readline7 | sudo tee -a /opt/bootlocal.sh

    ....

Необходимо определить переменные окружения, чтобы PostgreSQL мог найти нужные библиотеки

tc@box:~$ echo export LD_LIBRARY_PATH=/usr/local/pgsql96/lib:/usr/local/lib:$LD_LIBRARY_PATH | tee -a ./.profile

tc@box:~$ echo PGDATA=/home/tc/postgres:$PGDATA | tee -a ./.profile

tc@box:~$ echo $LD_LIBRARY_PATH

/usr/local/pgsql96/lib:/usr/local/lib:

  • /usr/local/pgsql96/lib необходима для работы самого PostgreSQL
  • /usr/local/lib если не указана, то не сможет запуститься клиент psql (ошибка libreadline.so.7, libncurses.so.6)

Кроме того, psql будет ошибочно искать библиотеку libpq.so.5 в директории /usr/local/lib, а находится она в /usr/local/pgsql96/lib

В итоге, каждый раз создаем при загрузке символьную ссылку

tc@box:~$ echo ln -s /usr/local/pgsql96/lib/libpq.so.5 /usr/local/lib/ | sudo tee -a /opt/bootlocal.sh

Инициализация PostgreSQL. Если определена переменная $PGDATA, то директорию инициализации можно не указывать (ее можно не создавать заранее, PostgreSQL сделает это сам)

tc@box:~$ /usr/local/pgsql96/bin/pg_ctl init -D /home/tc/www/postgres

Запуск PostgreSQL. Путь к исполняемым файлам можно указать в переменной $PATH

tc@box:~$ pg_ctl start -l /var/log/postgres.log

Подключение к серверу утилитой psql с пользовательской базой по умолчанию

tc@box:~$ psql postgres


Linux-7.2 box 4.2.9-tinycore i686 Fri Jun 26 08:42:12 YEKT 2020