Coder Social home page Coder Social logo

pisi-farm's Introduction

pisi-farm

Next generation pisi farm system


Abstract

Current farm system that builds the packages for the PisiLinux distribution have some shortcomings.This new approach will provide us more functionality, like allowing volunteers to compile individual packages on their own systems in a chrooted environment, or in a docker container.

Whole system will triggered by a github web hook. The details of the commit will be parsed, and modified packages will be added to the compile queue. An application running on the volunteers' computers will take the package name and the docker image name associated with that github repository and branch. That docker image will be pulled, and the package will be compiled inside that docker image. Results of this operations (log files and if successful, binary package files) will be uploaded to the web server.

Requirements

  • virtualenv
  • Flask
  • SQLAlchemy
  • Database ( SQLite, MySQL or PostgreSQL)
  • lxml

Installation

Installation requires the installation of some python modules.These python modules are not in pisi repository, so the first step is the installation of python-setuptools

$ sudo pisi it python-setuptools

Virtualenv

Virtualenv enables side-by-side installations of Python, for each project.

$ sudo easy_install virtualenv

Then we can create our environment inside a directory:

$ mkdir pisifarm
$ cd pisifarm
$ virtualenv venv
New python executable in venv/bin/python
Installing setuptools, pip...done.

To activate this virtual environment:

$ source venv/bin/activate
(venv)ilker@pisi pisifarm $

Notice the change in the prompt. This shows that we are now in the virtual environment.

Flask

Inside the virtual environment, we can continue installing the other required modules:

(venv)ilker@pisi pisifarm $ pip install flask
You are using pip version 6.1.1, however version 7.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting flask
Using cached Flask-0.10.1.tar.gz
lask-sqlalchemy
Collecting Werkzeug>=0.7 (from flask)
Using cached Werkzeug-0.10.4-py2.py3-none-any.whl
Collecting Jinja2>=2.4 (from flask)
Using cached Jinja2-2.7.3.tar.gz
Collecting itsdangerous>=0.21 (from flask)
Using cached itsdangerous-0.24.tar.gz
Collecting markupsafe (from Jinja2>=2.4->flask)
Using cached MarkupSafe-0.23.tar.gz
Installing collected packages: Werkzeug, markupsafe, Jinja2, itsdangerous, flask
Running setup.py install for markupsafe
Running setup.py install for Jinja2
Running setup.py install for itsdangerous
Running setup.py install for flask
Successfully installed Jinja2-2.7.3 Werkzeug-0.10.4 flask-0.10.1 itsdangerous-0.24 markupsafe-0.23
(venv)ilker@pisi pisifarm $

We also need more packages related with flask:

(venv)ilker@pisi pisifarm $ pip install flask-login
(venv)ilker@pisi pisifarm $ pip install flask-mail
(venv)ilker@pisi pisifarm $ pip install flask-whooshalchemy
(venv)ilker@pisi pisifarm $ pip install flask-wtf
(venv)ilker@pisi pisifarm $ pip install flask-babel

SQLAlchemy

SQLAlchemy

(venv)ilker@pisi pisifarm $ pip install flask-sqlalchemy

Database

We will use SQLite for simplicity, real system is using PostgreSQL.

(venv)ilker@pisi pisifarm $ pip install pysqlite

For PostgreSQL:

(venv)ilker@pisi pisifarm $ pip install psycopg2

For MySQL:

(venv)ilker@pisi pisifarm $ pip install MySQL-python

lxml

lxml was used for parsing the pisi-index.xml files. lxml python package requires libxml2-devel package:

(venv)ilker@pisi pisifarm $ sudo pisi it libxml2-devel libxslt-devel
(venv)ilker@pisi pisifarm $ pip install lxml

Özet

Halihazırda kullanılan pisi paketlerini derleme sisteminin bazı eksiklikleri bulunmaktadır. Tasarlanan yeni yaklaşım, bize daha fazla esneklik sağlayacak, ve halen kullanılan sistemin eksikliklerini de kapatacaktır. Örneğin, yeni sistemde, gönüllü kullanıcılar derlenmek üzere bekleyen paketleri kendi sistemlerinde bir docker imajı içinde derleyebileceklerdir.

