tech-pkg archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: [GsoC] Add pkgsrc support to packagekit



Le 4 avr. 2011 à 11:59, Julio Merino a écrit :

> On Wed, Mar 30, 2011 at 5:48 PM, Sylvain Mora
> <sylvain.mora%googlemail.com@localhost> wrote:
>> Hi,
>> 
>> Thanks you for your response.
>> 
>> Le 29 mars 2011 à 12:12, Julio Merino a écrit :
>>> 
>>> Having an API to interact with pkgsrc and binary packages would be
>>> wonderful.  Unfortunately, Python is not part of NetBSD.  If you write
>>> the library in Python, it means that we cannot use it in the places
>>> where we need it most: in sysinst or in pkg_install so that an
>>> out-of-the-box NetBSD installation could easily retrieve/install new
>>> packages and keep the system up to date.
>>> 
>>> Having said that, a Python API would work nicely as a prototype.  But
>>> you should investigate how this would play with the languages that are
>>> part of NetBSD (C, C++, shell and Lua).
>> 
>> The goal is not the create a full API for all the system, but a basic API to 
>> help to the creation of the backend. It is a layer which retrieves pkgsrc 
>> commands stream.
>>  It could be a good idea to create an API for C pkgsrc but I think it is for 
>> an other project.
> 
> Sorry, but I still don't understand where the need to use Python comes
> from.  Is PackageKit written in Python?  If not, how does writing this
> intermediate API in Python help the goal of adding pkgsrc support to
> PackageKit?
> 
> As mentioned, writing this API in C would be very useful, both for the
> PackageKit project and for NetBSD in general.  If we had such API,
> we'd (I think) very easily integrate pkgsrc support in sysinst, for
> example :-)  (In this case, using Lua would make sense though, because
> Lua is supported by NetBSD.)
> 
> (Given that the major goal of your project is to add PackageKit
> support, this API needn't be complete: such API only needs to provide
> the set of features required to implement the PackageKit backend.  But
> working on an API that can later be easily extended would be a nice
> idea.)

Python is not mandatory. 
I propose Python because I'm writing my API for Pkgin with it. I have the habit 
to manipulate string with Python and it's easier to make test, but it's not a 
problem to use C. 
C and Python are both my favourite languages.
Moreover if I have not to write a complete API for pkgsrc, it's another good 
point for using C.


>>>> Reading the Wiki I think I can make the same work with pkgsrc :
>>>> - Write an API for pkgsrc
>>>> - Use this API to write a backend
>>>> 
>>>> It may be possible to reuse part of the pkgin API for binary package 
>>>> management (or rewrite something equivalent for pkg_add).
>>>> 
>>>> The API will reproduce basics pkgin/pkg_add/pkgsrc commands and add useful 
>>>> methods like listing all outdated packages, listing installed packages in 
>>>> which package names, versions, etc are separate.
>>> 
>>> In my opinion, the library should seamlessly manage packages from
>>> pkgsrc and binary packages (this is quite tricky but certainly
>>> doable).  An example: install/update everything from binaries if they
>>> are up-to-date, or otherwise fall back to building from pkgsrc.
>> 
>> The wiki says that the user have the choice to fall back, but I'm agree with 
>> you. May be it's possible to make the choice with an option :
>> - automatically install with pkgsrc if the package is not available as binary
>> - ask to the user if he want to install the package with pkgsrc
>> - do nothing and say to the user how he can install the package
> 
> That sounds good.  A thing to keep in mind: when you say "ask", that
> should not be an interactive question.  The user must be able to
> pre-configure behavior.  Interactive questions during package
> installations are pretty annoying, specially on slow machines!

Totally agree with that.

> 
>>>> The harder part will be the capability to build package from source 
>>>> because I have to reproduce what did "make" in Python for retrieving 
>>>> dependencies etc (The backend allows to make package if it is not 
>>>> available as binary)
>>> 
>>> For this, you can just resort to calling make and parsing the results;
>>> this is slow but effective.  Alternatively, if the "summary" database
>>> exists, just parse that database to get much faster results; see
>>> pkg_summary(5).
>> 
>> Yes, for now I have two choice: parse the "make result" stream, or search by 
>> my own way into package files to retrieve deps.
> 
> You do not need to scan package files to retrieve dependencies.  Take
> a look at pkg_summary(5): this information is already available in a
> database that you can query efficiently.  This is most useful when
> retrieving dependencies from remote servers.  If the summary is not
> available, then yes, you can (and should!) scan package files
> directly.

Awaiting your reply, I have read information about "pkg_summary", and it is a 
mine of information about each package. So I guess I can't
ignore pkg_summary in the project.

> 
>>> Lastly, I'd recommend to extend your proposal a bit more by including
>>> a list of deliverables, a preliminary schedule with a set of major
>>> milestones, and more examples on how your proposed API would look
>>> like.
>> 
>> I expect to make that very clear in my head. Really know what you expect the 
>> project.
>> But if you really want a schedule, I can make an effort to do this very 
>> quickly.
> 
> Preparing an schedule will help you plan the project in your head
> clearly.  It will also let us see that the project has a rough plan
> and a set of milestones.  This is a very important thing to have, as
> it gives more value to your project proposal... and a detailed
> schedule means that your project has more chances of succeeding in the
> allowed time frame.

Okay, I began to make a schedule. I will finalize it during week end. It's 
difficult to determine the time
that I will pass in each part. I often change the values :)

>> For the API I don't know what type of example you want.
> 
> I think it'd be nice if you'd list the kind of operations (i.e. the
> public interface) you expect this API to support.  For example, start
> by detailing what exactly does PackageKit need for its backend, and
> then list how these PackageKit operations should translate to pkgsrc
> operations.  The more you try to define a specific API, the more you
> will realize things that you didn't realize in advance.

Backends do not have to be complete. If there are a missing function, 
Packagekit do not propose the action to the user.
I will make a sort of table with all PackageKit functions, hypotheticals API 
functions and the pkgsrc operations. 
It will be complete in the same time as the schedule.

Best regards,
Sylvain



Home | Main Index | Thread Index | Old Index