Forum Turris
Fórum Turris Nápověda

Milí majitelé routerů Turris,

toto fórum bylo 9. 12. 2016 zmrazeno a nahrazeno naším novým Turris fórem. Ještě chvíli bude dostupné k prohlížení, ale již zde není možné přispívat. Více informací naleznete v oznámení o uzavření fóra.


Dear Turris routers users,

this forum has been frozen on Dec 9th, 2016 and replaced by our new Turris forum. It will be read-only accessible for some time after. For more information, read the announcement about closing the forum.

Nahoru Téma Majitelé routerů / Technická podpora / PostgreSQL - instalace a init skripty
- - Od ales.zeleny Dne 2016-01-04 00:52
Dobrý den,

instaloval jsem postgres a instalace vrátila 255 u postinst skriptu.

Musel jsem ručně založit uživatele (trochu mi u toho chybělo newgrp), inicializoval DB, ale pak zase byl problém s init skripty (tesy s asi chybou v su, popsáno na openwrt foru), tak jsem init skripty upravil... potud nezajímavé.

Je k dispozici nějaké testovací prostředí (abych marnými pokusy neošoupával NAND paměť)? Je správný postup popsat zde provedené úpravy, nebo by bylo k něčemu dobré pokusit se navrhnout změnu pro úpravu instalačních balíčků Postgresu pro Turris (s něčím takovým nemám nejmenší zkušenost)?
Nadřazený - - Od Filip Vyskočil Dne 2016-01-25 17:31
Dobrý den,
nevím, jestli by to byl správný postup, ale mně by to pomohlo :-)
Tedy popsat zde provedené úpravy/opravy.
Ale snad stačilo v init scriptech:
#    /usr/bin/su ${pguser} -c "/usr/bin/postmaster -D '${pgdata}' &" >> ${pglog} 2>&1
    start-stop-daemon -S -c postgres -x /usr/bin/postmaster >> ${pglog} 2>&1 -- -D "${pgdata}" &

#    /usr/bin/su ${pguser} -c "${pgctl} stop -D '${pgdata}' -s -m fast"
    start-stop-daemon -S -c postgres -x "${pgctl}" -- stop -D "${pgdata}" -s -m fast
Nadřazený - Od ales.zeleny Dne 2016-02-01 22:16
Dobrý večer,

chvilku trvalo, než jsem se k tomu dostal, takže přehed chyb, které jsem udělal a jak jsem se z nich zkusil poučit :-)

1) Instalace přes LuCi selhala,  možná proto, že jsem instaloval i klienta, který je na OpenWRT součástí instalace serveru, narozdíl od RHEL balíčků..
2) ruční instalace byla v pořádku, jen mne trochu zklamalo, že postgres uživatel má "obyčejné" ID nad 1000, ale což, to nakonec nevadí
3) nefingoval init skript, zde jsou mé úpravy - kromě potřeby použít start-stop-daemon , což naštěstí šlo celkem dobře najít na webu OpenWRT, v mém případě si výchozí init skript si ješte nerozuměl s obsluhou pid souboru, tak jsem se s tím zkusil vypořádat následujícími úpravami (zlepšení jsou vítána!):

Instalované balíčky:
root@turris:/mnt/microSD/turris_backup# opkg list-installed | grep -i -e pgsql -e libpq
libpq - 9.0.15-1
pgsql-server - 9.0.15-1

postgresql init skript - úpravy:

Nova funkce:

#
# Check wheather proces ID and data directory found in pidfile
# is running. Return 0 if no postgres process working on ${pgdata} was found
#
checkNoActivePG() {
        if [ -f ${pgdata}/postmaster.pid ]; then
                PGFILEPID=$(head -1 ${pgdata}/postmaster.pid)
                ps | grep $PGFILEPID | grep -v grep | grep -q "${pgdata}" && return 1
        fi
        # check for PG working on data directory regardless pidfile exists
        ps | grep -v grep | grep -q "${pgdata}" && return 2
        return 0
}


Uprava start() funkce:

    echo "starting postgres..."
    date "+%Y%M%d %H:%M:%S%tStarting postgres" >> ${pglog}

Dale po chmod a+w /dev/null


     # avoid attempt to start Postgres if it already runs, thus                          
     # do not delete postmater.pid file so future shutdown command                       
     # will not fail due to pid file absence                                             
     checkNoActivePG                                                                     
     if ! checkNoActivePG; then                                                          
         echo "It seems that postgres is running, check it manually."                    
         exit 1                                                                          
     fi                                                                                  


Pak nahrada start prikazu:
#    /usr/bin/su ${pguser} -c "/usr/bin/postmaster -D '${pgdata}' &" >> ${pglog} 2>&1
za
start-stop-daemon -S -c postgres -x "${pgctl}" >> ${pglog} 2>&1 -- start -D "${pgdata}"

Pak jen pred return z start() fce jeste zapis do logu:
date "+%Y%M%d %H:%M:%S%tStarting postgres finished with ret: ${ret}" >> ${pglog}

Podobne na zacatku stop() fce:
date "+%Y%M%d %H:%M:%S%tStopping postgres" >> ${pglog}

Nahrada stop prikazu:
/usr/bin/su ${pguser} -c "${pgctl} stop -D '${pgdata}' -s -m fast"
za
start-stop-daemon -S -c postgres -x "${pgctl}" >> ${pglog} 2>&1 -- start -D "${pgdata}"

A pred predanim navratoveho kodu fce stop() poznamka do logu:
date "+%Y%M%d %H:%M:%S%tStopping postgres finished with ret: ${ret}" >> ${pglog}

restart() a reload() podpobne dostal zapis do logu.

