- Forum
- The Ubuntu Forum Community
- Ubuntu Specialised Support
- Development & Programming
- Packaging and Compiling Programs
- configure: error: zlib not found.
-
configure: error: zlib not found.
Code:
checking build system type... i686-pc-linux-gnu checking host system type... i686-pc-linux-gnu checking target system type... i686-pc-linux-gnu checking for a BSD-compatible install... /usr/bin/install -c checking for -p flag to install... yes checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether NLS is requested... yes checking for msgfmt... /usr/bin/msgfmt checking for gmsgfmt... /usr/bin/msgfmt checking for xgettext... /usr/bin/xgettext checking for msgmerge... /usr/bin/msgmerge checking for style of include used by make... GNU checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking dependency style of gcc... gcc3 checking for ld used by GCC... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking for shared library run path origin... done checking for CFPreferencesCopyAppValue... no checking for CFLocaleCopyCurrent... no checking for GNU gettext in libc... yes checking whether to use NLS... yes checking where the gettext function comes from... libc checking for gcc... (cached) gcc checking whether we are using the GNU C compiler... (cached) yes checking whether gcc accepts -g... (cached) yes checking for gcc option to accept ISO C89... (cached) none needed checking dependency style of gcc... (cached) gcc3 checking for g++... g++ checking whether we are using the GNU C++ compiler... yes checking whether g++ accepts -g... yes checking dependency style of g++... gcc3 checking how to run the C preprocessor... gcc -E checking how to run the C++ preprocessor... g++ -E checking for a BSD-compatible install... /usr/bin/install -c -p checking for a sed that does not truncate output... /bin/sed checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for ld used by gcc... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking for /usr/bin/ld option to reload object files... -r checking for BSD-compatible nm... /usr/bin/nm -B checking whether ln -s works... yes checking how to recognise dependent libraries... pass_all checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking dlfcn.h usability... yes checking dlfcn.h presence... yes checking for dlfcn.h... yes checking for g77... no checking for xlf... no checking for f77... no checking for frt... no checking for pgf77... no checking for cf77... no checking for fort77... no checking for fl32... no checking for af77... no checking for xlf90... no checking for f90... no checking for pgf90... no checking for pghpf... no checking for epcf90... no checking for gfortran... no checking for g95... no checking for xlf95... no checking for f95... no checking for fort... no checking for ifort... no checking for ifc... no checking for efc... no checking for pgf95... no checking for lf95... no checking for ftn... no checking whether we are using the GNU Fortran 77 compiler... no checking whether accepts -g... no checking the maximum length of command line arguments... 32768 checking command to parse /usr/bin/nm -B output from gcc object... ok checking for objdir... .libs checking for ar... ar checking for ranlib... ranlib checking for strip... strip checking if gcc static flag works... yes checking if gcc supports -fno-rtti -fno-exceptions... no checking for gcc option to produce PIC... -fPIC checking if gcc PIC flag -fPIC works... yes checking if gcc supports -c -o file.o... yes checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes checking whether -lc should be explicitly linked in... no checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking for shl_load... no checking for shl_load in -ldld... no checking for dlopen... no checking for dlopen in -ldl... yes checking whether a program can dlopen itself... yes checking whether a statically linked program can dlopen itself... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes configure: creating libtool appending configuration tag "CXX" to libtool checking for ld used by g++... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes checking for g++ option to produce PIC... -fPIC checking if g++ PIC flag -fPIC works... yes checking if g++ supports -c -o file.o... yes checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking for shl_load... (cached) no checking for shl_load in -ldld... (cached) no checking for dlopen... (cached) no checking for dlopen in -ldl... (cached) yes checking whether a program can dlopen itself... (cached) yes checking whether a statically linked program can dlopen itself... (cached) yes appending configuration tag "F77" to libtool checking whether to include debugging code... no checking whether to be pedantic... no checking whether to do profiling... no checking whether to enable GLUT... no checking whether to enable GTK... yes checking whether to enable Gnome... yes checking whether to enable KDE... no checking for gcc... (cached) gcc checking whether we are using the GNU C compiler... (cached) yes checking whether gcc accepts -g... (cached) yes checking for gcc option to accept ISO C89... (cached) none needed checking dependency style of gcc... (cached) gcc3 checking how to run the C preprocessor... gcc -E checking whether we are using the GNU C++ compiler... (cached) yes checking whether g++ accepts -g... (cached) yes checking dependency style of g++... (cached) gcc3 checking whether g++ supports -Wmissing-format-attribute... yes checking whether gcc supports -Wmissing-format-attribute... yes checking whether g++ supports -Wundef... yes checking whether g++ supports -Wno-long-long... yes checking whether g++ supports -Wnon-virtual-dtor... yes checking whether g++ supports -fno-exceptions... yes checking whether g++ supports -fno-check-new... yes checking whether g++ supports -fno-common... yes checking whether g++ supports -fexceptions... yes checking how to run the C++ preprocessor... g++ -E checking whether g++ supports -O0... yes checking whether g++ supports -Wl,--no-undefined... yes checking whether g++ supports -Wl,--allow-shlib-undefined... yes checking for X... no checking for deflate in -lz... no configure: error: zlib not found.
As it says in the title when trying ./configure I’m getting configure: error: zlib not found. I have installed all packages zlib* from synaptic and am still getting this answer and am out of ideas of what to try.
-
Re: configure: error: zlib not found.
You need to have zlib1g-dev installed.
If you do, then there may be a way to tell the configure script where to find it,
using ./configure —help
-
Re: configure: error: zlib not found.
you just need to install zlib1g-dev.
PHP Code:
apt-get install zlib1g-dev
ore
PHP Code:
apt-cache search zlib dev
Web 2.0 Be happy
-
Re: configure: error: zlib not found.
Originally Posted by thijs
you just need to install zlib1g-dev.
PHP Code:
apt-get install zlib1g-dev
ore
PHP Code:
apt-cache search zlib dev
I have this and all the other zlib packages installed already and it is still giving me the error
-
Re: configure: error: zlib not found.
Bookmarks
Bookmarks
Posting Permissions
Содержание
- Thread: problem: configure could not find the zlib library
- problem: configure could not find the zlib library
- Configure error no zlib found
- Установка PostgreSQL из исходных кодов
Thread: problem: configure could not find the zlib library
Thread Tools
Display
problem: configure could not find the zlib library
I’ve been trying to install some software with a zlib dependency (as well as a few others). The typical procedure for this is to install the packages: zlib1g and zlib1g-dev; however, once installed (and after I’ve rebooted for safe measure), the configuration script run with the necessary prefix
returns the following:
as per the instructions here: https://www.lsc-group.phys.uwm.edu/d. l-install.html, though in this post I’m only concerned with solving the configuration problem I’m having. Once it’s resolved, the rest of the code is easily installed.
I’m not sure what to do from here. I’ve tried installing from the source code provided at www.zlib.net, which worked on my laptop after the apt-get method did not. For it to work on the laptop, though, I had to install from source as root, which made me little nervous. Sadly, this approach did not work on my desktop.
FYI, I’m running Kubuntu 13.10 on my laptop and desktop. This problem has arisen each time I’ve reinstalled on a new system (I’ve tried using Arch, Manjaro, and Kubuntu). Interestingly, after installing Arch Linux, I had to download all the dependencies from source to work. Those stored in the Arch repos gave me the same error message as those in debian’s apt-get repos. The same was required for two other dependencies, «libframe» and «metaio», which I had to install from the arch user repository instead of the lscsoft data analysis packages found at: www.lsc-group.phys.usm.edu/daswg/download/software/source.
I’ve been searching for a while on google and can’t seem to find anything but recommendations to install from source, and more often from the apt-get repos. If these won’t work, I hope someone else can help me find a method that will! Hopefully I’ve provided sufficient details.
Last edited by jmbell; April 17th, 2014 at 01:15 AM .
Источник
Configure error no zlib found
I’ve been trying to install some software with a zlib dependency (as well as a few others). The typical procedure for this is to install the packages: zlib1g and zlib1g-dev; however, once installed (and after I’ve rebooted for safe measure), the configuration script run with the necessary prefix
./configure —prefix=/opt/ lscsoft returns the following:
checking for ZLIB. no
checking for library containing compress. no
configure: error: could not find the zlib library
configure: error: ./configure failed for lal
I’ve attached the configuration log here: 252105 for the software I’m trying to configure. I’ve tried the lib32 versions of zlib in the repos with no success as well. Note, too, that I’ve installed most of the dependencies to /opt/lscsoft as instructed here: https://www.lsc-group.phys.uwm.edu/daswg/docs/howto/lscsoft-install.html. Once installed, I’m supposed to be able to run
./00boot && ./configure —prefix=/opt/lscsoft && make install as per the instructions here: https://www.lsc-group.phys.uwm.edu/daswg/docs/howto/lal-install.html, though in this post I’m only concerned with solving the configuration problem I’m having. Once it’s resolved, the rest of the code is easily installed.
I’m not sure what to do from here. I’ve tried installing from the source code provided at www.zlib.net (http://www.zlib.net), which worked on my laptop after the apt-get method did not. For it to work on the laptop, though, I had to install from source as root, which made me little nervous. Sadly, this approach did not work on my desktop.
FYI, I’m running Kubuntu 13.10 on my laptop and desktop. This problem has arisen each time I’ve reinstalled on a new system (I’ve tried using Arch, Manjaro, and Kubuntu). Interestingly, after installing Arch Linux, I had to download all the dependencies from source to work. Those stored in the Arch repos gave me the same error message as those in debian’s apt-get repos. The same was required for two other dependencies, «libframe» and «metaio», which I had to install from the arch user repository instead of the lscsoft data analysis packages found at: www.lsc-group.phys.usm.edu/daswg/download/software/source (http://www.lsc-group.phys.usm.edu/daswg/download/software/source).
I’ve been searching for a while on google and can’t seem to find anything but recommendations to install from source, and more often from the apt-get repos. If these won’t work, I hope someone else can help me find a method that will! Hopefully I’ve provided sufficient details.
Источник
Установка PostgreSQL из исходных кодов
Когда-то я рассказал про установку Ubuntu на VirtualBox. Настала пора рассказать про установку PostgreSQL из исходных кодов.
Сразу приступаем (считаю, что виртуальная или реальная машина с Ubuntu у вас уже имеется).
Уфф, сам удивился, что получилось очень много. Погнали!
1. ИНФОРМАЦИЯ О СТЕНДЕ
Для чистоты эксперимента еще покажу, какая у меня ВМка получилась по характеристикам: кратко — основной пользователь test, имя компьютера testPC , xUbuntu 20.04.01, 2 Гб ОЗУ, 1 ядро процессора, 20 ГБ жесткий диск SSD.
Хм, команды (почерпнутые из интернета) на моём стенде говорят, что мой диск — HDD. Странно, но разбираться сейчас не буду. Он точно SSD 🙂
2. НАСТРОЙКА ОПЕРАЦИОННОЙ СИСТЕМЫ
После установки ОС нужно выполнить еще несколько шагов.
Сейчас образы (как минимум Ubuntu, но, наверное, и других дистрибутивов) стараются сделать поменьше размером и не включают многие нужные пакеты, особенно для компиляции из исходных кодов (так, отсутствуют GCC и MAKE, которые нам нужны).
Чтобы не устанавливать все нужные пакеты по отдельности, поставим один пакет-справочник build-essential, все нужное для компиляции подтянется при его установке (G++, GCC, dpkg-dev, make ) и другие пакеты:
После завершения установки, снова проверим версии:
Теперь всё в порядке и можно продолжать.
3. ПОЛУЧЕНИЕ ИСХОДНОГО КОДА POSTGRESQL
Устанавливать будем из исходного кода, а его нужно где-то взять. Для этого воспользуемся официальным репозитарием на GitHub`e (сервисе онлайн-хранения кода с контролем версий): https://github.com/postgres/postgres/
Можно прямо с этой страницы код нужной ветки скачать, но мы поступим по другому:
Сначала установим специальную утилиту GIT, с помощью которой можно отслеживать изменения в онлайн-репозитарии на GitHub`e, скачивать-закачивать изменения. Проверим, может она уже есть (так и называется git):
Отсутствует. Поэтому установим, как и рекомендуют:
Теперь можно скачивать с помощью этой утилиты исходный код из официального репозитария следующей командой:
Клонируем (копируем себе) данный репозитарий. Клонирование занимает некоторое время (минут пять), поэтому, пока оно идет — можете быстро посмотреть полезный сайт с информацией о GIT`e: https://git-scm.com/book/ru/v2. Там много интересного материала по работе с GIT и GitHub.
Была создана директория postgres, перейдем туда:
В ней лежит много разных директорий (и файлов), о которых сейчас знать не обязательно:
Нужно проверить, в какой ветке мы находимся. Для этого используется команда:
Мы в ветке по умолчанию (master), но устанавливать будем последнюю на данный момент стабильную версию — 13-ю. Посмотреть все ветки в репозитарии можно либо командой:
большой список выводится. Либо можно и на веб-странице репозитария в GitHub`e посмотреть:
Теперь нужно переключиться на нужную ветку. Для этого существует команда git checkout, которой передается название ветки:
Теперь всё так, как нам нужно — активна тринадцатая ветка, именно эту версию и будем устанавливать.
4. ДО УСТАНОВКИ POSTGRESQL
Рекомендую почитать страницу документации с требованиями при установке из исходного кода.
На этой странице нужно обратить внимание на следующие несколько моментов:
По умолчанию при сборке используется библиотека GNU Readline. Она позволяет запоминать все вводимые команды в psql (SQL-интерпретатор командной строки для PostgreSQL) и затем, пользуясь клавишами-стрелками, возвращаться к ним и редактировать их.
Если вы не желаете использовать эту возможность, вы должны добавить указание —without-readline для configure.
Если не указать —wihout-readline, при выполнении команды ./configure появится следующая ошибка:
Если не устанавливать эту возможность, тогда в psql`е будет не очень удобно работать. Например, выполняем отображение версии сервера, затем хотим повторить эту команду — если нажать на стрелку вверх (как это обычно делаем в терминале) появляются вот такие цифробуквы, которые нам ничем не помогут (^[[A):
В интернете рекомендуют ставить libreadline-dev.
Еще момент со страницы документации:
По умолчанию для сжатия данных используется библиотека zlib.
Если вы не хотите её использовать, вы должны передать configure указание —without-zlib.
А если не указать —wihout-zlib, при выполнении команды ./configure появится вот такая ошибка:
Если не устанавливать эту возможность, тогда не получиться заархивировать дамп базы данных (при использовании pg_dump). При выполнении данной команды с параметром установки сжатия данных (-Z 0..9) появится следующее сообщение:
В интернете рекомендуют ставить zlib1g-dev.
И заключительный момент:
Если вы хотите скомпилировать код из дерева Git, а не из специального пакета исходного кода, либо вы хотите работать с этим кодом, вам также понадобятся следующие пакеты:
Flex и Bison потребуются для сборки из содержимого Git или если вы меняете собственно файлы определений анализа и разбора.
Flex — средством для генерации программ. которые распознают шаблоны в тексте.
Bison — является генератором парсеров, генерирует программу, которая анализирует структуру текстовых файлов.
Мы ставим именно из дерева Git, поэтому сначала нужно поставить еще и их.
Итого — нужно доставить следующие пакеты:
следующим стандартным образом:
После завершения установки этих пакетов проверьте, чтобы вы находились в директории postgres, так как далее команды будем выполнять именно оттуда.
5. УСТАНОВКА POSTGRESQL
Процесс установки из исходного кода состоит из трех этапов:
- Конфигурирование — запуск команды ./configure . Эта команда ищет необходимые библиотеки и заголовочные файлы, осуществляет настройку особых параметров и подключается дополнительные библиотеки (описанные выше —without-параметры из этой области). В результате работы создается файлы Makefiles, содержащий всю необходимую информацию для сборки, его можно просмотреть в текстовом редакторе.
- Сборка (компиляция) — запуск команды make . Запускается компиляция программы из исходного кода. При работе используется Makefiles, в которых описаны все параметры сборки приложения. Результат работы — собранная программа в текущей директории.
- Установка — команда make install . Запускается непосредственная установка собранного приложения. Результат — работоспособная программа (если не было ошибок).
Пройдем эти шаги (в документации они тоже описаны):
Запускаем конфигурирование. Так как я установил и readline и gzip, я просто запускаю команду:
Выполнение этой команды у меня занимается около пятнадцати секунд. Последние пять строк вывода:
Опять же, если вы поставили и bizon, и flex — тогда ошибок не будет. Но, если этих программ не хватает, ошибки будут выглядеть следующим образом:
Не установлен bison:
Не установлен flex:
Если произошли такие ошибки, можно откатиться к начальному состоянию и запустить конфигурирование и установку заново. Для этого используется команда:
После нее снова нужно запускать ./configure с указанием необходимых параметров (если они есть). И потом — опять make.
Кстати, если вы хотите сохранить всё, что выводит команда make, её вывод можно отправить в файл следующим образом:
А если вы хотите собрать всё, что может быть собрано, включая документацию (страницы HTML и man) и дополнительные модули (contrib), выполните команду:
Финальное сообщение будет следующим:
На моей виртуальной машине сборка шла около семи минут (плюс-минус минута). Если сборка завершилась успешно, вы увидите следующее сообщение:
Далее можно запустить команду make check. С помощью этой команды можно протестировать собранный сервер до его установки с помощью регрессионных тестов. Регрессионные тесты — это комплект тестов, проверяющих, что PostgreSQL работает на вашем компьютере так, как задумано разработчиками. Давайте проверим:
По видимому, всё хорошо (проверка длилась около минуты). Идем дальше.
Установка — запускаем команду:
И через пару секунд я получил сообщение:
Ура! Установка PotsgreSQL 13-й версии успешно завершена!
Но пользоваться данной СУБД еще не получиться… Нужно произвести настройки (и в документации об этом говориться: Подготовка к работе и сопровождение сервера, ссылку даю на оглавление раздела).
6. НАСТРОЙКИ ДЛЯ РАБОТЫ С POSTGRESQL
Если кратко — нужно создать отдельного пользователя для PostgreSQL, инициализировать кластер баз данных, проверить работоспособность сервера, создать и сохранить переменные окружения и установить дополнительные модули (contrib).
А теперь — подробнее.
Не рекомендуется запускать сервер PostgreSQL от имени суперпользователя ОС. Поэтому — создадим для этого отдельного пользователя с помощью следующей команды:
Нужно будет указать пароль и дополнительные параметры.
Далее нужно создать директорию, где PostgreSQL будет хранить файлы баз данных и дополнительную информацию. Выполним команду создания директории:
/usr/local/pgsql/data — каталог с данными, можно указать любой. Я использую именно эту директорию.
И теперь нужно поменять владельца этой директории, ведь PostgreSQL у нас работать будет под пользователем postgres:
После этого работаем от пользователя postgres. Переключиться на него можно с помощью следующей команды:
Перед началом использования сервера, необходимо инициализировать кластер БД (подсказать PostgreSQL, что созданная выше директория будет являеться каталогом с данными сервера). Для этого используется утилита initdb.
При моих настройках, нужно перейти в директорию, где находятся исполняемые файлы PostgreSQL (можно руками поменять этот путь, но мы ничего не меняли и оставили значение по умолчанию):
Все нужные нам команды — initdb, psql, pg_dump и другие.
Но запускать эти команды просто так нельзя (без доп.настроек). Нужно зайти в эту директорию и запускать через точку: ./initdb; ./psql
Чтобы было удобнее, необходимо настроить переменную окружения $PATH.
$PATH — это переменная окружения, используемая для указания оболочке, где искать исполняемые файлы.
Но — сначала убедимся, что (ну мало ли?) ничего не настроена. Попробуем выполнить команду инициализации кластера. В документации описаны ключи этой команды, самый главный здесь D — путь до директории с данными, которую создали на предыдущем шаге:
Не настроено ничего. Но настроить довольно просто:
Данной командой мы к переменной $PATH добавляем в начало путь до нашей директории с программами.
А теперь снова проверим команду инициализации кластера:
Всё отлично! Теперь можно запускать сервер (даже команду нам подсказали). Но я воспользуюсь самой минимальной записью этой команды:
Ой… Не заработало. Не сработала эта команда потому, что я важный ключ -D не указал (каталог с данными). Можно его руками прописать, в ключе. А можно настроить переменную окружения $PGDATA. Если она заполнена — то pg_ctl будет оттуда информацию забирать. Ну и наличие такой переменной — это удобно. Настроим следующим образом:
И снова попробуем запустить сервер:
Сервер запустился. Подключимся к серверу с помощью psql`a:
Всё работает! Установлена версия PostgreSQL 13.1. Если стрелку вверх нажать в psql — будут подставляться предыдущие команды, удобно.
7. УСТАНОВКА РАСШИРЕНИЙ
Давайте еще попробуем проверить, какие расширения сейчас доступны:
Всего одно расширение. Не густооооааа, так ведь расширения (лично я) и не ставил никакие!
Давайте вы уже сами всё поставите. Команды такие:
- Возвращаемся в суперпользователя ОС
- cd
/postgres/contrib
А теперь вернемся в пользователя postgres:
8. СОХРАНЕНИЕ ПЕРЕМЕННЫХ ОКРУЖЕНИЯ
И проверим доступные расширения. Запускаем psql:
Ну что ж такое! Только что всё работало! Проверим ка мы переменную $PATH:
Нет нашего адреса! Как так?
А вот так — когда мы же создавали переменную окружения, мы создали её для текущего сеанса пользователя. Закрыли терминал — переменная исчезла. Нужно её создать и сохранить. Я использую следующий способ — сохранение переменных в файле .bashrc (это файл с командами, которые выполняются при запуске оболочки bash).
Перейдите в домашнюю директорию пользователя postgres (для других пользователей можно сделать то же самое, так как .bashrc — это файл для конкретного пользователя) и проверьте, какие скрытые файлы там есть, точка в начале означает, что это скрытый файл:
У меня вывод получился такой:
Не помню уже, кто и когда создал этот файл. Ну и ничего страшного. Если у вас такого файл нет — создайте его:
Открываем его любым удобным редактором на изменение (я использую nano):
И добавляем туда (в самый конец, если в файле уже что-то есть) объявление двух наших переменных окружения:
Нажимаем Ctrl + x для выхода с сохранением, подтверждаем сохранения.
Чтобы переменные применились — нужно повторно запустить bash — я вернулся в моего пользователя test, а потом снова зашел в postgres и запустил команду psql:
И проверим доступные расширения (ранее у нас было только одно, но вы же установили всё из папки /contrib?):
Сорок одно доступное расширение! Вот теперь всё работает так, как я и хотел.
Мы поставили необходимые библиотеки для корректной установки PostgreSQL, установили сервер, осуществили необходимые настройки (стрелка вверх в psql работает), убедились в работоспособности PostgreSQL, установили все доступные расширения.
Источник
Когда-то я рассказал про установку Ubuntu на VirtualBox. Настала пора рассказать про установку PostgreSQL из исходных кодов.
Сразу приступаем (считаю, что виртуальная или реальная машина с Ubuntu у вас уже имеется).
Что нас ждет:
- Информация о стенде
- Настройка операционной системы
- Получение исходного кода PostgreSQL
- До установки PostgreSQL
- Установка PostgreSQL
- Настройки для работы с PostgreSQL
- Установка расширений
- Сохранение переменных окружения
- Итоги
Уфф, сам удивился, что получилось очень много. Погнали!
1. ИНФОРМАЦИЯ О СТЕНДЕ
Для чистоты эксперимента еще покажу, какая у меня ВМка получилась по характеристикам: кратко — основной пользователь test, имя компьютера testPC, xUbuntu 20.04.01, 2 Гб ОЗУ, 1 ядро процессора, 20 ГБ жесткий диск SSD.
Больше информации о стенде:
test@testPC:~$ lscpu | head -n 17 Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian Address sizes: 39 bits physical, 48 bits virtual CPU(s): 1 On-line CPU(s) list: 0 Thread(s) per core: 1 Core(s) per socket: 1 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 142 Model name: Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz Stepping: 12 CPU MHz: 1799.959 BogoMIPS: 3599.91 test@testPC:~$ free -h total used free shared buff/cache available Mem: 1,9Gi 1,1Gi 188Mi 32Mi 674Mi 683Mi Swap: 923Mi 0B 923Mi test@testPC:~$ sudo fdisk -l | grep '^/dev' [sudo] password for test: /dev/sda1 * 2048 1050623 1048576 512M b W95 FAT32 /dev/sda2 1052670 41940991 40888322 19,5G 5 Extended /dev/sda5 1052672 41940991 40888320 19,5G 83 Linux test@testPC:~$ sudo lshw -class display *-display description: VGA compatible controller product: VirtualBox Graphics Adapter vendor: InnoTek Systemberatung GmbH physical id: 2 bus info: pci@0000:00:02.0 version: 00 width: 32 bits clock: 33MHz capabilities: vga_controller rom configuration: driver=vboxvideo latency=0 resources: irq:18 memory:e0000000-e0ffffff memory:c0000-dffff test@testPC:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.1 LTS Release: 20.04 Codename: focal
Хм, команды (почерпнутые из интернета) на моём стенде говорят, что мой диск — HDD. Странно, но разбираться сейчас не буду. Он точно SSD 🙂
[свернуть]
2. НАСТРОЙКА ОПЕРАЦИОННОЙ СИСТЕМЫ
После установки ОС нужно выполнить еще несколько шагов.
Сейчас образы (как минимум Ubuntu, но, наверное, и других дистрибутивов) стараются сделать поменьше размером и не включают многие нужные пакеты, особенно для компиляции из исходных кодов (так, отсутствуют GCC и MAKE, которые нам нужны).
Давайте проверим:
test@testPC:~$ gcc --version Command 'gcc' not found, but can be installed with: sudo apt install gcc test@testPC:~$ make --version Command 'make' not found, but can be installed with: sudo apt install make # version 4.2.1-1.2, or sudo apt install make-guile # version 4.2.1-1.2
Чтобы не устанавливать все нужные пакеты по отдельности, поставим один пакет-справочник build-essential, все нужное для компиляции подтянется при его установке (G++, GCC, dpkg-dev, make) и другие пакеты:
sudo apt update sudo apt install build-essential
После завершения установки, снова проверим версии:
test@testPC:~$ gcc --version gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. test@testPC:~$ make --version GNU Make 4.2.1 Built for x86_64-pc-linux-gnu Copyright (C) 1988-2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
Теперь всё в порядке и можно продолжать.
3. ПОЛУЧЕНИЕ ИСХОДНОГО КОДА POSTGRESQL
Устанавливать будем из исходного кода, а его нужно где-то взять. Для этого воспользуемся официальным репозитарием на GitHub`e (сервисе онлайн-хранения кода с контролем версий): https://github.com/postgres/postgres/
Можно прямо с этой страницы код нужной ветки скачать, но мы поступим по другому:
Сначала установим специальную утилиту GIT, с помощью которой можно отслеживать изменения в онлайн-репозитарии на GitHub`e, скачивать-закачивать изменения. Проверим, может она уже есть (так и называется git):
test@testPC:~$ git --version Command 'git' not found, but can be installed with: sudo apt install git
Отсутствует. Поэтому установим, как и рекомендуют:
sudo apt install git
Теперь можно скачивать с помощью этой утилиты исходный код из официального репозитария следующей командой:
git clone https://github.com/postgres/postgres
Клонируем (копируем себе) данный репозитарий. Клонирование занимает некоторое время (минут пять), поэтому, пока оно идет — можете быстро посмотреть полезный сайт с информацией о GIT`e: https://git-scm.com/book/ru/v2. Там много интересного материала по работе с GIT и GitHub.
test@testPC:~$ git clone https://github.com/postgres/postgres Cloning into 'postgres'... remote: Enumerating objects: 25, done. remote: Counting objects: 100% (25/25), done. remote: Compressing objects: 100% (25/25), done. remote: Total 811101 (delta 0), reused 1 (delta 0), pack-reused 811076 Receiving objects: 100% (811101/811101), 504.15 MiB | 2.96 MiB/s, done. Resolving deltas: 100% (665498/665498), done. Updating files: 100% (5794/5794), done.
Была создана директория postgres, перейдем туда:
cd postgres
В ней лежит много разных директорий (и файлов), о которых сейчас знать не обязательно:
test@testPC:~/postgres$ ls aclocal.m4 configure contrib doc HISTORY README src config configure.ac COPYRIGHT GNUmakefile.in Makefile README.git
Нужно проверить, в какой ветке мы находимся. Для этого используется команда:
test@testPC:~/postgres$ git status On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean
Мы в ветке по умолчанию (master), но устанавливать будем последнюю на данный момент стабильную версию — 13-ю. Посмотреть все ветки в репозитарии можно либо командой:
git branch -a
Вывод git branch -a:
test@testPC:~/postgres$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/REL2_0B remotes/origin/REL6_4 remotes/origin/REL6_5_PATCHES remotes/origin/REL7_0_PATCHES remotes/origin/REL7_1_STABLE remotes/origin/REL7_2_STABLE remotes/origin/REL7_3_STABLE remotes/origin/REL7_4_STABLE remotes/origin/REL8_0_STABLE remotes/origin/REL8_1_STABLE remotes/origin/REL8_2_STABLE remotes/origin/REL8_3_STABLE remotes/origin/REL8_4_STABLE remotes/origin/REL8_5_ALPHA1_BRANCH remotes/origin/REL8_5_ALPHA2_BRANCH remotes/origin/REL8_5_ALPHA3_BRANCH remotes/origin/REL9_0_ALPHA4_BRANCH remotes/origin/REL9_0_ALPHA5_BRANCH remotes/origin/REL9_0_STABLE remotes/origin/REL9_1_STABLE remotes/origin/REL9_2_STABLE remotes/origin/REL9_3_STABLE remotes/origin/REL9_4_STABLE remotes/origin/REL9_5_STABLE remotes/origin/REL9_6_STABLE remotes/origin/REL_10_STABLE remotes/origin/REL_11_STABLE remotes/origin/REL_12_STABLE remotes/origin/REL_13_STABLE remotes/origin/Release_1_0_3 remotes/origin/WIN32_DEV remotes/origin/ecpg_big_bison remotes/origin/master
[свернуть]
большой список выводится. Либо можно и на веб-странице репозитария в GitHub`e посмотреть:
Теперь нужно переключиться на нужную ветку. Для этого существует команда git checkout, которой передается название ветки:
test@testPC:~/postgres$ git checkout REL_13_STABLE Branch 'REL_13_STABLE' set up to track remote branch 'REL_13_STABLE' from 'origin'. Switched to a new branch 'REL_13_STABLE' test@testPC:~/postgres$ git status On branch REL_13_STABLE Your branch is up to date with 'origin/REL_13_STABLE'. nothing to commit, working tree clean
Теперь всё так, как нам нужно — активна тринадцатая ветка, именно эту версию и будем устанавливать.
4. ДО УСТАНОВКИ POSTGRESQL
Рекомендую почитать страницу документации с требованиями при установке из исходного кода.
На этой странице нужно обратить внимание на следующие несколько моментов:
По умолчанию при сборке используется библиотека GNU Readline. Она позволяет запоминать все вводимые команды в psql (SQL-интерпретатор командной строки для PostgreSQL) и затем, пользуясь клавишами-стрелками, возвращаться к ним и редактировать их.
Если вы не желаете использовать эту возможность, вы должны добавить указание —without-readline для configure.
Если не указать —wihout-readline, при выполнении команды ./configure появится следующая ошибка:
... configure: error: readline library not found If you have readline already installed, see config.log for details on the failure. It is possible the compiler isn't looking in the proper directory. Use --without-readline to disable readline support.
Если не устанавливать эту возможность, тогда в psql`е будет не очень удобно работать. Например, выполняем отображение версии сервера, затем хотим повторить эту команду — если нажать на стрелку вверх (как это обычно делаем в терминале) появляются вот такие цифробуквы, которые нам ничем не помогут (^[[A):
postgres@testPC:~$ psql psql (12.5) Type "help" for help. postgres=# select version(); version ---------------------------------------------------------------------------------------------------- PostgreSQL 12.5 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1 ~20.04) 9.3.0, 64-bit (1 row) postgres=# ^[[A
В интернете рекомендуют ставить libreadline-dev.
Еще момент со страницы документации:
По умолчанию для сжатия данных используется библиотека zlib.
Если вы не хотите её использовать, вы должны передать configure указание —without-zlib.
А если не указать —wihout-zlib, при выполнении команды ./configure появится вот такая ошибка:
... configure: error: zlib library not found If you have zlib already installed, see config.log for details on the failure. It is possible the compiler isn't looking in the proper directory. Use --without-zlib to disable zlib support.
Если не устанавливать эту возможность, тогда не получиться заархивировать дамп базы данных (при использовании pg_dump). При выполнении данной команды с параметром установки сжатия данных (-Z 0..9) появится следующее сообщение:
postgres@testPC:/usr/local/pgsql/data$ pg_dump -d postgres -F c -Z 2 -f mydump pg_dump: warning: requested compression not available in this installation -- archive will be uncompressed
В интернете рекомендуют ставить zlib1g-dev.
И заключительный момент:
Если вы хотите скомпилировать код из дерева Git, а не из специального пакета исходного кода, либо вы хотите работать с этим кодом, вам также понадобятся следующие пакеты:
Flex и Bison потребуются для сборки из содержимого Git или если вы меняете собственно файлы определений анализа и разбора.
Flex — средством для генерации программ. которые распознают шаблоны в тексте.
Bison — является генератором парсеров, генерирует программу, которая анализирует структуру текстовых файлов.
Мы ставим именно из дерева Git, поэтому сначала нужно поставить еще и их.
Итого — нужно доставить следующие пакеты:
- libreadline-dev
- zlib1g-dev
- flex
- bison
следующим стандартным образом:
sudo apt install libreadline-dev sudo apt install zlib1g-dev sudo apt install flex sudo apt install bison
После завершения установки этих пакетов проверьте, чтобы вы находились в директории postgres, так как далее команды будем выполнять именно оттуда.
5. УСТАНОВКА POSTGRESQL
Процесс установки из исходного кода состоит из трех этапов:
- Конфигурирование — запуск команды ./configure. Эта команда ищет необходимые библиотеки и заголовочные файлы, осуществляет настройку особых параметров и подключается дополнительные библиотеки (описанные выше —without-параметры из этой области). В результате работы создается файлы Makefiles, содержащий всю необходимую информацию для сборки, его можно просмотреть в текстовом редакторе.
- Сборка (компиляция) — запуск команды make. Запускается компиляция программы из исходного кода. При работе используется Makefiles, в которых описаны все параметры сборки приложения. Результат работы — собранная программа в текущей директории.
- Установка — команда make install. Запускается непосредственная установка собранного приложения. Результат — работоспособная программа (если не было ошибок).
Пройдем эти шаги (в документации они тоже описаны):
Запускаем конфигурирование. Так как я установил и readline и gzip, я просто запускаю команду:
./configure
Выполнение этой команды у меня занимается около пятнадцати секунд. Последние пять строк вывода:
config.status: linking src/backend/port/tas/dummy.s to src/backend/port/tas.s config.status: linking src/backend/port/posix_sema.c to src/backend/port/pg_sema.c config.status: linking src/backend/port/sysv_shmem.c to src/backend/port/pg_shmem.c config.status: linking src/include/port/linux.h to src/include/pg_config_os.h config.status: linking src/makefiles/Makefile.linux to src/Makefile.port
Далее — сборка:
make
Опять же, если вы поставили и bizon, и flex — тогда ошибок не будет. Но, если этих программ не хватает, ошибки будут выглядеть следующим образом:
Не установлен bison:
ERROR: `bison' is missing on your system. It is needed to create the file `gram.c'. You can either get bison from a GNU mirror site or download an official distribution of PostgreSQL, which contains pre-packaged bison output. *** make[2]: *** [../../../src/Makefile.global:750: gram.c] Error 1 make[2]: Leaving directory '/home/test/postgres/src/backend/parser' make[1]: *** [Makefile:137: parser/gram.h] Error 2 make[1]: Leaving directory '/home/test/postgres/src/backend' make: *** [src/Makefile.global:388: submake-generated-headers] Error 2
Не установлен flex:
ERROR: `flex' is missing on your system. It is needed to create the file `bootscanner.c'. You can either get flex from a GNU mirror site or download an official distribution of PostgreSQL, which contains pre-packaged flex output. *** make[3]: *** [../../../src/Makefile.global:745: bootscanner.c] Error 1 make[3]: Leaving directory '/home/test/postgres/src/backend/bootstrap' make[2]: *** [common.mk:39: bootstrap-recursive] Error 2 make[2]: Leaving directory '/home/test/postgres/src/backend' make[1]: *** [Makefile:42: all-backend-recurse] Error 2 make[1]: Leaving directory '/home/test/postgres/src' make: *** [GNUmakefile:11: all-src-recurse] Error 2
Если произошли такие ошибки, можно откатиться к начальному состоянию и запустить конфигурирование и установку заново. Для этого используется команда:
make distclean
После нее снова нужно запускать ./configure с указанием необходимых параметров (если они есть). И потом — опять make.
Кстати!
Кстати, если вы хотите сохранить всё, что выводит команда make, её вывод можно отправить в файл следующим образом:
make > make.txt
[свернуть]
И на счет дополнительных режимов установки
А если вы хотите собрать всё, что может быть собрано, включая документацию (страницы HTML и man) и дополнительные модули (contrib), выполните команду:
make world
Финальное сообщение будет следующим:
PostgreSQL, contrib and documentation successfully made. Ready to install.
[свернуть]
На моей виртуальной машине сборка шла около семи минут (плюс-минус минута). Если сборка завершилась успешно, вы увидите следующее сообщение:
All of PostgreSQL successfully made. Ready to install.
Далее можно запустить команду make check. С помощью этой команды можно протестировать собранный сервер до его установки с помощью регрессионных тестов. Регрессионные тесты — это комплект тестов, проверяющих, что PostgreSQL работает на вашем компьютере так, как задумано разработчиками. Давайте проверим:
make check ======================= All 201 tests passed. =======================
По видимому, всё хорошо (проверка длилась около минуты). Идем дальше.
Установка — запускаем команду:
sudo make install
И через пару секунд я получил сообщение:
PostgreSQL installation complete.
Ура! Установка PotsgreSQL 13-й версии успешно завершена!
Но пользоваться данной СУБД еще не получиться… Нужно произвести настройки (и в документации об этом говориться: Подготовка к работе и сопровождение сервера, ссылку даю на оглавление раздела).
6. НАСТРОЙКИ ДЛЯ РАБОТЫ С POSTGRESQL
Если кратко — нужно создать отдельного пользователя для PostgreSQL, инициализировать кластер баз данных, проверить работоспособность сервера, создать и сохранить переменные окружения и установить дополнительные модули (contrib).
А теперь — подробнее.
Не рекомендуется запускать сервер PostgreSQL от имени суперпользователя ОС. Поэтому — создадим для этого отдельного пользователя с помощью следующей команды:
test@testPC:~/postgres$ sudo adduser postgres Adding user `postgres' ... Adding new group `postgres' (1001) ... Adding new user `postgres' (1001) with group `postgres' ... Creating home directory `/home/postgres' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for postgres Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y
Нужно будет указать пароль и дополнительные параметры.
Далее нужно создать директорию, где PostgreSQL будет хранить файлы баз данных и дополнительную информацию. Выполним команду создания директории:
sudo mkdir /usr/local/pgsql/data
/usr/local/pgsql/data — каталог с данными, можно указать любой. Я использую именно эту директорию.
И теперь нужно поменять владельца этой директории, ведь PostgreSQL у нас работать будет под пользователем postgres:
sudo chown postgres /usr/local/pgsql/data/
После этого работаем от пользователя postgres. Переключиться на него можно с помощью следующей команды:
sudo su - postgres
Перед началом использования сервера, необходимо инициализировать кластер БД (подсказать PostgreSQL, что созданная выше директория будет являеться каталогом с данными сервера). Для этого используется утилита initdb.
При моих настройках, нужно перейти в директорию, где находятся исполняемые файлы PostgreSQL (можно руками поменять этот путь, но мы ничего не меняли и оставили значение по умолчанию):
cd /usr/local/pgsql/bin ls postgres@testPC:/usr/local/pgsql/bin$ ls clusterdb pg_archivecleanup pg_dump pg_rewind postmaster createdb pg_basebackup pg_dumpall pg_test_fsync psql createuser pgbench pg_isready pg_test_timing reindexdb dropdb pg_checksums pg_receivewal pg_upgrade vacuumdb dropuser pg_config pg_recvlogical pg_verifybackup ecpg pg_controldata pg_resetwal pg_waldump initdb pg_ctl pg_restore postgres
Все нужные нам команды — initdb, psql, pg_dump и другие.
Но запускать эти команды просто так нельзя (без доп.настроек). Нужно зайти в эту директорию и запускать через точку: ./initdb; ./psql
Чтобы было удобнее, необходимо настроить переменную окружения $PATH.
$PATH — это переменная окружения, используемая для указания оболочке, где искать исполняемые файлы.
Но — сначала убедимся, что (ну мало ли?) ничего не настроена. Попробуем выполнить команду инициализации кластера. В документации описаны ключи этой команды, самый главный здесь D — путь до директории с данными, которую создали на предыдущем шаге:
initdb -k -D /usr/local/pgsql/data/ postgres@testPC:/usr/local/pgsql/bin$ initdb -k -D /usr/local/pgsql/data/ initdb: command not found
Не настроено ничего. Но настроить довольно просто:
export PATH=/usr/local/pgsql/bin/:$PATH
Данной командой мы к переменной $PATH добавляем в начало путь до нашей директории с программами.
А теперь снова проверим команду инициализации кластера:
Вывод команды initdb:
postgres@testPC:/usr/local/pgsql/bin$ initdb -k -D /usr/local/pgsql/data/ The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locales COLLATE: en_US.UTF-8 CTYPE: en_US.UTF-8 MESSAGES: en_US.UTF-8 MONETARY: ru_RU.UTF-8 NUMERIC: ru_RU.UTF-8 TIME: ru_RU.UTF-8 The default database encoding has accordingly been set to "UTF8". The default text search configuration will be set to "english". Data page checksums are enabled. fixing permissions on existing directory /usr/local/pgsql/data ... ok creating subdirectories ... ok selecting dynamic shared memory implementation ... posix selecting default max_connections ... 100 selecting default shared_buffers ... 128MB selecting default time zone ... Europe/Moscow creating configuration files ... ok running bootstrap script ... ok performing post-bootstrap initialization ... ok syncing data to disk ... ok initdb: warning: enabling "trust" authentication for local connections You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb. Success. You can now start the database server using: pg_ctl -D /usr/local/pgsql/data/ -l logfile start
[свернуть]
Всё отлично! Теперь можно запускать сервер (даже команду нам подсказали). Но я воспользуюсь самой минимальной записью этой команды:
postgres@testPC:/usr/local/pgsql/bin$ pg_ctl start pg_ctl: no database directory specified and environment variable PGDATA unset Try "pg_ctl --help" for more information.
Ой… Не заработало. Не сработала эта команда потому, что я важный ключ -D не указал (каталог с данными). Можно его руками прописать, в ключе. А можно настроить переменную окружения $PGDATA. Если она заполнена — то pg_ctl будет оттуда информацию забирать. Ну и наличие такой переменной — это удобно. Настроим следующим образом:
export PGDATA=/usr/local/pgsql/data/
И снова попробуем запустить сервер:
postgres@testPC:/usr/local/pgsql/bin$ pg_ctl start waiting for server to start....2020-11-15 00:22:43.215 MSK [44295] LOG: starting PostgreSQL 13.1 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit 2020-11-15 00:22:43.218 MSK [44295] LOG: listening on IPv4 address "127.0.0.1", port 5432 2020-11-15 00:22:43.224 MSK [44295] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432" 2020-11-15 00:22:43.230 MSK [44296] LOG: database system was shut down at 2020-11-15 00:12:50 MSK 2020-11-15 00:22:43.234 MSK [44295] LOG: database system is ready to accept connections done server started
Сервер запустился. Подключимся к серверу с помощью psql`a:
postgres@testPC:/usr/local/pgsql/bin$ psql psql (13.1) Type "help" for help. postgres=# select version(); version ------------------------------------------------------------------------------------------------------ PostgreSQL 13.1 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1 ~20.04) 9.3.0, 64-bit (1 row) postgres=#
Всё работает! Установлена версия PostgreSQL 13.1. Если стрелку вверх нажать в psql — будут подставляться предыдущие команды, удобно.
7. УСТАНОВКА РАСШИРЕНИЙ
Давайте еще попробуем проверить, какие расширения сейчас доступны:
postgres=# select * from pg_available_extensions order by name; name | default_version | installed_version | comment ---------+-----------------+-------------------+------------------------------ plpgsql | 1.0 | 1.0 | PL/pgSQL procedural language (1 row)
Всего одно расширение. Не густооооааа, так ведь расширения (лично я) и не ставил никакие!
Давайте вы уже сами всё поставите. Команды такие:
- Возвращаемся в суперпользователя ОС
- cd ~/postgres/contrib
- make
- sudo make install
А теперь вернемся в пользователя postgres:
sudo su - postgres
8. СОХРАНЕНИЕ ПЕРЕМЕННЫХ ОКРУЖЕНИЯ
И проверим доступные расширения. Запускаем psql:
postgres@testPC:~$ psql Command 'psql' not found, but can be installed with: apt install postgresql-client-common Please ask your administrator.
Ну что ж такое! Только что всё работало! Проверим ка мы переменную $PATH:
postgres@testPC:~$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Нет нашего адреса! Как так?
А вот так — когда мы же создавали переменную окружения, мы создали её для текущего сеанса пользователя. Закрыли терминал — переменная исчезла. Нужно её создать и сохранить. Я использую следующий способ — сохранение переменных в файле .bashrc (это файл с командами, которые выполняются при запуске оболочки bash).
Перейдите в домашнюю директорию пользователя postgres (для других пользователей можно сделать то же самое, так как .bashrc — это файл для конкретного пользователя) и проверьте, какие скрытые файлы там есть, точка в начале означает, что это скрытый файл:
cd ~ ls -a
У меня вывод получился такой:
postgres@testPC:~$ ls -a . .bash_history .bashrc .local .psql_history .xscreensaver .. .bash_logout .config .profile .Xdefaults
Не помню уже, кто и когда создал этот файл. Ну и ничего страшного. Если у вас такого файл нет — создайте его:
touch .bashrc
Открываем его любым удобным редактором на изменение (я использую nano):
nano .bashrc
И добавляем туда (в самый конец, если в файле уже что-то есть) объявление двух наших переменных окружения:
export PATH=/usr/local/pgsql/bin/:$PATH export PGDATA=/usr/local/pgsql/data/
Нажимаем Ctrl + x для выхода с сохранением, подтверждаем сохранения.
Чтобы переменные применились — нужно повторно запустить bash — я вернулся в моего пользователя test, а потом снова зашел в postgres и запустил команду psql:
test@testPC:~/postgres/contrib$ sudo su - postgres [sudo] password for test: postgres@testPC:~$ psql psql (13.1) Type "help" for help. postgres=#
И проверим доступные расширения (ранее у нас было только одно, но вы же установили всё из папки /contrib?):
postgres=# select count(1) from pg_available_extensions; count ------- 41 (1 row)
Сорок одно доступное расширение! Вот теперь всё работает так, как я и хотел.
9. ИТОГИ
Мы поставили необходимые библиотеки для корректной установки PostgreSQL, установили сервер, осуществили необходимые настройки (стрелка вверх в psql работает), убедились в работоспособности PostgreSQL, установили все доступные расширения.
Получилось очень много, но в одном месте.
when installing Postgres-9.0.1 on CentOS-5../configure — output checking for inflate in -lz… no configure: error: zlib library not found
When we are installing Postgres-9.0.1 on CentOS-5.
Below is the error we are encountering —
./configure -- output
checking for inflate in -lz... no
configure: error: zlib library not found
If you have zlib already installed, see config.log for details on the
failure. It is possible the compiler isn’t looking in the proper directory.
Use —without-zlib to disable zlib support.
Inside the config.log, below is what we see —
configure:8204: checking for inflate in -lz
configure:8239: gcc -o conftest -O2 -Wall -Wmissing-prototypes
-Wpointer-arith -Wdeclaration-after-statement -Wendif-labels
-fno-strict-aliasing -fwrapv -D_GNU_SOURCE conftest.c -lz -lreadline
-ltermcap -lcrypt -ldl -lm >&5
/usr/bin/ld: skipping incompatible /usr/lib/libz.a when searching for -lz
/usr/bin/ld: cannot find -lz
Zlib rpms are installed and below is the rpm -qa output —
[root(at)localhost postgresql-9.0.1]# rpm -qa | grep zlib
zlib-1.2.3-4.el5
jzlib-1.0.7-4jpp.1
zlib-devel-1.2.3-4.el5
zlib-1.2.3-3
Popular posts from this blog
How to find the server is whether standby (slave) or primary(master) in Postgresql replication ?
Method 1 You can check the mode of the server using «pg_controldata». [pgsql@test~]$ pg_controldata /usr/local/pgsql/data84/ Database cluster state: in archive recovery —> This is Standby Database Database cluster state: in production —> This is Production Database [Master] Method 2 You can use pg_is_in_recovery() which returns True if recovery is still in progress(so the server is running in standby mode or slave) postgres=# select pg_is_in_recovery(); pg_is_in_recovery ——————- t (1 row) If Return false so the server is running in primary mode or master postgres=# select pg_is_in_recovery(); pg_is_in_recovery ——————- f (1 row)
How to Return a Result Set from a PostgreSQL Stored Procedure
Both stored procedures and user-defined functions are created with CREATE FUNCTION statement in PostgreSQL. To return one or more result sets (cursors in terms of PostgreSQL), you have to use refcursor return type. Quick Example : — Procedure that returns a single result set (cursor) CREATE OR REPLACE FUNCTION show_cities ( ) RETURNS refcursor AS $$ DECLARE ref refcursor; — Declare a cursor variable BEGIN OPEN ref FOR SELECT city , state FROM cities; — Open a cursor RETURN ref; — Return the cursor to the caller END ; $$ LANGUAGE plpgsql; Overview : Return Multiple Result Sets Cursor Lifetime Until the end of transaction Auto-commit Must be off Transaction must be active so the caller can see a result set Important Note : The cursor remains open until the end of transaction, and since PostgreSQL works
PostgreSQL New version upgrade
In this blog we are going to upgrade the postgresql server from 9.5 to 11.3 . We are upgraded the postgres server by using pg_upgrade utility as well as logical backup method , you can follow anyone of the method . Collect the server details before proceed upgrade activity. Title PostgreSQL VERSION 9.5 PostgreSQL VERSION 11.3 DATA DIRECTORY /data_9.5 /data_11.3 BIN path /opt/postgresql/9.5 /opt/postgresql/11.3 PORT 50000 5432 PREREQUEST : =========== Step 1. Check the application backend connection if any application connected , Disconnect the application from DB server. Below command will be helpful to checking backend connection : template1=# select datname, count(*) from pg_stat_activity group by datname; datname | count ————+——- testdb | 1 template1 | 0 (2 rows) template1=# select datname, numbackends from pg_stat_database; datname | numbackends ————+————- testdb | 1 template1 | 0 templ
How to Get Table Size, Database Size, Indexes Size, schema Size, Tablespace Size, column Size in PostgreSQL Database
In this post, I am sharing few important function for finding the size of database, table and index in PostgreSQL. Finding object size in postgresql database is very important and common. Is it very useful to know the exact size occupied by the object at the tablespace. The object size in the following scripts is in GB. The scripts have been formatted to work very easily with PUTTY SQL Editor. 1. Checking table size excluding table dependency: SELECT pg_size_pretty(pg_relation_size(‘mhrordhu_shk.mut_kharedi_audit’)); pg_size_pretty —————- 238 MB (1 row) 2. Checking table size including table dependency: SELECT pg_size_pretty(pg_total_relation_size(‘mhrordhu_shk.mut_kharedi_audit’)); pg_size_pretty —————- 268 MB (1 row) 3. Finding individual postgresql database size SELECT pg_size_pretty(pg_database_size(‘db_name’)); 4. Finding individual table size for postgresql database -including dependency index: SELECT pg_size_pretty(pg_total_rel
Linux ctime,mtime,atime,cmin,amin,mmin
Unix and therefore Linux uses (at least) 3 different timestamps on modern file systems (see File systems Table for info) in order to date any files. You can use these information to search for files, check logs, manage your backup and more… that’s why it is a must for any sysadmin to clearly understand this mechanism. This page is aimed at exposing basics knowledge to understand and use files timestamps. 1) Definitions Here are some time stamps related definitions. 1.1 atime This is the Access time : atime is updated whenever file’s data is accessed (a read, write or any other access); this could be done by a system process, interactively by CLI or by a script. 1.2 mtime This is the Modification time : mtime is updated whenever the file’s content changes. This time stamp is not updated by a change of files permissions (e.g : through a chown command). It is usually used for tracking the file content changes (see the Linux time related tools section below for more inf
PostgreSQL can be installed by means of two ways
- Installing from source
- Installing binary packages
NOTE: PostgreSQL 13 Installation on RedHat 7 and everything about PostgreSQL that root can do is found here
In this tutorial, you will learn how to install PostgreSQL in Linux using source code.
Step by Step PostgreSQL installation using binary packages is found here
There are two steps involved in creating a PostgreSQL server.
- Preparing the setup with prerequisites.
- How to install PostgreSQL server.
Preparing the setup with prerequisites
Before we get into actual installation of PostgreSQL server we shall have to check the pre-requisites that are defined for PostgreSQL installation.
The machine I am using for the entire tutorial is el6-64 Bit.
[root@postgreshelp ~]# uname -a Linux postgreshelp 2.6.39—400.17.1.el6uek.x86_64 #1 SMP Fri Feb 22 18:16:18 PST 2013 x86_64 x86_64 x86_64 GNU/Linux [root@postgreshelp ~]# |
Pre-requisite check to install PostgreSQL
A basic installation of Linux would sufficiently enough to install PostgreSQL on Linux, however, we check the basic requirements.
- Make sure the GNU make version 3.80.
[root@postgreshelp ~]# make —version GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This program built for x86_64—unknown—linux—gnu [root@postgreshelp ~]# |
2. A GNU C compiler. Recent versions of GCC are recommended.
[root@postgreshelp ~]# rpm -qa gcc* gcc—4.4.7—18.el6.x86_64 gcc—c++—4.4.7—18.el6.x86_64 [root@postgreshelp ~]# |
3. tar is required to unpack the source distribution, in addition to either gzip or bzip2.
Apart from these, there are two additional pre-requisites libraries which are recommended to have.
They are.
The GNU Readline library
It allows psql (the PostgreSQL command line SQL interpreter) to remember each command you type, and allows you to use arrow keys to recall and edit previous commands. This is very helpful and is strongly recommended.
If you don’t want to use it then you must specify the —without-readline option to configure
[root@postgreshelp ~]# rpm -qa readline readline—6.0—4.el6.x86_64 [root@postgreshelp ~]# |
The zlib compression library
zlib is a software library used for data compression
If you don’t want to use it then you must specify the —without-zlib option to configure.
[root@postgreshelp ~]# rpm -qa zlib zlib—1.2.3—29.el6.x86_64 [root@postgreshelp ~]# |
How to install a PostgreSQL database server – step by step:
There are few advantages of installing PostgreSQL server using binaries. The main advantages include
- Split the binary and library directories and make sure that PostgreSQL does not integrate tightly into the existing OS and OS directories.
- Custom configure options, or some other options, to enable dtrace.
- Highly customizable.
How to install PostgreSQL server
Note: This below mentioned steps are applicable for any version you download from PostgreSQL site including PostgreSQL Version 13, Read more about PostgreSQL v13 Master Guide here.
Step 1: Download the source code.
Download PostgreSQL-9.6.8 binaries from the official PostgreSQL site or Click Here to download the source code.
You should get a file named postgresql-9.6.8.tar.gz
Step 2: Extract the tar archive
gunzip postgresql—9.6.8.tar.gz tar xvf postgresql—9.6.8.tar |
This will create a directory called postgresql-9.6.8 containing the PostgreSQL source code.
Go to the directory and open the file INSTALL which gives you insights on how to install postgresql in Linux.
Following the steps mentioned in the INSTALL file will install the postgresql server, let’s have a look at the steps:
Short Version ./configure make su make install adduser postgres mkdir /usr/local/pgsql/data chown postgres /usr/local/pgsql/data su — postgres /usr/local/pgsql/bin/initdb —D /usr/local/pgsql/data /usr/local/pgsql/bin/postgres —D /usr/local/pgsql/data >logfile 2>&1 & /usr/local/pgsql/bin/createdb test /usr/local/pgsql/bin/psql test |
Now, we will try to understand each step in the document while doing the installation.
Step 3: configure
[root@postgreshelp postgresql—9.6.8]# ./configure |
configure check your system to see if all libraries you need are present. It generates vital parts of the build infrastructure.
The default configuration will build the server and utilities, as well as all client applications and interfaces that require only a C compiler.
All files will be installed under /usr/local/pgsql by default.
You can customize the build and installation process by supplying one or more commands mentioned here.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@postgreshelp postgresql—9.6.8]# ./configure checking build system type... x86_64—pc—linux—gnu checking host system type... x86_64—pc—linux—gnu checking which template to use... linux checking whether to build with 64—bit integer date/time support... yes checking whether NLS is wanted... no checking for default port number... 5432 checking for block size... 8kB checking for segment size... 1GB checking for WAL block size... 8kB .. .. .. config.status: linking src/backend/port/dynloader/linux.h to src/include/dynloader.h config.status: linking src/include/port/linux.h to src/include/pg_config_os.h config.status: linking src/makefiles/Makefile.linux to src/Makefile.port [root@postgreshelp postgresql—9.6.8]# [root@postgreshelp postgresql—9.6.8]# |
The successful configure should end as described above.
In some cases, you might find that our operating system lacks libraries needed to compile PostgreSQL properly. Some of the most common candidates are libreadline-dev and zlib-dev (of course there are some more).
In that case, the configure will show error as shown below.
configure: error: readline library not found If you have readline already installed, see config.log for details on the failure. It is possible the compiler isn‘t looking in the proper directory. Use —without-readline to disable readline support. [root@postgreshelp postgresql-9.6.8]# [OR] configure: error: zlib library not found If you have zlib already installed, see config.log for details on the failure. It is possible the compiler isn’t looking in the proper directory. Use —without—zlib to disable zlib support. [root@postgreshelp postgresql—9.6.8]# |
Step 4: Build a PostgreSQL.
We can move forward and actually compile PostgreSQL, using the following commands one by one with root user.
4.1 make
[root@postgreshelp postgresql—9.6.8]# su [root@postgreshelp postgresql—9.6.8]# make make —C src all make[1]: Entering directory `/root/postgresql—9.6.8/src‘ make -C common all .. .. make[1]: Leaving directory `/root/postgresql-9.6.8/config’ <strong>All of PostgreSQL successfully made. Ready to install.</strong> |
4.2 make install
[root@postgreshelp postgresql—9.6.8]# make install make —C src install make[1]: Entering directory `/root/postgresql—9.6.8/src‘ .. .. make[1]: Leaving directory `/root/postgresql-9.6.8/config’ <strong>PostgreSQL installation complete.</strong> [root@postgreshelp postgresql—9.6.8] |
This completes the PostgreSQL server installation.
The build will take a few minutes depending on your hardware.
If you want to scale out the build process to many CPU cores, you can use –j, shown as follows:
make -j 8
The -j 8 command will tell make to do up to 8 things in parallel, if possible. Adding parallelism to the build process will definitely speed up the process.
Now we will move on to creating and configuring PostgreSQL database instance.
Step 1: Add postgres user at OS level.
[root@postgreshelp postgresql—9.6.8]# adduser postgres [root@postgreshelp postgresql—9.6.8]# |
Step 2: Create required directory for database files and assign required permissions.
mkdir /u02/pgsql/data
chown postgres /u02/pgsql/data
[root@postgreshelp data]# mkdir /u02/pgsql/data [root@postgreshelp data]# chown postgres /u02/pgsql/data |
Step 3: initialize the database cluster
create a new PostgreSQL database cluster using initdb command.
syntax: initdb [option…] [—pgdata | -D] directory
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
[postgres@postgreshelp ~]$ /usr/local/pgsql/bin/initdb —D /u02/pgsql/data The files belonging to this database system will be owned by user «postgres». This user must also own the server process. The database cluster will be initialized with locale «en_US.UTF-8». The default database encoding has accordingly been set to «UTF8». The default text search configuration will be set to «english». Data page checksums are disabled. fixing permissions on existing directory /u02/pgsql/data ... ok creating subdirectories ... ok selecting default max_connections ... 100 selecting default shared_buffers ... 128MB selecting dynamic shared memory implementation ... posix creating configuration files ... ok running bootstrap script ... ok performing post—bootstrap initialization ... ok syncing data to disk ... ok WARNING: enabling «trust» authentication for local connections You can change this by editing pg_hba.conf or using the option —A, or —auth—local and —auth—host, the next time you run initdb. Success. You can now start the database server using: <strong>/usr/local/pgsql/bin/pg_ctl —D /u02/pgsql/data —l logfile start</strong> [postgres@postgreshelp ~]$ |
The above command initializes the postgres database cluster and installs reqired files under the data directory specified.
Step 4: Start the database cluster:
As given in the above step, we can now start the database cluster using the below command.
[postgres@postgreshelp ~]$ /usr/local/pgsql/bin/pg_ctl —D /u02/pgsql/data —l logfile start server starting [postgres@postgreshelp ~]$ |
This completes the PostgreSQL server installation along with PostgreSQL database cluster initialization.
On the successful start of the database cluster, the following processes will run by default.
[postgres@postgreshelp ~]$ ps —ef | grep postgres root 20082 4435 0 20:28 pts/2 00:00:00 su — postgres postgres 20083 20082 0 20:28 pts/2 00:00:00 —bash postgres 20127 1 0 20:28 pts/2 00:00:00 /usr/local/pgsql/bin/postgres —D /u02/pgsql/data postgres 20129 20127 0 20:28 ? 00:00:00 postgres: checkpointer process postgres 20130 20127 0 20:28 ? 00:00:00 postgres: writer process postgres 20131 20127 0 20:28 ? 00:00:00 postgres: wal writer process postgres 20132 20127 0 20:28 ? 00:00:00 postgres: autovacuum launcher process postgres 20133 20127 0 20:28 ? 00:00:00 postgres: stats collector process postgres 20137 20083 0 20:29 pts/2 00:00:00 ps —ef postgres 20138 20083 0 20:29 pts/2 00:00:00 grep postgres [postgres@postgreshelp ~]$ |
You will learn more about the processes here.
We can then login to the default database called postgres with a default database user postgres using the following command
$ psql
[postgres@postgreshelp ~]$ /usr/local/pgsql/bin/psql psql (9.6.8) Type «help» for help. postgres=# postgres=# |
Further Reading:
What actually happens when you do configure, make and make install?
The entire process of behind the scenes is described here.
Bonus: PostgreSQL 13 New Features Practical Master Guide is here.
Words from postgreshelp
Thank you for giving your valuable time to read the above information. I hope the content served your purpose in reaching out the blog.
Suggestions for improvement of the blog are highly appreciable. Please contact us for any information/suggestion/feedback.
If you want to be updated with all our articles
please follow us on Facebook | Twitter
Please subscribe to our newsletter.
to sdima75
Primo, юзая pkgs.org, вы не решаете вопрос с зависимостями для тех пакетов, что пытаетесь ставить вручную. На скриншоте (последнем) вам об этом явно намекают, ага…
Secundo, Astra Linux текущей версии (что SE, что CE) базируются на Debian 9. И бинарно не полностью совместима с Debian 10. Что ж вы пытаетесь Debian 10 то пихать туда, куда не следует? Об этом в прошлой теме уже вам говорил — да вы разорались как дите малое предпочли не обращать внимание…
Tertio, репозиторий для Stretch от Yandex давно превратился в тыкву. Юзайте репозиторий mirror.mephi.ru, чтобы получить актуал пакетов для Debian 9. И, если чего-то не хватает в репозитории Astra Linux (того же zlib-dev, ага), то подключайте mephi-репозиторий и будет счастье…
Quatro, учитесь читать выхлопы команд. Тем более, что он русифицирован: <Обновление из этого репозитория нельзя выполнить безопасным способом, и поэтому по умолчанию он отключён>. А дальше учитесь гуглить на предмет безопасности репозиториев, их GPG-ключей и вообще конструкции типа <wget … keys/…asc>…
Last, по умолчанию apt берет версию пакета по привязке к приоритету репозитория. Читай, если дать ему команду apt install postgresql-12, то будет зависимость от postgresql-common, который по версии (175astra) ниже, чем требуемая (182). Учитесь запускать установку нужного софта из нужного репозитория, добавленного в базу apt, через ключ «-t репозиторий» (см. ниже)….
Как вариант:
- разверните чистую систему заново (чтобы исключить ваши прошлые игрища, в которых сам черт ногу сломит);
- добавьте репозиторий PostgreSQL вручную в /etc/apt/source.list (причем без lsb-release, а с явным указанием stretch-pgdg, потому что PostgreSQL-репозиторий знать не знает про ОС под именем «orel», ага);
- пропишите ему параметр «trust», чтобы не париться с GPG-ключами (или можете погуглить, чего вам не хватило в первом случае для добавления GPG-ключа);
- сделайте sudo apt update;
- при установке postgresql-12 и проч. используйте указание на добавленный репозиторий через ключ apt install -t stretch-pgdg наименование_пакетов.
А лучше юзайте PostgreSQL, доступный в штатном репозитории Astra Linux и/или Debian 9. Модуль экстрасенсорики подсказывает, что PostgreSQL-12 вам нужен исключительно «на поиграццо». Потому как в противном случае половины вышеозначенных вопросов и проблем бы не было (смогли бы решить самостоятельно)…
ЗЫ Astra Linux построена на Debian, а Debian в своей stable ветке никогда самое свежее не юзает. Зато работает бесперебойно. Если хотите «быть в тренде» по незнанию или по совету всяких ламеров — меняйте дистрибутив и не пытайтесь свой самовар в чужой монастырь тащить…