[Starlingx-discuss] how to deal with loop dependent in building stage

Scott Little scott.little at windriver.com
Thu Sep 23 14:22:32 UTC 2021


Linux IMA support was the name of the feature I believe.

This link would seem to suggest that deb does not support file 
signatures as a standard feature ...

https://wiki.debian.org/Teams/Dpkg/Spec/DebSignatures

... although some folks might be working on it.

Scott



On 2021-09-23 10:08 a.m., Scott Little wrote:
> There was a security feature (not sure it's name or if it's still 
> supported) that required a new rpm feature not available in the 
> standard CentOS rpm (file signatures).  The behavior of file signing 
> was further modified by 0001-sign-files-only.patch
>
> Greg, can you comment on this?  Do the Debian packaging tools need to 
> support file signatures?
>
> Scott
>
>
> On 2021-09-23 4:56 a.m., Zhang, Xiao wrote:
>>
>> Comments inline:
>>
>> ...
>>
>>> For centos, we found that loops almost always depend on one of a 
>>> handful of low level packages, e.g. bash, python, gcc, rpm
>>>>>
>>>>> We had two ways to try and deal with this.
>>>>>
>>>>> 1) Allow the use of a pre-compiled binary from upstream to satisfy 
>>>>> the dependency when the StarlingX modification are unlikely to 
>>>>> affect how dependent packages compile. Packages in the 'mock' lst 
>>>>> files could satisfy this type of requirement.
>>>>> e.g. A=bash
>>>>> So in your example, compile order would be:
>>>>>     F (vs upstream A), D (vs upstream A), C, B, A
>>>>>
>>>>> 2) Use a different 'build-type'... other than 'std' or 'rt' ... 
>>>>> when the modified StarlingX package was likely to affect the 
>>>>> output of dependent packages.  Compile packages in that build type 
>>>>> first.
>>>>> e.g. A=rpm
>>>>>  = build-type 'installer' compile order would be:
>>>>>         A (vs upstream binaries) B and C ... call this A-intermediate
>>>> ? So, the 'installer' type of A doesn't depend on B and C, right? 
>>>> Just like the official method to break the loop manually?
>>>
>>> [SL] I wouldn't say that A doesn't depend on B or C.   Rather the 
>>> 'installer' package set does not build B or C, so they do not factor 
>>> into build order calculations.  This does require that upstream B 
>>> and C be available to satisfy build dependencies when compiling 
>>> within the 'installer' package set. When compiling the 'std' set, 
>>> but the packages from the 'installer' package must be available to 
>>> satisfy dependencies. The 'installer' compiled versions of B and C 
>>> must be of higher version that those from upstream... and thus 
>>> installed instead of the upstream ones.
>>>
>> So? In this kind of case, we also needn't break the loop manually but 
>> just separate the into different layers/sets and compile them in 
>> different stage, right?
>>
>> In the bottom logic(or, with the compiler's point of view), it is the 
>> same with the first one. The key difference comes from the special 
>> package A. It's so basic that it has to be compiled tice
>>
>>>>>  = build-type 'std' compile order would be:
>>>>>         F (vs A-intermediate), D (vs A-intermediate), C, B, A
>>>>>
>>>> Seems the first one is more fit for automatic build. Then, any 
>>>> special cases thus we have to use the second method? Or we can 
>>>> always use the first one?
>>>>
>>> [SL] You'll need to support both methods of resolving dependency 
>>> cycles.
>>>
>>> Note that the layered build concept of the CentOS build was another 
>>> way to address partitioning of packages into sets that might help 
>>> with breaking dependency loops by not having A,B,C in the same 
>>> compile set. Look to the 'compiler' layer.
>>>
>>> I think you need to support at least one of the 'build-type' or 
>>> 'build layer' concepts to begin with.  Bonus points if you support 
>>> both.  Supporting both was needed for the 'rpm' package which we 
>>> wanted to patch, and the patch does alter the format of the rpms 
>>> generated, and the rpm package itself had to be in that format.  So 
>>> rpm was compiled for build-type 'installer' of layer 'compiler' (new 
>>> rpm code in old rpm package), then recompiled in build-type 'std' of 
>>> layer 'compiler' (new rpm code in new rpm package).  Finally the std 
>>> build of rpm was published for use by higher layer builds.
>>>
>>> Only designers working on packages in the 'installer' set, or the 
>>> 'compiler' layer, need to worry about the multi pass build.  For 
>>> most packages, a single pass 'flock' layer, 'std' build-type, build 
>>> is fine.
>>>
>> So, in build process, we need to build "compiler" layer firstly, then 
>> use the new build "compilers" build other layers. Some special 
>> packages like "rpm" may exist in more than one layers/sets.
>>
>>
>> BTW: I suppose the upstream rpm is already powerful enough, why we 
>> have to modify it? Just bug fix or new features? If the later one, 
>> StarlingX need some special features it hasn't? It maybe very 
>> useful/important for us in porting StarlingX onto other Linux releases.
>>
>>
>> Thanks
>>
>> Xiao
>>
>>
>>> Scott
>>>
>>>
>>>>
>>>> Thanks
>>>>
>>>> Xiao
>>>>
>>>>> Scott
>>>>>
>>>>>
>>>>> On 2021-09-18 2:50 a.m., Zhang, Xiao wrote:
>>>>>>  Hi,
>>>>>>
>>>>>>
>>>>>> We are trying to construct basic environment for porting 
>>>>>> starlingX on Debian. While when I dealing with the build order of 
>>>>>> user space packages, the loop dependent problem blocked me.
>>>>>>
>>>>>> The easiest example: source package A build depend on B while B 
>>>>>> is also build depend on A. We can just build A, B, A, B and only 
>>>>>> use the later result.
>>>>>>
>>>>>> A fairly complex example: A depends on B and C, B depends on D, C 
>>>>>> depends on F, D depends on A and F. In this case there will be 
>>>>>> three cycles as below:
>>>>>>
>>>>>> A->B->D->A, A->B->D->F->A, A->C->F->A . Even more, if in some 
>>>>>> cases we needn't B or D, then we have only one cycle: ACFA
>>>>>>
>>>>>> I tried to find a method to deal with it but failed.
>>>>>>
>>>>>> So I wonder how did we deal with such loop dependent before, on 
>>>>>> CentOS. Any advises about it?
>>>>>>
>>>>>>
>>>>>> Thanks a lot
>>>>>>
>>>>>> Xiao
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Starlingx-discuss mailing list
>>>>>> Starlingx-discuss at lists.starlingx.io
>>>>>> http://lists.starlingx.io/cgi-bin/mailman/listinfo/starlingx-discuss
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Starlingx-discuss mailing list
>>>>> Starlingx-discuss at lists.starlingx.io
>>>>> http://lists.starlingx.io/cgi-bin/mailman/listinfo/starlingx-discuss
>>>>
>>>> _______________________________________________
>>>> Starlingx-discuss mailing list
>>>> Starlingx-discuss at lists.starlingx.io
>>>> http://lists.starlingx.io/cgi-bin/mailman/listinfo/starlingx-discuss
>>>
>>>
>>>
>>> _______________________________________________
>>> Starlingx-discuss mailing list
>>> Starlingx-discuss at lists.starlingx.io
>>> http://lists.starlingx.io/cgi-bin/mailman/listinfo/starlingx-discuss
>>
>> _______________________________________________
>> Starlingx-discuss mailing list
>> Starlingx-discuss at lists.starlingx.io
>> http://lists.starlingx.io/cgi-bin/mailman/listinfo/starlingx-discuss
>
>
>
> _______________________________________________
> Starlingx-discuss mailing list
> Starlingx-discuss at lists.starlingx.io
> http://lists.starlingx.io/cgi-bin/mailman/listinfo/starlingx-discuss


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.starlingx.io/pipermail/starlingx-discuss/attachments/20210923/d996c4cf/attachment-0001.htm>


More information about the Starlingx-discuss mailing list