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

Andrew Fyfe andrew at neptune-one.net
Sun Jun 17 18:07:04 EDT 2007


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




More information about the pacman-dev mailing list