Funkci status() jsem upravil, protoze pokud byl smazan pid soubor (napriklad opakovanym zavolanim start() v puvodni verzi). Ponekud zjednodusene zavola pg_ctl status a pak jeste zkusi najit procesy prostrgresu...:
status() {                                                                              
    echo "status postgres..."                                                           
#    date "+%Y%M%d %H:%M:%S%tStatus postgres" >> ${pglog}                               
#    /usr/bin/su ${pguser} -c "${pgctl} status -D '${pgdata}'"                          
     start-stop-daemon -S -c postgres -x "${pgctl}" -- status -D "${pgdata}"             
    checkNoActivePG || echo "Running postgres process with cluster ${pgdata} was found."
    echo "ok"                                                                           
  }    

No a konecne pokud by se to hodilo, tak tady je diff proti originalnimu init skriptu z instalacniho balicku.

Snad se to bude hodit.
root@turris:/mnt/microSD/turris_backup# diff /etc/init.d/postgresql postgresql_default_init 
13,26d12
< #
< # Check wheather proces ID and data directory found in pidfile
< # is running. Return 0 if no postgres process working on ${pgdata} was found
< # 
< checkNoActivePG() {
<   if [ -f ${pgdata}/postmaster.pid ]; then
<     PGFILEPID=$(head -1 ${pgdata}/postmaster.pid)
<     ps | grep $PGFILEPID | grep -v grep | grep -q "${pgdata}" && return 1
<   fi
<   # check for PG working on data directory regardless pidfile exists
<   ps | grep -v grep | grep -q "${pgdata}" && return 2
<   return 0
< }
< 
39d24
<     date "+%Y%M%d %H:%M:%S%tStarting postgres" >> ${pglog}
46,54d30
<     # avoid attempt to start Postgres if it already runs, thus
<     # do not delete postmater.pid file so future shutdown command
<     # will not fail due to pid file absence
<     checkNoActivePG
<     if ! checkNoActivePG; then
<         echo "It seems that postgres is running, check it manually."
<   exit 1
<     fi
< 
63,65c39
< #    /usr/bin/su ${pguser} -c "/usr/bin/postmaster -D '${pgdata}' &" >> ${pglog} 2>&1
< #    start-stop-daemon -S -c postgres -x /usr/bin/postmaster >> ${pglog} 2>&1 -- -D "${pgdata}" &
<     start-stop-daemon -S -c postgres -x "${pgctl}" >> ${pglog} 2>&1 -- start -D "${pgdata}" 
---
>     /usr/bin/su ${pguser} -c "/usr/bin/postmaster -D '${pgdata}' &" >> ${pglog} 2>&1
84d57
<     date "+%Y%M%d %H:%M:%S%tStarting postgres finished with ret: ${ret}" >> ${pglog}
90,92c63
<     date "+%Y%M%d %H:%M:%S%tStopping postgres" >> ${pglog}
< #    /usr/bin/su ${pguser} -c "${pgctl} stop -D '${pgdata}' -s -m fast"
<     start-stop-daemon -S -c postgres -x "${pgctl}" >> ${pglog} 2>&1 -- stop -D "${pgdata}" -m fast
---
>     /usr/bin/su ${pguser} -c "${pgctl} stop -D '${pgdata}' -s -m fast"
98d68
<     date "+%Y%M%d %H:%M:%S%tStopping postgres finished with ret: ${ret}" >> ${pglog}
104,106c74
<     date "+%Y%M%d %H:%M:%S%tRestarting postgres - stop" >> ${pglog}
< #    /usr/bin/su ${pguser} -c "${pgctl} stop -D '${pgdata}' -s -m fast -w"
<     start-stop-daemon -S -c postgres -x "${pgctl}" >> ${pglog} 2>&1 -- stop -D "${pgdata}" -m fast
---
>     /usr/bin/su ${pguser} -c "${pgctl} stop -D '${pgdata}' -s -m fast -w"
110,112c78
<     date "+%Y%M%d %H:%M:%S%tRestarting postgres - start" >> ${pglog}
< #    /usr/bin/su ${pguser} -c "/usr/bin/postmaster -D '${pgdata}' &" >> ${pglog} 2>&1
<     start-stop-daemon -S -c postgres -x "${pgctl}" >> ${pglog} 2>&1 -- start -D "${pgdata}" 
---
>     /usr/bin/su ${pguser} -c "/usr/bin/postmaster -D '${pgdata}' &" >> ${pglog} 2>&1
114,115c80
<     date "+%Y%M%d %H:%M:%S%tRestarting postgres finished." >> ${pglog}
< #    return $?
---
>     return $?
120,123c85
<     date "+%Y%M%d %H:%M:%S%tReloading postgres" >> ${pglog}
< #    /usr/bin/su ${pguser} -c "${pgctl} reload -D '${pgdata}' -s"
<     start-stop-daemon -S -c postgres -x "${pgctl}" >> ${pglog} 2>&1 -- reload -D "${pgdata}" 
<     date "+%Y%M%d %H:%M:%S%tReloading postgres finished." >> ${pglog}
---
>     /usr/bin/su ${pguser} -c "${pgctl} reload -D '${pgdata}' -s"
129,132c91
< #    date "+%Y%M%d %H:%M:%S%tStatus postgres" >> ${pglog}
< #    /usr/bin/su ${pguser} -c "${pgctl} status -D '${pgdata}'"
<     start-stop-daemon -S -c postgres -x "${pgctl}" -- status -D "${pgdata}" 
<     checkNoActivePG || echo "Running postgres process with cluster ${pgdata} was found."
---
>     /usr/bin/su ${pguser} -c "${pgctl} status -D '${pgdata}'"
Nahoru Téma Majitelé routerů / Technická podpora / PostgreSQL - instalace a init skripty

Powered by mwForum 2.29.3 © 1999-2013 Markus Wichitill