[pacman-dev] How does pacman interact with a package's INSTALL script

Bozhidar Batsov lordbad at e-card.bg
Sun Jun 17 16:11:29 EDT 2007


Andrew Fyfe wrote:
> Bozhidar Batsov wrote:
>   
>> Andrew Fyfe wrote:
>>     
>>> lordbad wrote:
>>>   
>>>       
>>>> In the documentation I have read the following:
>>>>
>>>>     There are also install files. This PKGBUILD specifies 'foo.install' as the
>>>> package's install file. Here is an example install file:
>>>>
>>>>     post_install() {
>>>>     /bin/true
>>>>     }
>>>>
>>>>     post_upgrade() {
>>>>     /bin/true
>>>>     }
>>>>
>>>>     pre_remove() {
>>>>     /bin/true
>>>>     }
>>>>
>>>>     op=$1
>>>>     shift
>>>>
>>>>     $op "$@"
>>>>
>>>>     Here are the function explainations :
>>>>
>>>>         * post_install : this script is run right after files are installed, it
>>>> takes one argument :
>>>>               o the package version
>>>>         * post_upgrade : this script is run after all files have been upgraded,
>>>> it takes two arguments :
>>>>               o the new package version
>>>>               o the old package version
>>>>         * pre_remove : this script is run right before files are removed (stop a
>>>> daemon for example) and takes one argument :
>>>>               o the package version
>>>>
>>>>     The three lines at the bottom are needed in every install file so that they
>>>> run properly.
>>>>
>>>> But I do not understand how does pacman handle these scripts. Does it source the
>>>> scripts first and then call the shell functions defined in them with some C
>>>> function like "system" for example? But if it does so why are the last 3 lines
>>>> needed - I see little if any need for them. So if anyone can give me some hints
>>>> on the subject and maybe even mention which of pacman's source files implements
>>>> this functionality I'd be very grateful. Thanks in advance for your help.
>>>>
>>>> Best Regards,
>>>> Bozhidar
>>>>
>>>>
>>>> _____________________
>>>> http://www.e-card.bg/
>>>>
>>>>
>>>> _______________________________________________
>>>> pacman-dev mailing list
>>>> pacman-dev at archlinux.org
>>>> http://archlinux.org/mailman/listinfo/pacman-dev
>>>>     
>>>>         
>>> The function your looking for is _alpm_runscriptlet() 
>>> (lib/libalpm/trans.c:567)
>>>
>>> http://projects.archlinux.org/git/?p=pacman.git;a=blob;f=lib/libalpm/trans.c;hb=HEAD#l567
>>>
>>> Pacman runs 'source <path to file>/.INSTALL <function name> <old ver> 
>>> <new ver>', the last 3 lines of .INSTALL are needed to get the function 
>>> name and call it.
>>>
>>> Andrew
>>>
>>> _______________________________________________
>>> pacman-dev mailing list
>>> pacman-dev at archlinux.org
>>> http://archlinux.org/mailman/listinfo/pacman-dev
>>>   
>>>       
>> One more question if I may. Old version and new version have meaning 
>> only in upgrade context. What should be the value of old version in 
>> install context and the value of new version in remove context?
>>
>> _______________________________________________
>> pacman-dev mailing list
>> pacman-dev at archlinux.org
>> http://archlinux.org/mailman/listinfo/pacman-dev
>>     
> For install/remove it's 'source <path to file>/.INSTALL <function name> 
> <version>'
>
> Andrew
>
> _______________________________________________
> pacman-dev mailing list
> pacman-dev at archlinux.org
> http://archlinux.org/mailman/listinfo/pacman-dev
>   
Yes. I finally understood it completely. Thanks again.




More information about the pacman-dev mailing list