Tüm sistem, github commit işlemi ile tetiklenecektir. Commit işlemi bilgileri parse edilecek, o commit işlemi ile değişikliğe uğramış paketler tespit edilerek, derleme kuyruğuna alınacaklardır. Son kullanıcılarda çalışan bir uygulama, derleme kuyruğunu sürekli olarak kontrol ederek, kuyruğa eklenmiş olan paketlerin derlenmesi işlemini o repository ve branch icin belirlenmiş olan docker imajı içinde başlatacaktır. Derleme işlemi sonucunda ortaya çıkacak olan log ve pisi dosyaları merkezde bulunan sunucuya dosya upload işlemi ile gonderilecektir.

Gereksinimler

  • virtualenv
  • Flask
  • SQLAlchemy
  • Database ( SQLite, MySQL veya PostgreSQL)
  • lxml

Kurulum

Kurulum için bazı python modüllerinin kurulması gerekmektedir. Bu modüller pisi deposunda da bulunmadıkları için, önce python-setuptools paketi kurulacaktır:

$ sudo pisi it python-setuptools

Virtualenv Sanal ortamı

Virtualenv ile, her bir proje için gerekli olacak python modülleri, gerçek sisteme kurulmasına gerek kalmadan, bir dizin altına kurulup kullanılabilmektedir:

$ sudo easy_install virtualenv

Virtualenv uygulaması kurulduktan sonra, kendi uygulamamızın bulunacağı dizini hazırlarız:

$ mkdir pisifarm
$ cd pisifarm
$ virtualenv venv
New python executable in venv/bin/python
Installing setuptools, pip...done.

Sanal ortama geçiş yapmak için:

$ source venv/bin/activate
(venv)ilker@pisi pisifarm $

Burada promptun nasıl değiştiğine dikkat edin. Böylece sanal ortamın içinde olduğunuzu anlayabilirsiniz. Bu aşamada, python, easy_install, pip gibi komutları kullandığınzda, gerçek sisteme değil, venv dizini altına modüller kurulacaktır.

Flask Kurulumu

Sanal ortam içinde uygulamamız için gerekli olan diğer modülleri de yükleriz.

(venv)ilker@pisi pisifarm $ pip install flask
You are using pip version 6.1.1, however version 7.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting flask
Using cached Flask-0.10.1.tar.gz
Collecting Werkzeug>=0.7 (from flask)
Using cached Werkzeug-0.10.4-py2.py3-none-any.whl
Collecting Jinja2>=2.4 (from flask)
Using cached Jinja2-2.7.3.tar.gz
Collecting itsdangerous>=0.21 (from flask)
Using cached itsdangerous-0.24.tar.gz
Collecting markupsafe (from Jinja2>=2.4->flask)
Using cached MarkupSafe-0.23.tar.gz
Installing collected packages: Werkzeug, markupsafe, Jinja2, itsdangerous, flask
Running setup.py install for markupsafe
Running setup.py install for Jinja2
Running setup.py install for itsdangerous
Running setup.py install for flask
Successfully installed Jinja2-2.7.3 Werkzeug-0.10.4 flask-0.10.1 itsdangerous-0.24 markupsafe-0.23
(venv)ilker@pisi pisifarm $

Flask kullanabilmek için aşağıdaki paketler de gerekecektir:

(venv)ilker@pisi pisifarm $ pip install flask-login
(venv)ilker@pisi pisifarm $ pip install flask-mail
(venv)ilker@pisi pisifarm $ pip install flask-whooshalchemy
(venv)ilker@pisi pisifarm $ pip install flask-wtf
(venv)ilker@pisi pisifarm $ pip install flask-babel
(venv)ilker@pisi pisifarm $ pip install flask-sqlalchemy

Veritabanı

Test ortamında kolaylık olması için SQLite kullanacağız, ancak gerçek sistemde PostgreSQL kullanılacaktır.

(venv)ilker@pisi pisifarm $ pip install pysqlite

PostgreSQL için:

(venv)ilker@pisi pisifarm $ pip install psycopg2

MySQL için:

(venv)ilker@pisi pisifarm $ pip install MySQL-python

lxml Kurulumu

lxml paketi, pisi-index.xml dosyasını okumak için kullanılmıştır. Bu paketin kurulumu için, libxml2-devel ve libxslt-devel paketlerinin de sistemde kurulu olması gerekmektedir:

(venv)ilker@pisi pisifarm $ sudo pisi it libxml2-devel libxslt-devel
(venv)ilker@pisi pisifarm $ pip install lxml

pisi-farm's People

Contributors

erkanisik1 avatar ilkermanap avatar namso-01 avatar rmys avatar safaariman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

pisi-farm's Issues

Undeleted docker container don't let that package to be compiled at the same volunteer. Silinememis docker konteyneri, ayni paketin ayni gonullude derlenmesini engelliyor.

If a compile operation is interrupted before the deletion of the container, same volunteer cannot compile the package with the same name. Before starting, the container name should be checked and deleted.

Eger bir derleme, konteyner silinemeden yarida kesilmisse, ayni kullanicinin, ayni isimli paketi baska bir zaman derlemesini engelliyor. Derleme oncesinde docker konteyneri kontrol edilip, varsa silinmeli..

File upload 100MB limit problem

Buyuk boyutlu binary ureten paketlerin repoya gonderimi sirasinda problemler yasaniyor. Sorunun kaynagi, cloudflare 100 MB dosya aktarim limiti.

Bu durumu duzeltebilmek icin, hem gonullu uygulamasinda, hem de ciftlik uygulamasinda degisiklik gerekiyor.

Buyuk boyutlu dosyalarin gonderimi icin ayri bir url tanimlayacagiz. Bu url uzerinden, buyuk boyutlu dosyalari parca parca gonderecegiz. Parcalar tamamlandiginda ise normal akisa gore islem devam edecek.

upload sirasinda dosya ile birlikte su degiskenler de gonderilecek:

  1. Dosya parca adi ( a.pisi.part.3)
  2. toplam parca sayisi (10)
  3. gonderilen parca no ( 3 )
  4. Gonderilen parca icin sha256 hash
  5. Tam boyutlu orijinal dosya icin hash

Dosya parcasi geldikten sonra islemler:

  1. ciftlik tarafinda bu dosya alinip gecici bir dizine kaydedilecek.
  2. sha256 ile hash cikarilip, gonullu tarafindan gonderilen hash ile karsilastirilacak.
  3. hash yanlis ise, hata mesaji gonulluye gonderilecek ve fonksiyondan cikilacak.
  4. hash dogru ise gecici dizinde bulunan dosyalar kontrol edilip, gerekli butun parcalarin gelip gelmedigi saptanacak.
  5. butun parcalar varmis ise, sirayla birlestirilip orijinal pisi dosyasi olusturulacak.
  6. Olusturulan dosyanin sha256 hash degeri cikarilacak.
  7. Gonullu tarafindan gonderilen tam boyutlu dosya hash degeri ile karsilastirilacak
  8. hash tutuyorsa normal paket olarak isleme devam edilecek.
  9. hash tutmuyorsa, gonulluye tam dosya hash degerinin tutmadigi iletilecek. Bu durumda gonderim isleminin yeniden baslatilmasi gerek.

Bu kisim gonullu degisikligi yapilmadan yazilip test edilebilir. Gonullu icin de buradakine benzer bir is istegi olusturup, onun icinde neler yapilmasi gerektigini yazacagim.

package names causing problems with docker. Docker icin sorun cikaran paket isimleri

Package names like kde-l10n-ca@valencia causes docker to not to create a container with characters like "@". docker uses package name to create a new container to compile that package. The container name should be checked and corrected before creation of the container.

kde-l10n-ca@valencia gibi paket isimleri, docker tarafinda sorun cikariyor. Paket derlenecegi zaman, docker ile o paketin adini kullanan bir konteyner olusturuyoruz. Paket isminde docker tarafindan izin verilmeyen karakter oldugunda, derleme baslayamiyor. Konteyner ismi konteyner olusturmadan once kontrol edilmeli ve gerekiyorsa duzeltilmelidir.

derleme süresi/sayısı

"benim pc açık olduğu sürece derlesin.." veya "şu kadar süre derlesin" veya, "iki paket derlesin.." gibi ayarları olsa iyi olacak.
Belirlenen parametre ile derleme tamamlanınca, "bittiği, devam edip etmeyeceği.." sorulsa..

tarih-saat düzeltmesi

derleme raporu şurada takılı kalıyor: 2015-09-05 12:34:58
yeni derlemenin tarihi en üstte gelse iyi olacak.

reupload

farm/gonullu , internetin yavaş olduğu yerlerde hata verebiliyor ve "programdan çıkılıyor."
Libreoffice gibi çok uzun saatler sürmüş olan derlemeleri baştan başlatmaktansa, gonullu, sadece "oluşan paketleri upload et" seçeneği ile başlayabilir mi?

veya uygun göreceğiniz başka bir çözüm..

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.