Rendszergazda & webfejlesztő devblog Laczkó Zoltán blogja

10máj/100

Debian csomagok újrafordítása módosítással

A programok folyamatosan jönnek ki újabb és újabb funkciókkal, adott esetben mások által készített kiegészítésekkel is (patch). Mit csináljunk, ha nem akarunk a debian rendszerünkre forrásból felrakott patch-elt programokat, csak debian csomagokat, megtartva annak minden előnyét.

Forrásból vagy csomagból?

Biztos, hogy mással is előfordult már, amikor egy programhoz valamilyen kiegészítést, módosítást kellett volna felrakni, de a hivatalos debian csomagban nem szerepelt, vagy csak testing/sid -ben. Ilyenkor két lehetőség van.

Az első, hogy a program forrását patch-elve fordítjuk le és rakjuk fel a rendszerünkre.  Ezt sokan nem szeretik, mert nehéz nyomon követni, hogy pontosan mit és hova telepített, bonyolult a frissítések kezelése, és az esetleges eltávolítás. Néha pedig a debian csomagban már meglévő funkciók módosulnak, eltűnnek, vagy a futtatható állományok máshova kerülnek, mintha csomagból került volna fel.

A másik lehetőség a hivatalos debian csomag újrafordítása tetszőleges módosításokkal a forrásban. Mindezt a debian csomagkezelő programjainak segítségével, nagyon egyszerűen.

Szükséges eszközök

Elsőnek pár alapvető csomagkészítő eszközt kell felraknunk.

apt-get install devscripts build-essential

Csomag forrás letöltése

A hivatalos debian csomagtárak tartalmazzák a forrásokat is, nem csak a lefordított binárisokat. Ehhez mindössze a /etc/apt/sources.list -be kell a meglévő deb sorok deb-src párját kell beillesztenünk.

deb http://ftp.hu.debian.org/debian/ stable main non-free contrib
deb-src http://ftp.hu.debian.org/debian/ stable main non-free contrib

ezután frissítsük a csomag listát:

apt-get update

ha nem kaptunk hibaüzenetet, akkor már el is érhetjük a kívánt csomag forrását

apt-get source <csomagneve>

Ez az aktuális könyvtárba tölti le a forrást, így célszerű elsőnek kiválasztani a könyvtárat, ahol dolgozni szeretnénk. Letöltés után ellenőrzi a tartalmat, kitömöríti azt és felkészíti a fordításra.

Függőségek telepítése

Egyes csomagoknak vannak függőségei, más csomagok szükségesek hozzá. Ezeket a csomagokat fordítás előtt fel kell telepítenünk, különben nagy valószínűséggel a fordítás nem fog hiba nélkül lefutni.

apt-get build-dep <csomagneve>

Módosítsuk a forrást

Tetszés szerint módosíthatjuk a letöltött forrást. A módosítás részletezése, többnyire a kívánt patch doksijában szerepel, alkalmazd az ott leírtakat. A debian mappában van fontos fájlok, mint pl a rules, ami többek közt tartalmazza a fordítási kapcsolókat is. control tartalmazza a csomag leírását. changelog tartalmazza a verziószámokat, szerzőket, módosítási összesítőt, stb. További részletekért olvasd el az angol nyelvű debian csomag kezelői dokumentációt

Készítsünk debian csomagot

A módosítások után már csak annyi dolgunk van, hogy lefordítsuk a forrást és debian csomagot készítsünk belőle

cd <csomagneve-verzio>
debuild -us -uc

A debuild eszközt -us -uc paraméterekkel használtuk, mert nem mi vagyunk a csomag hivatalos kezelője és ezért nem tudjuk hitelesíteni az elkészített csomagot.

Telepítsük a módosított csomagot

A fordítás után egy könyvtárral fentebb megtalálhatóak az elkészített deb fájlok pár más fájllal együtt (forrás, fordítási napló, stb). Berakhatjuk a lokális csomagtárba is, vagy közvetlenül dpkg -val feltelepíthetjük.

cd ..
dpkg -i <csomagnev_verzio.deb>

