{"id":421,"date":"2013-02-26T00:56:17","date_gmt":"2013-02-25T23:56:17","guid":{"rendered":"https:\/\/blog.pawel.usermd.net\/?p=421"},"modified":"2023-03-25T01:15:18","modified_gmt":"2023-03-25T00:15:18","slug":"lokalne-repozytorium-pakietow-dla-debiana-i-pochodnych-skrypt","status":"publish","type":"post","link":"https:\/\/blog.ck.waw.pl\/index.php\/2013\/02\/26\/lokalne-repozytorium-pakietow-dla-debiana-i-pochodnych-skrypt\/","title":{"rendered":"Lokalne repozytorium pakiet\u00f3w dla Debiana i pochodnych &#8211; skrypt"},"content":{"rendered":"\n<div class=\"wp-block-group is-layout-constrained\"><div class=\"wp-block-group__inner-container\">\n<p>Jaki\u015b czas temu \u015bci\u0105gn\u0105\u0142em sobie kilka paczek pod Minta i chcia\u0142em je mie\u0107 dost\u0119pne poprzez program &#8220;apt-get&#8221; (program dba o spe\u0142nienie zale\u017cno\u015bci itp), czy te\u017c &#8220;apt-cache&#8221; (wyszukiwanie pakiet\u00f3w i wy\u015bwietlenie informacji o pakietach).<\/p>\n<p>Zapewne wiele os\u00f3b powie, \u017ce lepiej poszuka\u0107 odpowiednich repozytori\u00f3w PPA i je doda\u0107. Na og\u00f3\u0142 tak jest najwygodniej i sam tak cz\u0119sto robi\u0119, ale czasami si\u0119 zdarza, \u017ce nie ma odpowiedniego repozytorium, lub w repozytorium nie ma odpowiednich wersji.<\/p>\n<p>Wtedy najlepiej sci\u0105gn\u0105\u0107 dany pakiet ze strony projektu i wrzuci\u0107 do katalogu na dysku i z tego katalogu zrobi\u0107 lokalne repozytorium.<\/p>\n<p>Ja tak zrobi\u0142em z katalogiem &#8220;\/MOJE\/REPOZYTORIUM&#8221;. Problem by\u0142 jednak w sytuacji dodawania kolejnego programu, gdy\u017c po skopiowaniu pakietu do tego katalogu, trzeba by\u0142o od\u015bwierzy\u0107 zawarto\u015b\u0107 pliku Packages.gz, a \u017ce nie robi\u0142o si\u0119 tego zbyt cz\u0119sto, wi\u0119c zapomina\u0142o si\u0119 sk\u0142adni polecenia s\u0142u\u017cacego do tego, a historia basha co\u015b u mnie szwankuje i nie zawsze zapisuje wszystkie polecenia, zw\u0142aszcza gdy jest otwartych kilka konsoli jednocze\u015bnie.<\/p>\n<p>Poni\u017cej zamie\u015bci\u0142em skrypt, kt\u00f3ry robi te wszystkie operacje za nas. Mo\u017cna go skopiowa\u0107 ze strony i wklei\u0107 do pliku, lub \u015bci\u0105gn\u0105\u0107 gotowy skrypt i go uruchomi\u0107.<br \/>Mo\u017cesz u\u017cy\u0107 tego samego katalogu co ja, lub u\u017cy\u0107 innego. Chc\u0105c zmieni\u0107 katalog, musisz zmieni\u0107 tylko warto\u015b\u0107 zmiennej &#8220;rep_path&#8221; i uruchomi\u0107 skrypt. Skrypt zrobi wszystko za ciebie, w\u0142\u0105cznie ze stworzeniem katalogu i aktualizacj\u0105 pliku &#8220;Packages.gz&#8221;. Po skopiowaniu nowego pliku do naszego repozytorium, wystarczy ponownie uruchomi\u0107 skrypt i wszystko zostanie uaktualnione.<\/p>\n<p>Jedyne, co musisz zrobi\u0107 r\u0119cznie, to doda\u0107 jedn\u0105 lini\u0119 do pliku &#8220;\/etc\/apt\/sources.list&#8221;. Linia ta wskazuje gdzie ma by\u0107 szukane lokalne repozytorium.<br \/>Pami\u0119taj tylko, aby\u015b dok\u0142adnie skopiowa\u0142 t\u0105 lini\u0119, bo program &#8220;apt-get&#8221; jest bardzo przewra\u017cliwiony na punkcie liter\u00f3wek i nie lubi jak mu np brakuje jakiego\u015b znaku, kt\u00f3ry wydaje si\u0119 by\u0107 zb\u0119dny.<\/p>\n<blockquote>\n<p>deb file:\/MOJE REPOZYTORIUM\/<\/p>\n<\/blockquote>\n<p>&nbsp;<\/p>\n<pre class=\"lang:sh decode:true\" title=\"Tworzenie i aktualizacja lokalnego repozytorium pakiet\u00f3w\">#!\/bin\/bash\n\n#Katalog w ktorym chcemy utworzyc nasze lokalne repozytorium pakietow.\n#Do tego katalogu bedziemy wrzucac pliki deb ktore bedzie sie instalowac\n#przy uzyciu programu \"apt-get\" lub podobnym\nrep_path=\/MOJE\/REPOZYTORIUM\/\n\nmkdir -p $rep_path\n\n#Dzielenie zmiennej $rep_path na czesci uzywajac separatora \"\/\"\n#W tym przypadku tekst \"\/MOJE\/REPOZYTORIUM\" zostanie podzielone na dwie czesci,\n#czyli \"MOJE\" i \"REPOZYTORIUM\" i nastepnie wrzucone do tablicy dirs\nIFS=\/ read -r -a dirs &lt;&lt;&lt; \"$rep_path\"\n\n#Przypisanie zmiennej \"lastelement\" numeru elementu,\n#ktory jest przechowywany jako ostatni w tablicy \"dirs\"\nlastelement=`expr ${#dirs[@]} - 1`\n\n#Przypisanie zmiennej \"lastelementdir\",\n#elementu ktory jest ostatnim elementem tablicy \"dirs\"\nlastelementdir=${dirs[$lastelement]}\n\nrep_dir=$lastelementdir\n\ncd $rep_path\n\ncd ..\n\n#Skanowanie katalogu \"REPOZYTORIUM\" w poszukiwaniu plikow \"deb\"\n#i tworzenie pliku \"Packages.gz\" z lista plikow,\n#ktore znajduja sie z katalogu \"REPOZYTORIUM\"\nsudo dpkg-scanpackages $rep_dir \/dev\/null | gzip &gt; $rep_dir\/Packages.gz\n\n#Aktualizacja bazy pakietow dla programu \"apt-get\" i podobnych\nsudo apt-get update<\/pre>\n<p>\u015aci\u0105gnij skrypt (pami\u0119taj o rozpakowaniu (tar) i nadaniu odpowiednich uprawnie\u0144 (chmod i chown)):<\/p>\n<p><a href=\"https:\/\/blog.ck.waw.pl\/wp-content\/uploads\/2013\/02\/create_update_repo_deb.tar.bz2\">create_update_repo_deb.tar<\/a><\/p>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Jaki\u015b czas temu \u015bci\u0105gn\u0105\u0142em sobie kilka paczek pod Minta i chcia\u0142em je mie\u0107 dost\u0119pne poprzez program &#8220;apt-get&#8221; (program dba o spe\u0142nienie zale\u017cno\u015bci itp), czy te\u017c &#8220;apt-cache&#8221; (wyszukiwanie pakiet\u00f3w i wy\u015bwietlenie informacji o pakietach). Zapewne wiele os\u00f3b powie, \u017ce lepiej poszuka\u0107 &hellip; <a href=\"https:\/\/blog.ck.waw.pl\/index.php\/2013\/02\/26\/lokalne-repozytorium-pakietow-dla-debiana-i-pochodnych-skrypt\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[14,24],"tags":[30,20,17,29,31],"_links":{"self":[{"href":"https:\/\/blog.ck.waw.pl\/index.php\/wp-json\/wp\/v2\/posts\/421"}],"collection":[{"href":"https:\/\/blog.ck.waw.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ck.waw.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ck.waw.pl\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ck.waw.pl\/index.php\/wp-json\/wp\/v2\/comments?post=421"}],"version-history":[{"count":2,"href":"https:\/\/blog.ck.waw.pl\/index.php\/wp-json\/wp\/v2\/posts\/421\/revisions"}],"predecessor-version":[{"id":594,"href":"https:\/\/blog.ck.waw.pl\/index.php\/wp-json\/wp\/v2\/posts\/421\/revisions\/594"}],"wp:attachment":[{"href":"https:\/\/blog.ck.waw.pl\/index.php\/wp-json\/wp\/v2\/media?parent=421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ck.waw.pl\/index.php\/wp-json\/wp\/v2\/categories?post=421"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ck.waw.pl\/index.php\/wp-json\/wp\/v2\/tags?post=421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}