Pokazywanie postów oznaczonych etykietą ssh. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą ssh. Pokaż wszystkie posty

1 listopada 2016

paramiko/rforward.py i py2exe

Dobrze jest mieć w zanadrzu mechanizm pozwalający na uruchomienie pythonowego skryptu na systemie pozbawiony interpretera. Do celów testowych wybrałem rforward.py, który pozwala na stworzenie tunelowanego połączenia, pochodzący z biblioteki Paramiko. Wydaje się, że biblioteka jest całkiem rozbudowana, więc może być dobrym polem do testów. Zestaw linków:
Instalacja pakietów dla Paramiko i py2exe:
c:\Python34\Scripts>pip install cryptography
c:\Python34\Scripts>pip install pycrypto
c:\Python34\Scripts>pip install paramiko

c:\Python34\Scripts>pip install py2exe
Domyślny pip dostarczony wraz z interpreterem miał kłopot, aby zainstalować niektóre pakiety. Okazało się, że aktualizacja do najnowszej wersji rozwiązuje problem.
You are using pip version 7.1.2, however version 8.1.2 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
Problemem okazała się również wersja pythona, której używałem. py2exe działa do wersji 3.4. Wersji 3.5 towarzyszą jakieś zawirowania i trzeba będzie na nią jeszcze poczekać.
Building 'dist\rforward.exe'.
error: [Errno 2] No such file or directory: 'c:\\Python35\\lib\\site-packages\\py2exe\\run-py3.5-win-amd64.exe'
Aby stworzyć plik wykonywalny należy stworzyć skrypt setup.py, w którym wyszczególnimy z jakich plików składa się nasz program.
from distutils.core import setup
import py2exe
from glob import glob

setup(console=['rforward.py'],
      data_files = [('', ['C:\\Windows\\System32\\msvcr100.dll',
                          'C:\\Windows\\System32\\msvcp100.dll'])])
To czego może zabraknąć na docelowej maszynie, to biblioteki z Visual Studio 2010, których wymaga do działania python. Można je również zainstalować za pomocą Microsoft Visual C++ 2010 Redistributable Package (x86). Ja wybrałem wersję na 32-bitową, zgodną z zainstalowanym interpreterem. Tutorial py2exe (dla starszej wersji pythona), ostrzega o restrykcjach odnośnie kopiowania tych bibliotek, a mianowicie powinno kopiować się wszystkie trzy, a nie tylko wybraną oraz manifest. Pozostawię to jako kwestię otwartą, ponieważ, nie mogłem znaleźć tego w dokumentacji, ponadto jeden z plików (msvcp100.dll), gdzieś wyparował. Z tego co wiem do działania wymagany jest jedynie msvcr100.dll (nie testowałem). Pliki należy skopiować, do głównego katalogu, tak, by exe mógł je odnaleźć.
Aby zbudować plik wykonywalny wystarczy wywołać setup.py z opcją py2exe. Całość potrzebna do działania programu powinna znaleźć się w katalogu dist.
c:\Python34\python.exe setup.py py2exe

14 grudnia 2014

Migracja repozytorium svn do git-a

Nie jest to nawet takie skomplikowane. Dodatkowo, skonfigurowałem msysGit-a pod windows-em. Wymagało to wygenerowania kluczy i skonfigurowania kilku dodatkowych narzędzi (plink/pageant). Przydatne okazały się dwa poniższe linki:
Powtarzając częściowo za poradnikiem, zaczynamy od wygenerowania listy użytkowników svn-a, na tej podstawie tworzymy plik user.txt, w którym mapujemy ich na użytkowników git-a
$ svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /'
$ cat users.txt
kungfurry = Robert <robert@example.com>
Następnie klonujemy repozytorium (flaga -s umożliwia śledzenie gałęzi trunk/branch/tags, ale ja nie utrzymywałem tej konwencji i nie testowałem tej opcji). Poradnik zaleca też skasowanie jakiś śmieci z katalogu .git
$ git svn clone svn+ssh://kungfurry@example.com/svn/some_project \
      --authors-file=users.txt --no-metadata my_project
$ rm -Rf my_project/.git/refs/remotes
Wybrałem najprostszą z możliwych ścieżek, chodziło mi bowiem o przeniesienie się na git-a całkowicie. Z tego co już miałem stworzyłem gołego klona i wypchnąłem go na zdalny serwer. Po skasowaniu lokalnego repo, zrobiłem klona z serwera, w ten sposób automatycznie zostały stworzone odniesienie do zdalnego repozytorium.
$ git clone --bare my_project my_project.git
$ scp -r my_project.git kungfurry@example.com:/home/kungfurry/git_repos/
$ rm -rf my_project
$ git clone kungfurry@example.com:/home/kungfurry/git_repos/my_project.git