( ! ) Warning: get_object_vars() expects parameter 1 to be object, string given in /var/www/clients/client1/web59/web/wp-includes/class-wp-comment.php on line 205
Call Stack
#TimeMemoryFunctionLocation
10.0001364984{main}( ).../index.php:0
20.0001366752require( '/var/www/clients/client1/web59/web/wp-blog-header.php' ).../index.php:17
30.422464420296require_once( '/var/www/clients/client1/web59/web/wp-includes/template-loader.php' ).../wp-blog-header.php:19
40.432164466216include( '/var/www/clients/client1/web59/web/wp-content/themes/lightword/single.php' ).../template-loader.php:106
50.448264648728comments_template( ).../single.php:38
60.448364650208WP_Comment_Query->__construct( ).../comment-template.php:1471
70.448364652824WP_Comment_Query->query( ).../class-wp-comment-query.php:303
80.448364652824WP_Comment_Query->get_comments( ).../class-wp-comment-query.php:346
90.448764662704get_comment( ).../class-wp-comment-query.php:457
100.448764662736WP_Comment::get_instance( ).../comment.php:205
110.448764663120WP_Comment->__construct( ).../class-wp-comment.php:192
120.448764663120get_object_vars ( ).../class-wp-comment.php:205

( ! ) Warning: Invalid argument supplied for foreach() in /var/www/clients/client1/web59/web/wp-includes/class-wp-comment.php on line 205
Call Stack
#TimeMemoryFunctionLocation
10.0001364984{main}( ).../index.php:0
20.0001366752require( '/var/www/clients/client1/web59/web/wp-blog-header.php' ).../index.php:17
30.422464420296require_once( '/var/www/clients/client1/web59/web/wp-includes/template-loader.php' ).../wp-blog-header.php:19
40.432164466216include( '/var/www/clients/client1/web59/web/wp-content/themes/lightword/single.php' ).../template-loader.php:106
50.448264648728comments_template( ).../single.php:38
60.448364650208WP_Comment_Query->__construct( ).../comment-template.php:1471
70.448364652824WP_Comment_Query->query( ).../class-wp-comment-query.php:303
80.448364652824WP_Comment_Query->get_comments( ).../class-wp-comment-query.php:346
90.448764662704get_comment( ).../class-wp-comment-query.php:457
100.448764662736WP_Comment::get_instance( ).../comment.php:205
110.448764663120WP_Comment->__construct( ).../class-wp-comment.php:192

( ! ) Warning: get_object_vars() expects parameter 1 to be object, string given in /var/www/clients/client1/web59/web/wp-includes/class-wp-comment.php on line 205
Call Stack
#TimeMemoryFunctionLocation
10.0001364984{main}( ).../index.php:0
20.0001366752require( '/var/www/clients/client1/web59/web/wp-blog-header.php' ).../index.php:17
30.422464420296require_once( '/var/www/clients/client1/web59/web/wp-includes/template-loader.php' ).../wp-blog-header.php:19
40.432164466216include( '/var/www/clients/client1/web59/web/wp-content/themes/lightword/single.php' ).../template-loader.php:106
50.448264648728comments_template( ).../single.php:38
60.448364650208WP_Comment_Query->__construct( ).../comment-template.php:1471
70.448364652824WP_Comment_Query->query( ).../class-wp-comment-query.php:303
80.448364652824WP_Comment_Query->get_comments( ).../class-wp-comment-query.php:346
90.448964663408get_comment( ).../class-wp-comment-query.php:457
100.448964663440WP_Comment::get_instance( ).../comment.php:205
110.448964663824WP_Comment->__construct( ).../class-wp-comment.php:192
120.448964663824get_object_vars ( ).../class-wp-comment.php:205

( ! ) Warning: Invalid argument supplied for foreach() in /var/www/clients/client1/web59/web/wp-includes/class-wp-comment.php on line 205
Call Stack
#TimeMemoryFunctionLocation
10.0001364984{main}( ).../index.php:0
20.0001366752require( '/var/www/clients/client1/web59/web/wp-blog-header.php' ).../index.php:17
30.422464420296require_once( '/var/www/clients/client1/web59/web/wp-includes/template-loader.php' ).../wp-blog-header.php:19
40.432164466216include( '/var/www/clients/client1/web59/web/wp-content/themes/lightword/single.php' ).../template-loader.php:106
50.448264648728comments_template( ).../single.php:38
60.448364650208WP_Comment_Query->__construct( ).../comment-template.php:1471
70.448364652824WP_Comment_Query->query( ).../class-wp-comment-query.php:303
80.448364652824WP_Comment_Query->get_comments( ).../class-wp-comment-query.php:346
90.448964663408get_comment( ).../class-wp-comment-query.php:457
100.448964663440WP_Comment::get_instance( ).../comment.php:205
110.448964663824WP_Comment->__construct( ).../class-wp-comment.php:192

