Február 15, 2017

GitHub problém pri klonovaní repozitáru – Permission denied (publickey)

Po upgrade SSH sa môžete stretnúť s nasledujúcim problémom. Príkaz git clone skončí s návratovým kódom 255 a chybovým hlásením:

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

Toto sa mi stalo po upgrade Linux Mint z verzie 17 na verziu 18.

Ako diagnostikovať takýto problém s Gitom?

Spustite nasledujúci príkaz:

ssh -v git@github.com

Uvidíte množstvo riadkov logu a jeden z nich typicky obsahuje príčinu problému. V mojom prípade to bolo:

...
debug1: SSH2_MSG_NEWKEYS received
debug1: Skipping ssh-dss key ~/.ssh/id_dsa - not in PubkeyAcceptedKeyTypes
...

DSA kľúče boli totiž v SSH 7 zablokované. Riešenie spočíva vo vygenerovaní nového kľúča iného typu, napríklad RSA.

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub

Potom stačí vymeniť kľúč na GitHub-e za nový. Môžete znova spustiť “ssh -v” pre diagnostiku, či sa komunikácia so serverom podarila:

PTY allocation request failed on channel 0
Hi georgik! You've successfully authenticated, but GitHub does not provide shell access.
...
debug1: Exit status 1

Toto je dobrý výsledok. Teraz môžete pokojne vyklonovať repozitár.

Apríl 11, 2010

Buildout – podpora virtuálneho prostredia nie len pre Python

Buildout pre Python je niečo ako Maven pre Javu. Buildoutu jednoducho predhodíte recept. Tento recept popisuje, ako má vaše prostredie vyzerať a Buildout za vás pohľadá všetky závislosti a nainštaluje ich. Pythonieristi si možno povedia: “Ale veď inštaláciu zvláda aj easy_install alebo pip“. To je pravda, ale Buildout posúva prácu s virtuálnym prostredím o level ďalej.

Predstavte si, že pracujete v tíme a teraz potrebujete, aby kolega mal rovnaké pracovné prostredie ako vy. Rovnaké balíky, rovnaké nastavenie služieb. Jednoducho napíšete recept pre buildout a ten mu pošlete. Buildout sa postará o vytvorenie virtuálneho prostredia, tak ako to poznáme z Virtualenv. Naviac nainštaluje potrebné balíky. Teraz pozor! Odinštaluje nepotrebné balíky. Nastaví adresáre a importy presne, tak ako je to potrebné. Buildout umožňuje zaviesť do projektu podstatný prvok: opakovateľnosť.

Buildout nie je nástroj výhradne len pre Python. Môžete s ním spracovávať, aj zdroje z Gitu alebo ZIP súborov. Pokiaľ pracujete extenzívnejšie s Pythonom a balíčkovaním aplikácii, určite mu venujte minutku na naučenie.

Príklad receptu na inštalovanie Tracu 0.12dev:

[buildout]
parts = babel genshi trac mypy

[babel]
recipe = zc.recipe.egg
eggs =
    Babel

[genshi]
recipe = infrae.subversion
as_eggs = true
urls = http://svn.edgewall.org/repos/genshi/trunk genshi


[trac]
recipe = infrae.subversion
urls = http://svn.edgewall.org/repos/trac/trunk trac
as_eggs = true

# Make eggs visible to mypy interpreter
[mypy]
recipe = zc.recipe.egg
eggs =
    ${trac:eggs}
    ${genshi:eggs}
    ${babel:eggs}
interpreter = mypy
scripts = mypy

Buildout potupne spracuje jednotlivé časti a podľa receptov uvedených za slovíčkom “recipe”, nainštaluje a upraví potrebné konfigurácie prostredia. Predtým, než sa vrhnete do písania vlastného receptu, odporúčam skontrolovať, či už rovnaký alebo veľmi podobný recept neexistuje.

Pokiaľ tápete v tom, ako funguje Python Eggs a virtuálne prostredie, odkážem vás na výbornú prezentáciu z PyConu 2009 – Eggs and Buildout deployment in Python: