[Starlingx-discuss] how to deal with loop dependent in building stage
Scott Little
scott.little at windriver.com
Thu Sep 23 14:08:41 UTC 2021
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.starlingx.io/pipermail/starlingx-discuss/attachments/20210923/6681d091/attachment-0001.htm>
More information about the Starlingx-discuss
mailing list