( ! ) Warning: get_object_vars() expects parameter 1 to be object, string given in /var/www/clients/client1/web59/web/wp-includes/class-wp-comment.php on line 205
Call Stack
#TimeMemoryFunctionLocation
10.0001364984{main}( ).../index.php:0
20.0001366752require( '/var/www/clients/client1/web59/web/wp-blog-header.php' ).../index.php:17
30.422464420296require_once( '/var/www/clients/client1/web59/web/wp-includes/template-loader.php' ).../wp-blog-header.php:19
40.432164466216include( '/var/www/clients/client1/web59/web/wp-content/themes/lightword/single.php' ).../template-loader.php:106
50.448264648728comments_template( ).../single.php:38
60.448364650208WP_Comment_Query->__construct( ).../comment-template.php:1471
70.448364652824WP_Comment_Query->query( ).../class-wp-comment-query.php:303
80.448364652824WP_Comment_Query->get_comments( ).../class-wp-comment-query.php:346
90.449064663792get_comment( ).../class-wp-comment-query.php:457
100.449064663824WP_Comment::get_instance( ).../comment.php:205
110.449064664208WP_Comment->__construct( ).../class-wp-comment.php:192
120.449064664208get_object_vars ( ).../class-wp-comment.php:205

( ! ) Warning: Invalid argument supplied for foreach() in /var/www/clients/client1/web59/web/wp-includes/class-wp-comment.php on line 205
Call Stack
#TimeMemoryFunctionLocation
10.0001364984{main}( ).../index.php:0
20.0001366752require( '/var/www/clients/client1/web59/web/wp-blog-header.php' ).../index.php:17
30.422464420296require_once( '/var/www/clients/client1/web59/web/wp-includes/template-loader.php' ).../wp-blog-header.php:19
40.432164466216include( '/var/www/clients/client1/web59/web/wp-content/themes/lightword/single.php' ).../template-loader.php:106
50.448264648728comments_template( ).../single.php:38
60.448364650208WP_Comment_Query->__construct( ).../comment-template.php:1471
70.448364652824WP_Comment_Query->query( ).../class-wp-comment-query.php:303
80.448364652824WP_Comment_Query->get_comments( ).../class-wp-comment-query.php:346
90.449064663792get_comment( ).../class-wp-comment-query.php:457
100.449064663824WP_Comment::get_instance( ).../comment.php:205
110.449064664208WP_Comment->__construct( ).../class-wp-comment.php:192

( ! ) Fatal error: Uncaught Error: Call to a member function populated_children() on null in /var/www/clients/client1/web59/web/wp-includes/class-wp-comment-query.php on line 1069
( ! ) Error: Call to a member function populated_children() on null in /var/www/clients/client1/web59/web/wp-includes/class-wp-comment-query.php on line 1069
Call Stack
#TimeMemoryFunctionLocation
10.0001364984{main}( ).../index.php:0
20.0001366752require( '/var/www/clients/client1/web59/web/wp-blog-header.php' ).../index.php:17
30.422464420296require_once( '/var/www/clients/client1/web59/web/wp-includes/template-loader.php' ).../wp-blog-header.php:19
40.432164466216include( '/var/www/clients/client1/web59/web/wp-content/themes/lightword/single.php' ).../template-loader.php:106
50.448264648728comments_template( ).../single.php:38
60.448364650208WP_Comment_Query->__construct( ).../comment-template.php:1471
70.448364652824WP_Comment_Query->query( ).../class-wp-comment-query.php:303
80.448364652824WP_Comment_Query->get_comments( ).../class-wp-comment-query.php:346
90.449164664552WP_Comment_Query->fill_descendants( ).../class-wp-comment-query.php:487