├── .github
└── workflows
│ └── issue-pr-contrib-metrics.yaml
├── ADOPTERS.md
├── CIS
├── README.md
├── inspec-report-level1-root-2020-12-08.txt
├── inspec-report-level2-root-2020-12-08.txt
└── level1-remediation_notes-2020-12-08.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── EMERITUS_MAINTAINERS.md
├── LICENSE
├── MAINTAINERS.md
├── README.md
├── SECURITY.md
├── adding-new-packages.md
├── attic
└── community-meetings
│ ├── 2021-05-11-slides.pdf
│ ├── 2021-05-11.md
│ ├── 2021-06-08-slides.pdf
│ ├── 2021-06-08.md
│ ├── 2021-07-13-slides.pdf
│ ├── 2021-07-13.md
│ ├── 2021-07-26.md
│ ├── 2021-08-10-slides.pdf
│ ├── 2021-08-10.md
│ ├── 2021-08-23.md
│ ├── 2021-09-14-slides.pdf
│ ├── 2021-09-14.md
│ ├── 2021-09-28.md
│ ├── 2021-10-19-slides.pdf
│ ├── 2021-10-19.md
│ ├── 2021-10-26.md
│ ├── 2021-11-09.md
│ ├── 2021-11-23.md
│ ├── 2021-12-17-slides.pdf
│ ├── 2021-12-17.md
│ ├── 2022-01-11-slides.pdf
│ ├── 2022-01-11.md
│ └── README.md
├── governance.md
├── interop-matrix.md
└── sync-maintainers
├── README
├── requirements.txt
└── sync-maintainers.py
/.github/workflows/issue-pr-contrib-metrics.yaml:
--------------------------------------------------------------------------------
1 | name: Monthly contributor report
2 | on:
3 | workflow_dispatch:
4 | inputs:
5 | start_date:
6 | type: string
7 | description: |
8 | Custom start date for metrics generation in YYYY-MM-DD format.
9 | required: true
10 | end_date:
11 | type: string
12 | description: |
13 | Custom end date for metrics generation in YYYY-MM-DD format.
14 | required: true
15 | # Run on every 22th of the month. This guarantees that this action runs
16 | # before the Dev Sync (every 4th Tuesday of the month in the afternoon).
17 | schedule:
18 | - cron: '0 0 22 * *'
19 |
20 | permissions:
21 | issues: write
22 |
23 | jobs:
24 | contributor_report:
25 | name: contributor report
26 | runs-on: ubuntu-latest
27 |
28 | steps:
29 | - name: Set the start and end dates
30 | shell: bash
31 | run: |
32 | set -euo pipefail
33 | if [[ -n "${{inputs.start_date}}" && -n "${{inputs.end_date}}" ]] ; then
34 | start_date="${{inputs.start_date}}"
35 | end_date=${{inputs.end_date}}
36 | else
37 | start_date=$(date -d "last month" +%Y-%m-%d)
38 | end_date=$(date -d "yesterday" +%Y-%m-%d)
39 | fi
40 |
41 | echo "START_DATE=$start_date" >> "$GITHUB_ENV"
42 | echo "END_DATE=$end_date" >> "$GITHUB_ENV"
43 |
44 | #
45 | # Contributors stats
46 | #
47 | - name: Collect contributor metrics
48 | uses: github/contributors@v1
49 | env:
50 | GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}
51 | START_DATE: ${{ env.START_DATE }}
52 | END_DATE: ${{ env.END_DATE }}
53 | # We explicitly list repos for our metrics here so temporary forks like
54 | # e.g. systemd, gentoo, or udev don't pollute the stats
55 | REPOSITORY: "flatcar/nebraska,flatcar/flatcar-website,flatcar/flatcar-build-scripts,flatcar/baselayout,flatcar/bootengine,flatcar/coreos-cloudinit,flatcar/flatcar-dev-util,flatcar/init,flatcar/locksmith,flatcar/mantle,flatcar/mayday,flatcar/nss-altfiles,flatcar/scripts,flatcar/seismograph,flatcar/shim,flatcar/sysroot-wrappers,flatcar/toolbox,flatcar/torcx,flatcar/update-ssh-keys,flatcar/update_engine,flatcar/updateservicectl,flatcar/Flatcar,flatcar/flatcar-packer-qemu,flatcar/flatcar-ipxe-scripts,flatcar/flatcar-cloud-image-uploader,flatcar/flatcar-linux-update-operator,flatcar/flatcar-release-mirror,flatcar/flatcar-terraform,flatcar/sdnotify-proxy,flatcar/flatcar-automation,flatcar/nebraska-update-agent,flatcar/fleetlock,flatcar/flog,flatcar/ign-converter,flatcar/nomad-on-flatcar,flatcar/sysext-bakery,flatcar/reports,flatcar/flatcar-demos,flatcar/jitsi-server,flatcar/flatcar-mastodon,flatcar/ue-rs,flatcar/azure-marketplace-ingestion-api,flatcar/flatcar-tutorial"
56 | SPONSOR_INFO: "false"
57 |
58 | #
59 | # Q&A Discussions stats
60 | #
61 | - name: All unanswered Q&A summary metrics
62 | uses: github/issue-metrics@v2
63 | env:
64 | GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}
65 | SEARCH_QUERY: 'repo:flatcar/Flatcar type:discussions category:Q&A is:unanswered'
66 | # This metric measures items that are still open
67 | HIDE_TIME_TO_CLOSE: true
68 | - name: rename open discussion metrics file
69 | shell: bash
70 | run: |
71 | set -euo pipefail
72 | mv issue_metrics.md discussion_qna_open.md
73 |
74 | - name: All answered Q&A Discussions metrics
75 | uses: github/issue-metrics@v2
76 | env:
77 | GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}
78 | SEARCH_QUERY: 'repo:flatcar/Flatcar type:discussions category:Q&A is:answered'
79 | - name: rename open discussion metrics file
80 | shell: bash
81 | run: |
82 | set -euo pipefail
83 | mv issue_metrics.md discussion_qna_closed.md
84 |
85 | - name: New Q&A discussions created metrics
86 | uses: github/issue-metrics@v2
87 | env:
88 | GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}
89 | SEARCH_QUERY: 'repo:flatcar/Flatcar type:discussions category:Q&A created:${{ env.START_DATE }}..${{ env.END_DATE }}'
90 | - name: rename open discussion metrics file
91 | shell: bash
92 | run: |
93 | set -euo pipefail
94 | mv issue_metrics.md discussion_qna_opened.md
95 |
96 | #
97 | # Regular Discussions stats
98 | #
99 | - name: All open Discussions summary metrics
100 | uses: github/issue-metrics@v2
101 | env:
102 | GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}
103 | SEARCH_QUERY: 'repo:flatcar/Flatcar type:discussions -category:Q&A is:open'
104 | # This metric measures items that are still open
105 | HIDE_TIME_TO_CLOSE: true
106 | - name: rename open discussion metrics file
107 | shell: bash
108 | run: |
109 | set -euo pipefail
110 | mv issue_metrics.md discussion_open.md
111 |
112 | - name: New Discussions created metrics
113 | uses: github/issue-metrics@v2
114 | env:
115 | GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}
116 | SEARCH_QUERY: 'repo:flatcar/Flatcar type:discussions -category:Q&A created:${{ env.START_DATE }}..${{ env.END_DATE }}'
117 | - name: rename open discussion metrics file
118 | shell: bash
119 | run: |
120 | set -euo pipefail
121 | mv issue_metrics.md discussion_opened.md
122 |
123 | - name: Discussions closed metrics
124 | uses: github/issue-metrics@v2
125 | env:
126 | GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}
127 | SEARCH_QUERY: 'repo:flatcar/Flatcar type:discussions -category:Q&A closed:${{ env.START_DATE }}..${{ env.END_DATE }}'
128 | - name: rename open discussion metrics file
129 | shell: bash
130 | run: |
131 | set -euo pipefail
132 | mv issue_metrics.md discussion_closed.md
133 |
134 | #
135 | # Issues stats
136 | #
137 | - name: All open Issues summary metrics
138 | uses: github/issue-metrics@v2
139 | env:
140 | GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}
141 | SEARCH_QUERY: 'org:flatcar is:issue is:open'
142 | # "time to answer" only supported for discussions
143 | HIDE_TIME_TO_ANSWER: true
144 | # This metric measures items that are still open
145 | HIDE_TIME_TO_CLOSE: true
146 | IGNORE_USERS: "flatcar-infra,github-actions[bot],dependabot[bot]"
147 | - name: rename open issues metrics file
148 | shell: bash
149 | run: |
150 | set -euo pipefail
151 | mv issue_metrics.md issues_open.md
152 |
153 | - name: New issues created metrics
154 | uses: github/issue-metrics@v2
155 | env:
156 | GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}
157 | SEARCH_QUERY: 'org:flatcar is:issue created:${{ env.START_DATE }}..${{ env.END_DATE }}'
158 | # "time to answer" only supported for discussions
159 | HIDE_TIME_TO_ANSWER: true
160 | IGNORE_USERS: "flatcar-infra,github-actions[bot],dependabot[bot]"
161 | - name: rename new issues opened metrics file
162 | shell: bash
163 | run: |
164 | set -euo pipefail
165 | mv issue_metrics.md issues_opened.md
166 |
167 | - name: Issues closed metrics
168 | uses: github/issue-metrics@v2
169 | env:
170 | GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}
171 | SEARCH_QUERY: 'org:flatcar is:issue closed:${{ env.START_DATE }}..${{ env.END_DATE }}'
172 | # "time to answer" only supported for discussions
173 | HIDE_TIME_TO_ANSWER: true
174 | IGNORE_USERS: "flatcar-infra,github-actions[bot],dependabot[bot]"
175 | - name: rename issues closed metrics file
176 | shell: bash
177 | run: |
178 | set -euo pipefail
179 | mv issue_metrics.md issues_closed.md
180 |
181 | #
182 | # Advisories stats
183 | #
184 | - name: All open Advisories summary metrics
185 | uses: github/issue-metrics@v2
186 | env:
187 | GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}
188 | SEARCH_QUERY: 'repo:flatcar/Flatcar is:issue is:open label:advisory -status:implemented'
189 | # "time to answer" only supported for discussions
190 | HIDE_TIME_TO_ANSWER: true
191 | # This metric measures items that are still open
192 | HIDE_TIME_TO_CLOSE: true
193 | - name: rename open advisories metrics file
194 | shell: bash
195 | run: |
196 | set -euo pipefail
197 | mv issue_metrics.md advisories_open.md
198 |
199 | - name: New advisories created metrics
200 | uses: github/issue-metrics@v2
201 | env:
202 | GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}
203 | SEARCH_QUERY: 'repo:flatcar/Flatcar is:issue label:advisory created:${{ env.START_DATE }}..${{ env.END_DATE }}'
204 | # "time to answer" only supported for discussions
205 | HIDE_TIME_TO_ANSWER: true
206 | - name: rename new advisories opened metrics file
207 | shell: bash
208 | run: |
209 | set -euo pipefail
210 | mv issue_metrics.md advisories_opened.md
211 |
212 | - name: Advisories closed metrics
213 | uses: github/issue-metrics@v2
214 | env:
215 | GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}
216 | SEARCH_QUERY: 'repo:flatcar/Flatcar is:issue label:advisory closed:${{ env.START_DATE }}..${{ env.END_DATE }}'
217 | # "time to answer" only supported for discussions
218 | HIDE_TIME_TO_ANSWER: true
219 | - name: rename advisories closed metrics file
220 | shell: bash
221 | run: |
222 | set -euo pipefail
223 | mv issue_metrics.md advisories_closed.md
224 |
225 |
226 | #
227 | # Pull Requests stats
228 | #
229 | - name: All open PRs summary metrics
230 | uses: github/issue-metrics@v2
231 | env:
232 | GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}
233 | SEARCH_QUERY: 'org:flatcar is:pr is:open -author:flatcar-infra'
234 | # "time to answer" only supported for discussions
235 | HIDE_TIME_TO_ANSWER: true
236 | # This metric measures items that are still open
237 | HIDE_TIME_TO_CLOSE: true
238 | IGNORE_USERS: "flatcar-infra,github-actions[bot],dependabot[bot]"
239 | - name: rename open PR metrics file
240 | shell: bash
241 | run: |
242 | set -euo pipefail
243 | mv issue_metrics.md prs_open.md
244 |
245 | - name: New PRs created metrics
246 | uses: github/issue-metrics@v2
247 | env:
248 | GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}
249 | SEARCH_QUERY: 'org:flatcar is:pr -author:flatcar-infra created:${{ env.START_DATE }}..${{ env.END_DATE }}'
250 | # "time to answer" only supported for discussions
251 | HIDE_TIME_TO_ANSWER: true
252 | IGNORE_USERS: "flatcar-infra,github-actions[bot],dependabot[bot]"
253 | - name: rename new PRs metrics file
254 | shell: bash
255 | run: |
256 | set -euo pipefail
257 | mv issue_metrics.md prs_opened.md
258 |
259 | - name: PRs closed metrics
260 | uses: github/issue-metrics@v2
261 | env:
262 | GH_TOKEN: ${{ secrets.GH_ACTION_METRICS_ORG_READ }}
263 | SEARCH_QUERY: 'org:flatcar is:pr -author:flatcar-infra closed:${{ env.START_DATE }}..${{ env.END_DATE }}'
264 | # "time to answer" only supported for discussions
265 | HIDE_TIME_TO_ANSWER: true
266 | IGNORE_USERS: "flatcar-infra,github-actions[bot],dependabot[bot]"
267 | - name: rename closed PRs metrics file
268 | shell: bash
269 | run: |
270 | set -euo pipefail
271 | mv issue_metrics.md prs_closed.md
272 |
273 | #
274 | # Upload and post-process, create issue
275 | #
276 |
277 | - name: Upload individual reports
278 | uses: actions/upload-artifact@v4
279 | with:
280 | retention-days: 32
281 | name: raw-reports
282 | path: |
283 | ./*.md
284 |
285 | - name: Assemble full report
286 | shell: bash
287 | run: |
288 | set -euo pipefail
289 |
290 | echo -e '# Contributions, Discussions, Advisories, and Issues' >> summary_report.md
291 | echo "(See comment below for Pull Request Metrics)" >> summary_report.md
292 |
293 | # Create table of contents.
294 | # Anchor targets defined here are created below when the respective section is added.
295 | echo "# Contents" >> summary_report.md
296 | echo "* [Contributors Metrics](#contributors-metrics)" >> summary_report.md
297 | echo "* [Github Discussions Metrics](#discussions-metrics)" >> summary_report.md
298 | echo " * [Questions and Answers Discussions](#discussions-metrics-qna)" >> summary_report.md
299 | echo " * [Other Discussions](#discussions-metrics-other)" >> summary_report.md
300 | echo "* [Advisory Metrics](#advisory-metrics)" >> summary_report.md
301 | echo " * [New Advisories](#advisory-metrics-new)" >> summary_report.md
302 | echo " * [Closed Advisories](#advisory-metrics-closed)" >> summary_report.md
303 | echo " * [All open Advisories](#advisory-metrics-summary)" >> summary_report.md
304 | echo "* [Issue Metrics](#issue-metrics)" >> summary_report.md
305 | echo " * [Summary of all open Issues](#issue-metrics-summary)" >> summary_report.md
306 | echo " * [New Issues](#issue-metrics-new)" >> summary_report.md
307 | echo " * [Closed Issues](#issue-metrics-closed)" >> summary_report.md
308 |
309 | #
310 | # Contributors
311 | #
312 | echo -e '\n\n
Contributors Metrics
' >> summary_report.md
313 | tail --lines=+2 contributors.md >> summary_report.md
314 |
315 | #
316 | # Discussions
317 | #
318 | echo -e '\n\nDiscussions Metrics
' >> summary_report.md
319 | echo -e '\nQuestions & Answers
' >> summary_report.md
320 | echo -e "\n### Summary of all unanswered Questions" >> summary_report.md
321 | echo "These summary statistics include all currently unanswered Q&A discussions (openend at any point in the past)." \
322 | >> summary_report.md
323 | # remove full discussions list from stats; we only want the summary
324 | tail --lines=+2 discussion_qna_open.md \
325 | | awk '/^\| Title \| URL \| Author \|/{silent=1} {if (silent==0) print $0}' \
326 | >> summary_report.md
327 |
328 | echo -e "\n### Summary of all answered Questions" >> summary_report.md
329 | echo -e "\nThese Q&A discussions were openend and also answered between ${{ env.START_DATE }} - ${{ env.END_DATE }}." \
330 | >> summary_report.md
331 | echo -e "(Discussions search is somewhat limited on Github; there's currently no way to search for discussions answered within a given timespan)" \
332 | >> summary_report.md
333 | # remove full discussions list from stats; we only want the summary
334 | tail --lines=+2 discussion_qna_closed.md \
335 | | awk '/^\| Title \| URL \| Author \|/{silent=1} {if (silent==0) print $0}' \
336 | >> summary_report.md
337 |
338 | echo -e "\n### New Questions" >> summary_report.md
339 | echo -e "\nThese Q&A discussions were created between ${{ env.START_DATE }} - ${{ env.END_DATE }}." \
340 | >> summary_report.md
341 | tail --lines=+2 discussion_qna_opened.md >> summary_report.md
342 |
343 |
344 | echo -e '\nOther Discussions
' >> summary_report.md
345 | echo -e "\n### Summary of open Discussions" >> summary_report.md
346 | echo "These summary statistics include all currently open discussions except Q&A (openend at any point in the past)." \
347 | >> summary_report.md
348 | # remove full discussions list from stats; we only want the summary
349 | tail --lines=+2 discussion_open.md \
350 | | awk '/^\| Title \| URL \| Author \|/{silent=1} {if (silent==0) print $0}' \
351 | >> summary_report.md
352 |
353 | echo -e "\n## New discussions" >> summary_report.md
354 | echo -e "\nThese discussions (except Q&A) were created between ${{ env.START_DATE }} - ${{ env.END_DATE }}." \
355 | >> summary_report.md
356 | tail --lines=+2 discussion_opened.md >> summary_report.md
357 |
358 | echo -e "\n## Discussions closed" >> summary_report.md
359 | echo -e "\nThese discussions (except Q&A) were opened at any point in the past and closed between ${{ env.START_DATE }} - ${{ env.END_DATE }}." \
360 | >> summary_report.md
361 | tail --lines=+2 discussion_closed.md >> summary_report.md
362 |
363 | #
364 | # Advisories
365 | #
366 | echo -e '\n\nAdvisory Metrics
' >> summary_report.md
367 | echo -e "\n\nNote that advisories are tracked in issues, so the advisories discussed in this section also contribute to the overall issue statistics above.\n\n" \
368 | >> summary_report.md
369 |
370 | echo -e '\nNew Advisories
' >> summary_report.md
371 | echo -e "\nThese advisories were created between ${{ env.START_DATE }} - ${{ env.END_DATE }}." \
372 | >> summary_report.md
373 | tail --lines=+2 advisories_opened.md >> summary_report.md
374 |
375 | echo -e '\nAdvisories closed
' >> summary_report.md
376 | echo -e "\nThese advisories were openend at any point in the past and were closed between ${{ env.START_DATE }} - ${{ env.END_DATE }}." \
377 | >> summary_report.md
378 | tail --lines=+2 advisories_closed.md >> summary_report.md
379 |
380 | echo -e '\nAll open Advisoriess
' >> summary_report.md
381 | echo "These statistics cover all open advisories (openend at any point in the past)." \
382 | >> summary_report.md
383 | tail --lines=+2 advisories_open.md >> summary_report.md
384 |
385 | #
386 | # Issues
387 | #
388 | echo -e '\n\nIssue Metrics
' >> summary_report.md
389 |
390 | echo -e '\nSummary of all open Issues
' >> summary_report.md
391 | echo "These summary statistics include all currently open issues (openend at any point in the past)." \
392 | >> summary_report.md
393 | # remove full issues list from stats; we only want the summary
394 | tail --lines=+2 issues_open.md \
395 | | awk '/^\| Title \| URL \| Author \|/{silent=1} {if (silent==0) print $0}' \
396 | >> summary_report.md
397 |
398 | echo -e '\nNew Issues
' >> summary_report.md
399 | echo -e "\nThese issues were created between ${{ env.START_DATE }} - ${{ env.END_DATE }}." \
400 | >> summary_report.md
401 | tail --lines=+2 issues_opened.md >> summary_report.md
402 |
403 | echo -e '\nIssues closed
' >> summary_report.md
404 | echo -e "\nThese issues were openend at any point in the past and were closed between ${{ env.START_DATE }} - ${{ env.END_DATE }}." \
405 | >> summary_report.md
406 | tail --lines=+2 issues_closed.md >> summary_report.md
407 |
408 | #
409 | # Pull Requests
410 | #
411 |
412 | echo '# Pull request metrics' >> comment_report.md
413 | echo "(See comment below for Pull Request Metrics)" >> comment_report.md
414 |
415 | echo "* [Pull Requests Metrics](#pr-metrics)" >> comment_report.md
416 | echo " * [Summary of all open PRs](#pr-metrics-summary)" >> comment_report.md
417 | echo " * [New PRs](#pr-metrics-new)" >> comment_report.md
418 | echo " * [Closed PRs](#pr-metrics-closed)" >> comment_report.md
419 | echo -e '\n\nPull Requests Metrics
' >> comment_report.md
420 |
421 | echo -e '\nSummary of all open PRs
' >> comment_report.md
422 | echo "These summary statistics include all currently open PRs (openend at any point in the past)." \
423 | >> comment_report.md
424 | # remove full PRs list from stats; we only want the summary
425 | tail --lines=+2 prs_open.md \
426 | | awk '/^\| Title \| URL \| Author \|/{silent=1} {if (silent==0) print $0}' \
427 | >> comment_report.md
428 |
429 | echo -e '\nNew PRs
' >> comment_report.md
430 | echo -e "\nThese PRs were created between ${{ env.START_DATE }} - ${{ env.END_DATE }}." \
431 | >> comment_report.md
432 | tail --lines=+2 prs_opened.md >> comment_report.md
433 |
434 | echo -e '\nPRs closed
' >> comment_report.md
435 | echo -e "\nThese PRs were openend at any point in the past and were closed between ${{ env.START_DATE }} - ${{ env.END_DATE }}." \
436 | >> comment_report.md
437 | tail --lines=+2 prs_closed.md >> comment_report.md
438 |
439 | - name: Upload merged report
440 | uses: actions/upload-artifact@v4
441 | with:
442 | retention-days: 32
443 | name: full-report
444 | path: |
445 | ./summary_report.md
446 | ./comment_report.md
447 |
448 | - name: Create issue (1/2 of report)
449 | id: ciss
450 | uses: peter-evans/create-issue-from-file@v5
451 | with:
452 | title: Monthly contributions report ${{ env.START_DATE }} - ${{ env.END_DATE }}
453 | token: ${{ secrets.GITHUB_TOKEN }}
454 | content-filepath: ./summary_report.md
455 | labels: kind/metric
456 |
457 | - name: Create comment (2/2 of report)
458 | id: cisc
459 | uses: peter-evans/create-or-update-comment@v4
460 | with:
461 | token: ${{ secrets.GITHUB_TOKEN }}
462 | issue-number: ${{ steps.ciss.outputs.issue-number }}
463 | body-path: ./comment_report.md
464 |
--------------------------------------------------------------------------------
/ADOPTERS.md:
--------------------------------------------------------------------------------
1 | Who is using Flatcar?
2 | ====================
3 |
4 | The following is a list of adopters who have publicly spoken about their use of Flatcar, or who have added themselves to this list.
5 |
6 |
7 | Adding yourself as a user
8 | -------------------------
9 |
10 | If you are using Flatcar, please consider adding yourself as a user with a quick description of your use case by opening a pull request to this file and adding a section describing your usage of Flatcar. If you are open to others contacting you about your use of Flatcar on Slack or Matrix, include your Slack/Matrix nickname or email as well.
11 |
12 | * N: Name of user (company or individual)
13 | D: Description
14 | L: Link with further information (optional)
15 | C: Contacts available for questions (optional)
16 |
17 | Example entry:
18 |
19 | * N: Flatcar Example User Inc.
20 | D: Using Flatcar for running Kubernetes in Azure via Cluster API
21 | L: https://www.exampleuser.com
22 | C: Slack: @slacknick and/or Matrix: @Matrixnick and/or Email: nick [at] exampleuser [dot] com
23 |
24 |
25 | Requirements to be listed
26 | -------------------------
27 |
28 | * You must represent the user listed. Do not add entries on behalf of
29 | other users, unless adding a link to a public announcement / blog post.
30 | * Commercial or production use is not required. A user can be an end user, cloud service provider or consultant as long as it is a permanent deployment and not a trial deployment. A well-done home lab setup can be equally
31 | interesting as a large-scale commercial deployment.
32 |
33 |
34 | Users
35 | -----
36 |
37 | * N: 1&1 Mail & Media (GMX, WEB.DE, mail.com)
38 | D: 1&1 Mail & Media is happily using FlatCar as the underlying OS in their large on-premise bare-metal Kubernetes installation, hosting the majority of services for their >40M users
39 | C: stephan.fudeus [at] 1und1 [dot] de
40 |
41 | * N: Adobe
42 | D: Adobe runs Flatcar on over 18,000 nodes in our fleet of Kubernetes clusters across multiple cloud providers and private data centers in 22 different regions worldwide.
43 | C: Mike Tougeron (Slack: @Mike Tougeron) and Tony Gosselin (Slack: @Tony Gosselin).
44 |
45 | * N: AloPeyk
46 | D: We are an on-demand delivery business that every day serve millions of requests on a consistent bare metal infrastructure have this concern to choose a reliable and atomic operations system but none of the common OS couldn't satisfy us for such heavy workloads. Since we migrated our production Kubernetes cluster nothing can break this consistent and solid cluster which is powered by amazing Flatcoar OS.
47 |
48 | * N: AT&T
49 | L: https://medium.com/cloud-native-the-gathering/certified-kubernetes-administrator-join-our-team-its-a-good-thing-7e27ab34dc88
50 | D: "We are integrating Flatcar Container Linux, Istio, OPA, Multi-Region, KNative, and so many other technologies and concepts it makes the mind hurt a bit."
51 |
52 | * N: Atsign
53 | D: Personal Data Services 'atServers' are Dart ahead of time binaries running in containers on Docker Swarm using Flatcar worker nodes.
54 | L: https://twitter.com/cpswan/status/1534481517887512577?s=20&t=ODnO_TPa4nhC62KNAB9Stw
55 | C: Chris Swan [@cpswan](https://github.com/cpswan)
56 |
57 | * N: Cloud house
58 | D: Flatcar OS has been useful for us for our on-premise solution to our customers
59 |
60 | * N: DeepL
61 | D: We use Flatcar for our on-prem K8s clusters to run everything from CI/CD to performance-sensitive GPU workloads.
62 | L: https://deepl.com/
63 | C: simon.campion [at] deepl [dot] com
64 |
65 | * N: Digital Science
66 | L: https://digital-science.com
67 | D: We're running Flatcar on all our self-hosted Kubernetes clusters on AWS, used for all data processing behind Dimensions (https://dimensions.ai). We choose Flatcar for security and simplicity.
68 | C: soren [at] uberresearch.com
69 |
70 | * N: Equinix Metal
71 | L: https://kinvolk.io/blog/2021/02/case-study-equinix-metal-builds-on-flatcar/
72 | D: Equinix uses Flatcar as the OS for its bare metal cloud control plane, which runs in Kubernetes
73 |
74 | * N: Finleap Connect
75 | D: Finleap Connect - At finleap connect we serve over a million financial transactions per day. As a regulated company using a pure cloud-native stack based on Kubernetes, using Flatcar as our foundational building block for reliable, secure and immutable nodes across the public clouds and on bare-metal deployments was a day one decision we never regretted. Today Flatcar serves all of our 12 production clusters with over 300 nodes on public clouds in 3 countries and on our bare-metal private-cloud setup.
76 |
77 | * N: Genesis Cloud
78 | D: Genesis Cloud is using Flatcar Linux as the base for its public cloud offering for instances with GPUs and other accelerators
79 | L: https://genesiscloud.com/
80 | C: Slack: @Philipp Riederer / @Lukas Stockner
81 |
82 | * N: Giant Swarm
83 | L: https://www.giantswarm.io/blog/time-to-catch-a-new-train-flatcar-linux
84 | D: Giant Swarm uses Flatcar within their Kubernetes Distribution. Flatcar is used on all providers (Azure, AWS, Google, OpenStack and Vmware). Giant Swarm manages 100s of clusters with 1000s of nodes running on Flatcar across the planet.
85 |
86 | * N: Intersys AG
87 |
88 | * N: Memzo
89 | D: Kinvolk was a valuable source of knowledge when troubleshooting installation issues with our platform vendor. They were able to join us and the vendor on a call and sort out the issues quickly.The use of the Flatcar Update Server gave us confidence about what software/OS versions were running in each of our environments. This allowed us to better test upgrades before promoting the change to production environments.
90 |
91 | * N: Mettle
92 | L https://swade1987.medium.com/upgrading-to-flatcar-linux-746751e89ab4
93 |
94 | * N: Norwegian Labor and Welfare Administration (NAV)
95 | D: The largest Norwegian government agency has been using Flatcar since 2021 to run all of their on-prem Kubernetes clusters enabling application teams to become more autonomous and to build better welfare services and deliver them with a higher velocity then before.
96 | L: https://nais.io
97 | C: hans.kristian.flaatten@nav.no
98 |
99 | * N: Planetary Quantum GmbH
100 | L: https://www.planetary-quantum.com/
101 | D: Planetary Quantum is a berlin-based provider of Docker-hosting and application hosting. Our sister company Planetary Networks colocates their private cloud in two (fiber-)interconnected datacenters in Berlin and Quantum offers container-based solutions (Docker Swarm and a custom tailored application hosting) on top of Flatcar Linux. Flatcar Linux is a great choice for us because it's a modern Linux, well-suited for Docker and Kubernetes due to recent versions of Kernel, SystemD, immutable root and a well-tested userland. Simple and straight-forward updates of the OS make running Flatcar a no-brainer for us. We currently operate over 50 clusters for our customers in our private cloud — all based on Flatcar Linux.
102 |
103 | * N: plusserver GmbH
104 | D: Plus Server is using Flatcar as the basis of its managed Kubernetes offering, plusserver Kubernetes Engine (PSKE). As they state in their blog, "Flatcar is currently one of the most popular operating systems for Kubernetes clusters. With its container-optimized design, strong security, and support from an active open source community, it provides an excellent foundation for all container workloads."
105 | L: https://www.plusserver.com/blog/flatcar/
106 |
107 | * N: Qualys, Inc
108 | D: Qualys Gateway Service uses Flatcar Container Linux as a base for its container-based appliance, which is mainly focussed on proxy and caching services, serving other Qualys sensors such as Cloud Agent, Scanner and Passive Sensor. QGS also serves Qualys modules including VMDR, Patch Management, Policy Compliance, EDR, FIM and XDR.
109 | L: https://www.qualys.com/documentation/#qualys-gateway-service
110 | C: jrose@qualys.com
111 |
112 | * N: Skilld.cloud
113 | L: https://www.skilld.cloud
114 | D: Flatcar choice was a no-brainer for Skilld: Flatcar is a perfect fit for running Kubernetes workloads. On premise as well as on public clouds. We rely on Flatcar to power up our cutting-edge NRT data-driven ops platforms. A key asset for building distributed & asset management based businesses such as our Community-as-a-service IT platform, or our customers Train fleet's or smart grid's ones.
115 |
116 | * N: Spinoco Czech Republic, a.s.
117 | D: Using Flatcar on Bare Metal to run Kubernetes for Spinoco SaaS
118 | L: www.spinoco.com
119 | C: pavel.chlupacek@spinoco.com
120 |
121 | * N: STACKIT
122 | D: Flatcar is used in our Kubernetes as a Service (KaaS) offering called SKE
123 | L: https://www.stackit.de/de/produkt/stackit-kubernetes-engine/
124 | C: [info@stackit.de](mailto:info@stackit.de)
125 |
126 | * N: Wipro
127 | D: Wipro Business Solutions uses Flatcar Linux to power their hybrid/multi-cloud PostgreSQL containerized DBaaS platform. Each provisioned database is running on a dedicated lightweight stack with Flatcar Linux as the foundational OS running on each database VM. In addition the DBaaS API itself and all supporting machines use Flatcar Linux as well. Flatcar Linux has proven to be a well-supported rock solid OS with minimal attack surface, built in update mechanism and integrated docker daemon. Ignition brings in an early boot provisioning utility that perfectly adds to the full automation approach of the PostgreSQL DBaaS platform. We use it at scale on-prem with OpenStack cloud but also with public clouds like Google and Tencent
128 |
--------------------------------------------------------------------------------
/CIS/README.md:
--------------------------------------------------------------------------------
1 | # CIS Benchmarking
2 |
3 | These reports are from points in time and have notes with remediation and applicability for Flatcar Container Linux.
4 | The CIS benchmarks are usually tailored to specific Linux distributions, as well as generic Linux hosts.
5 | Flatcar Container Linux being a narrow use-case distribution causes many results to be not applicable.
6 |
7 | ## Report Generation
8 |
9 | After some annoyance dealing with [ruby](https://www.ruby-lang.org/) and [inspec](https://www.inspec.io/downloads/), I was able to run the report. Documenting here what I did and what I got.
10 |
11 | 1. Installed inspec via gem: `gem install inspec-bin --user-install`
12 | 2. Cloned the benchmark repo: `git clone https://github.com/dev-sec/cis-dil-benchmark.git`
13 | 3. Started a [Flatcar QEMU image](https://www.flatcar.org/docs/latest/reference/developer-guides/sdk-modifying-flatcar/), copied the authorized keys to root.
14 | 4. Ran the test suite in the image, for level 1 and 2 (the default):
15 |
16 | ```shell
17 | ~/.gem/ruby/2.7.0/bin/inspec exec --no-color ./cis-dil-benchmark/ -t ssh://root@localhost:2222 --input=cis_level=1 > ../debug/inspec-report-level1.txt
18 | ~/.gem/ruby/2.7.0/bin/inspec exec --no-color ./cis-dil-benchmark/ -t ssh://root@localhost:2222 > ../debug/inspec-report.txt
19 | ```
20 |
21 | Results:
22 |
23 | Level 1:
24 |
25 | ```text
26 | Profile Summary: 65 successful controls, 83 control failures, 82 controls skipped
27 | Test Summary: 593 successful, 258 failures, 88 skipped
28 | ```
29 |
30 | Level: 2
31 |
32 | ```text
33 | Profile Summary: 68 successful controls, 118 control failures, 43 controls skipped
34 | Test Summary: 606 successful, 344 failures, 50 skipped
35 | ```
36 |
37 | I'm looking at the failures and many of them are rather arbitrary decisions, and we'll need to evaluate which ones we want to consider to adopt in Flatcar. There's a bunch of filesystems that are recommended to be disabled, some of them, we might go ahead and disable (like hfs), others we actually need (like vfat).
38 |
39 | But then there are things that should be fixed in the benchmark, because they fail because of our file-system layout. For example:
40 |
41 | ```text
42 | × File /etc/pam.d/common-password content is expected to match /^password(\s+\S+\s+)+pam_unix\.so\s+(\S+\s+)*sha512/
43 | expected nil to match /^password(\s+\S+\s+)+pam_unix\.so\s+(\S+\s+)*sha512/
44 | ```
45 |
46 | ## Reports
47 |
48 | Here the too reports, and the corresponding notes we have produced:
49 |
50 | * [2020-12-08 level1 report](./inspec-report-level1-root-2020-12-08.txt) -- [remediation notes](./level1-remediation_notes-2020-12-08.md)
51 | * [2020-12-08 level2 report](./inspec-report-level2-root-2020-12-08.txt) -- _(no remediation notes yet)_
52 |
--------------------------------------------------------------------------------
/CIS/level1-remediation_notes-2020-12-08.md:
--------------------------------------------------------------------------------
1 | # CIS review
2 |
3 | ## Level 1
4 |
5 | ### Level 1 benchmark feedback
6 |
7 | * 1.1.1.1 - cramfs: is not disabled, because it is not even provided
8 | * 1.1.1.2 - freevxfs: is not disabled, because it is not even provided
9 | * 1.1.1.3 - jffs2: is not disabled, because it is not even provided
10 | * 1.1.1.4 - hfs: is not disabled, because it is not even provided
11 | * 1.1.1.5 - hfsplus: is not disabled, because it is not even provided
12 | * 1.1.1.6 - squashfs: we provide hardening to remediate
13 | * 1.1.1.7 - udf: we provide hardening to remediate
14 | * 1.1.5 - /tmp "noexec": remediation provided
15 | * 1.1.17 - /dev/shm "noexec": remediation provided
16 | * 1.1.23 - usb_storage: we provide hardening to remediate
17 | * 1.3.1 - aide: available to be run in a container (even the system `toolbox`)
18 | * 1.3.2 - scheduled aide checks: available through container
19 | * 1.4.1 - grub config is stored in the cryptographically immutable /usr partition (/usr/boot/syslinux/root.A.cfg and /usr/boot/syslinux/root.B.cfg), though it is readable 0644.
20 | * 1.4.2 - grub password: remediation provided
21 | * 1.4.3 - root password: remediation provided (/etc/inittab nor /etc/sysconfig/init will exist or matter)
22 | * 1.4.4 - core dump restriction: remediation provided
23 | * 1.7.1.6 - /etc/issue.net does not exist
24 | * 2.2.1.2 - ntpd: is ready, but not enabled by default. And will run as non-root user "ntp"
25 | * 3.1.1 - sysctl ip_forward: remediation provided
26 | * 3.1.2 - sysctl send_redirects: remediation provided
27 | * 3.2.2 - sysctl accept_redirects: remediation provided
28 | * 3.2.3 - sysctl secure_redirects: remediation provided
29 | * 3.2.4 - sysctl log_martians: remediation provided
30 | * 3.2.9 - sysctl accept_ra: remediation provided
31 | * 3.3.1 - tcp_wrappers (libwrap0): this package is not provided, as it only works for TCP traffic, and unless an application links to libwrap, then the /etc/hosts.{allow,deny} do not apply anyways. Modern applications require iptables, nftables, ipset, and/or BPF rules for network policy.
32 | * 3.3.2 - see 3.3.1 answer
33 | * 3.3.3 - see 3.3.1 answer
34 | * 3.3.4 - see 3.3.1 answer
35 | * 3.3.5 - see 3.3.1 answer
36 | * 3.5.1.1 - ip6tables: our default policy is clean slate. remediation provided.
37 | * 3.5.1.2 - ip6tables: remediation provided
38 | * 3.5.1.3 - ip6tables: remediation provided
39 | * 3.5.1.4 - ip6tables ports: remediation provided
40 | * 3.5.2.1 - iptables: remediation provided
41 | * 3.5.2.2 - iptables: remediation provided
42 | * 3.5.2.3 - iptables: remediation provided
43 | * 3.5.2.4 - iptables: remediation provided
44 | * 4.2.1.2 - rsyslog: available via container
45 | * 4.2.1.3 - rsyslog: remediation provided
46 | * 4.2.1.4 - rsyslog: remediation provided
47 | * 4.2.1.5 - rsyslog: remediation provided
48 | * 4.2.2.1 - journald to syslog: remediation provided
49 | * 4.2.3 - log permissions (faillog and btmp): remediation provided
50 | * 5.1.1 - cron: this is not provided. Use systemd.timer instead
51 | * 5.1.2 - cron: this is not provided. Use systemd.timer instead
52 | * 5.1.3 - cron: this is not provided. Use systemd.timer instead
53 | * 5.1.4 - cron: this is not provided. Use systemd.timer instead
54 | * 5.1.5 - cron: this is not provided. Use systemd.timer instead
55 | * 5.1.6 - cron: this is not provided. Use systemd.timer instead
56 | * 5.1.7 - cron: this is not provided. Use systemd.timer instead
57 | * 5.1.8 - cron.allow/cron.deny: concept does not translate to systemd.timer
58 | * 5.2.4 - sshd protocol: 2 has been the default, and the field is a noop
59 | * 5.2.5 - sshd: remediation provided
60 | * 5.2.6 - sshd: remediation provided
61 | * 5.2.7 - sshd: remediation provided
62 | * 5.2.8 - sshd: remediation provided
63 | * 5.2.9 - sshd: remediation provided
64 | * 5.2.10 - sshd: remediation provided
65 | * 5.2.11 - sshd: remediation provided
66 | * 5.2.12 - sshd: remediation provided
67 | * 5.2.13 - sshd: remediation provided
68 | * 5.2.14 - sshd: remediation provided
69 | * 5.2.15 - sshd: remediation provided
70 | * 5.2.16 - sshd: remediation provided
71 | * 5.2.17 - sshd: remediation provided
72 | * 5.2.18 - sshd: remediation provided
73 | * 5.2.19 - sshd: remediation provided
74 | * 5.2.22 - sshd: remediation provided
75 | * 5.2.23 - sshd: remediation provided
76 | * 5.3.3 - pam: TODO testing needed, as /usr/lib64/pam.d/ is readonly
77 | * 5.3.4 - pam: TODO testing needed, as /usr/lib64/pam.d/ is readonly
78 | * 5.4.1.1 - login.defs: remediation provided
79 | * 5.4.1.2 - login.defs: remediation provided
80 | * 5.4.1.4 - useradd: remediation provided
81 | * 5.4.2 - system accounts: TODO not sure about making "core" as a UID >=1000 and `/sbin/nologin` for all other accounts
82 | * 5.4.4 - umask: remediation provided
83 | * 5.6 - su: su is unusable by any user but root by default (/usr/lib64/pam.d/su is the location)
84 | * 6.1.6 - /etc/passwd- permission: remediation provided
85 | * 6.1.11 - unowned files (UID): the config filesystem (i.e. cloud-init, or qemu config) are UID 1000, which is not mapped. Also, this is largely irrelevant for UIDs that are not mapped by the host, as this is a container host, and files on the disk will be owned the full range of the 128 bit integer UIDs.
86 | * 6.1.12 - unowned files (GID): see 6.1.11 explanation
87 | * 6.2.15 - accounted for groups: TODO determine why this 236 GID is there (it's not in the qemu image)
88 |
89 | ### Level 1 hardening notes
90 |
91 | * /etc/modprobe.d/blacklist-1.1.1.conf to blacklist modules
92 |
93 | ```shell
94 | blacklist cramfs
95 | blacklist freevxfs
96 | blacklist jffs2
97 | blacklist hfs
98 | blacklist hfsplus
99 | blacklist squashfs
100 | blacklist udf
101 | ```
102 |
103 | * /tmp with "noexec"
104 |
105 | ```ini
106 | # /etc/systemd/system/tmp.mount.d/noexec.conf
107 | [Mount]
108 | Options=mode=1777,strictatime,nosuid,nodev,size=50%,nr_inodes=400k,noexec
109 | ```
110 |
111 | * /dev/shm with "noexec" (could figure this out in a systemd drop-in...)
112 |
113 | ```shell
114 | echo "none /dev/shm tmpfs rw,nosuid,nodev,seclabel,noexec 0 0" >> /etc/fstab
115 | ```
116 |
117 | * /etc/modprobe.d/blacklist-1.1.23.conf to blacklist modules
118 |
119 | ```shell
120 | blacklist usb_storage
121 | ```
122 |
123 | * install aide (NOTE: this will require an updated toolbox:/etc/aide.conf for looking into /media/root/)
124 |
125 | ```shell
126 | toolbox
127 | dnf install -y aide
128 | aide --init
129 | mv /var/lib/aide/aide.db{.new,}.gz
130 | aide --check
131 | ```
132 |
133 | * check with aide (NOTE: see prior)
134 |
135 | ```shell
136 | toolbox aide --check
137 | ```
138 |
139 | * grub/menu.list permissions:
140 |
141 | ```shell
142 | chmod 0600 /boot/boot/grub/menu.lst
143 | # BUG permissions are 0755, and the chmod does not persist on reboot...
144 | # https://github.com/kinvolk/Flatcar/issues/296
145 | ```
146 |
147 | * grub password: /usr/share/oem/grub.cfg
148 |
149 | ```shell
150 | set superusers="user1"
151 | password user1 password1
152 | ```
153 |
154 | * root password: `passwd` to set a root password; or hash in cloud-init/ignition
155 | * core dump restriction:
156 |
157 | ```shell
158 | # /etc/security/limits.d/restrict.conf
159 | * hard core 0
160 | ```
161 |
162 | * sysctl (currently there is a bug for persistence of these settings https://github.com/kinvolk/Flatcar/issues/297)
163 | * IP forwarding
164 |
165 | ```sysclt
166 | # /etc/sysctl.d/forward.conf
167 | net.ipv4.ip_forward=0
168 | ```
169 |
170 | * send_redirects; accept_redirects; secure_redirects
171 |
172 | ```sysctl
173 | # /etc/sysctl.d/redirects.conf
174 | net.ipv4.conf.all.send_redirects=0
175 | net.ipv4.conf.default.send_redirects=0
176 | net.ipv4.conf.default.accept_redirects=0
177 | net.ipv6.conf.all.accept_redirects=0
178 | net.ipv6.conf.default.accept_redirects=0
179 | net.ipv4.conf.all.secure_redirect=0
180 | net.ipv4.conf.default.secure_redirects=0
181 | ```
182 |
183 | * log_martians
184 |
185 | ```sysctl
186 | # /etc/sysctl.d/martians.conf
187 | net.ipv4.conf.all.log_martians=1
188 | net.ipv4.conf.default.log_martians=1
189 | ```
190 |
191 | * accept_ra (router advertisements)
192 |
193 | ```sysctl
194 | net.ipv6.conf.all.accept_ra=0
195 | net.ipv6.conf.default.accept_ra=0
196 | ```
197 |
198 | * lastly, after all that;
199 |
200 | ```shell
201 | sysctl --system
202 | # OR
203 | systemctl restart systemd-sysctl # this ought to pick this up on reboot...
204 | ```
205 |
206 | * ip6tables
207 |
208 | ```shell
209 | ip6tables -P INPUT DROP
210 | ip6tables -P OUTPUT DROP
211 | ip6tables -P FORWARD DROP
212 | ip6tables -I INPUT 1 -i lo -j ACCEPT
213 | ip6tables -I FORWARD 1 -i lo -j ACCEPT # needs to be validated
214 | ip6tables -I FORWARD 2 -o lo -j ACCEPT # needs to be validated
215 | ip6tables -I FORWARD 3 -i lo -o lo -j ACCEPT # needs to be validated
216 | ip6tables -I OUTPUT 1 -o lo -j ACCEPT
217 | ip6tables -A INPUT -s ::1 -j DROP
218 | ip6tables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
219 | ip6tables -A INPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
220 | ip6tables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
221 | ip6tables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT
222 | ip6tables -A INPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT
223 | ip6tables -A INPUT -p udp -m state --state ESTABLISHED -j ACCEPT
224 | ip6tables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED -j ACCEPT
225 | ip6tables -A INPUT -p icmp -m state --state NEW,ESTABLISHED -j ACCEPT
226 | ip6tables -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT
227 | ip6tables -A INPUT -p udp --dport 68 -j ACCEPT
228 | ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
229 |
230 | # Persist with something like (which may screw up container networking tools):
231 | systemctl enable --now ip6tables-store.service ip6tables-restore.service
232 | ```
233 |
234 | * iptables:
235 |
236 | ```shell
237 | iptables -P INPUT DROP
238 | iptables -P OUTPUT DROP
239 | iptables -P FORWARD DROP
240 | iptables -I INPUT 1 -i lo -j ACCEPT
241 | iptables -I FORWARD 1 -i lo -j ACCEPT # needs to be validated
242 | iptables -I FORWARD 2 -o lo -j ACCEPT # needs to be validated
243 | iptables -I FORWARD 3 -i lo -o lo -j ACCEPT # needs to be validated
244 | iptables -I OUTPUT 1 -o lo -j ACCEPT
245 | iptables -A INPUT -s 127.0.0.0/8 -j DROP
246 | iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
247 | iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
248 | iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
249 | iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT
250 | iptables -A INPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT
251 | iptables -A INPUT -p udp -m state --state ESTABLISHED -j ACCEPT
252 | iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED -j ACCEPT
253 | iptables -A INPUT -p icmp -m state --state NEW,ESTABLISHED -j ACCEPT
254 | iptables -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT
255 | iptables -A INPUT -p udp --dport 68 -j ACCEPT
256 | iptables -A INPUT -p tcp --dport 22 -j ACCEPT
257 |
258 | # Persist with something like (which may screw up container networking tools):
259 | systemctl enable --now iptables-store.service iptables-restore.service
260 | ```
261 |
262 | * rsyslog, configured like a host service
263 |
264 | ```Dockerfile
265 | # https://github.com/voxxit/dockerfiles/blob/master/rsyslog/Dockerfile
266 |
267 | FROM alpine:latest
268 |
269 | #FROM voxxit/base:alpine
270 | #MAINTAINER Joshua Delsman
271 |
272 | RUN apk add --update rsyslog \
273 | && rm -rf /var/cache/apk/*
274 |
275 | EXPOSE 514 514/udp
276 |
277 | VOLUME [ "/var/log", "/etc/rsyslog.d" ]
278 |
279 | # for some reason, the apk comes built with a v5
280 | # config file. using this one for v8:
281 | COPY ./etc/rsyslog.conf /etc/rsyslog.conf
282 |
283 | ENTRYPOINT [ "rsyslogd", "-n" ]
284 | ```
285 |
286 | ```rsyslog
287 | # rsyslog.conf
288 | #
289 | # if you experience problems, check:
290 | # http://www.rsyslog.com/troubleshoot
291 |
292 | $FileCreateMode 0640
293 |
294 | #### MODULES ####
295 |
296 | module(load="imuxsock") # local system logging support (e.g. via logger command)
297 | #module(load="imklog") # kernel logging support (previously done by rklogd)
298 | module(load="immark") # --MARK-- message support
299 | module(load="imudp") # UDP listener support
300 | module(load="imtcp") # TCP listener support
301 |
302 | input(type="imudp" port="514")
303 | input(type="imtcp" port="514")
304 |
305 | # Log all kernel messages to the console.
306 | # Logging much else clutters up the screen.
307 | kern.* action(type="omfile" file="/dev/console")
308 |
309 | # Log anything (except mail) of level info or higher.
310 | # Don't log private authentication messages!
311 | *.info;mail.none;authpriv.none;cron.none action(type="omfile" file="/var/log/messages")
312 |
313 | # The authpriv file has restricted access.
314 | authpriv.* action(type="omfile" file="/var/log/secure")
315 |
316 | # Log all the mail messages in one place.
317 | mail.* action(type="omfile" file="/var/log/maillog")
318 |
319 | # Log cron stuff
320 | cron.* action(type="omfile" file="/var/log/cron")
321 |
322 | # Everybody gets emergency messages
323 | *.emerg action(type="omusrmsg" users="*")
324 |
325 | # Save news errors of level crit and higher in a special file.
326 | uucp,news.crit action(type="omfile" file="/var/log/spooler")
327 |
328 | # Save boot messages also to boot.log
329 | local7.* action(type="omfile" file="/var/log/boot.log")
330 |
331 | #*.* @@loghost.example.com
332 |
333 | # Include all .conf files in /etc/rsyslog.d
334 | $IncludeConfig /etc/rsyslog.d/*.conf
335 | ```
336 |
337 | ```shell
338 | docker run -it --rm --entrypoint="" rsyslog cat /etc/rsyslog.conf > /etc/rsyslog.conf
339 | docker run -d -it --name rsyslog --restart=always --env TZ=UTC --cap-add SYSLOG -v /etc/rsyslog.conf:/etc/rsyslog.conf -v /var/log/:/var/log -v /etc/rsyslog.d:/etc/rsyslog.d -p 514:514/udp -p 514:514 rsyslog
340 | ```
341 |
342 | * journald
343 |
344 | ```shell
345 | sed -i 's/^#*ForwardToSyslog=.*$/ForwardToSyslog=yes/' /etc/systemd/journald.conf
346 | sed -i 's/^#*Compress=.*$/Compress=yes/' /etc/systemd/journald.conf
347 | sed -i 's/^#*Storage=.*$/Storage=persistent/' /etc/systemd/journald.conf
348 | systemctl restart systemd-journald
349 | ```
350 |
351 | * permissions of faillog and btmp
352 |
353 | ```shell
354 | chmod 0600 /var/log/faillog
355 | chmod 0600 /var/log/btmp
356 |
357 | # if they're wanting to be sure, then make a systemd unit that sets it on boot
358 | ```
359 |
360 | * sshd configs
361 |
362 | ```shell
363 | cat /etc/ssh/sshd_config > /tmp/sshd_config
364 | rm /etc/ssh/sshd_config
365 | mv /tmp/sshd_config
366 | chmod 0600 /etc/ssh/sshd_config
367 |
368 | # maybe sed -i 'd/...' to clean the file first?
369 | echo "Protocol 2" >> /etc/ssh/sshd_config
370 | echo "LogLevel VERBOSE" >> /etc/ssh/sshd_config
371 | echo "X11Forwarding no" >> /etc/ssh/sshd_config
372 | echo "MaxAuthTries 4" >> /etc/ssh/sshd_config
373 | echo "IgnoreRhosts yes" >> /etc/ssh/sshd_config
374 | echo "HostbasedAuthentication no" >> /etc/ssh/sshd_config
375 | echo "PermitRootLogin no" >> /etc/ssh/sshd_config
376 | echo "PermitEmptyPasswords no" >> /etc/ssh/sshd_config
377 | echo "PermitUserEnvironment no" >> /etc/ssh/sshd_config
378 | echo "Ciphers chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com" >> /etc/ssh/sshd_config
379 | echo "MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha2-512,umac-128-etm@openssh.com,umac-128@openssh.com" >> /etc/ssh/sshd_config
380 | echo "KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256" >> /etc/ssh/sshd_config
381 | echo "ClientAliveCountMax 0" >> /etc/ssh/sshd_config
382 | echo "LoginGraceTime 60" >> /etc/ssh/sshd_config
383 | echo "AllowGroups core" >> /etc/ssh/sshd_config
384 | cat > /etc/ssh/banner.txt <
387 | ------------------------------------
388 | \ ^__^
389 | \ (oo)\_______
390 | (__)\ )\/\
391 | ||----w |
392 | || ||
393 | EOF
394 | echo "Banner /etc/ssh/banner.txt" >> /etc/ssh/sshd_config
395 | echo "MaxStartups 10:30:60" >> /etc/ssh/sshd_config
396 | echo "MaxSessions 4" >> /etc/ssh/sshd_config
397 |
398 | systemctl restart sshd.service
399 | ```
400 |
401 | * pam
402 |
403 | ```shell
404 | ```
405 |
406 | * login.defs
407 |
408 | ```shell
409 | cat /etc/login.defs > /tmp/login.defs
410 | rm /etc/login.defs
411 | mv /tmp/login.defs /etc/login.defs
412 | chmod 0644 /etc/login.defs
413 |
414 | sed -i 's/^PASS_MAX_DAYS.*$/PASS_MAX_DAYS 365/' /etc/login.defs
415 | sed -i 's/^PASS_MIN_DAYS.*$/PASS_MIN_DAYS 7/' /etc/login.defs
416 | ```
417 |
418 | * useradd defaults
419 |
420 | ```shell
421 | cat /etc/default/useradd > /tmp/useradd
422 | rm /etc/default/useradd
423 | mv /tmp/useradd /etc/default/useradd
424 | chmod 0644 /etc/default/useradd
425 |
426 | sed -i 's/^INACTIVE.*$/INACTIVE=30/' /etc/default/useradd
427 | ```
428 |
429 | * umask for logins
430 |
431 | ```shell
432 | cat /etc/profile > /tmp/profile
433 | rm /etc/profile
434 | mv /tmp/profile /etc/profile
435 | chmod 0644 /etc/profile
436 |
437 | sed -i 's/^umask.*$/umask 027/' /etc/profile
438 | ```
439 |
440 | * passwd- permission
441 |
442 | ```shell
443 | chmod 0600 /etc/passwd-
444 | ```
445 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Code of Conduct
2 |
3 | We follow the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md).
4 |
5 | Please contact [private Maintainer mailing list](maintainers@flatcar-linux.org) or the Cloud Native Foundation mediator, conduct@cncf.io, to report an issue.
6 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing Guide
2 |
3 | * [New Contributor Guide](#contributing-guide)
4 | * [Ways to Contribute](#ways-to-contribute)
5 | * [Participate and contribute](#participate-and-contribute)
6 | * [Monthly Office hours and Developer Syncs](#Monthly-Office-hours-and-Developer-Syncs)
7 | * [Report bugs and request features](#Report-bugs-and-request-features)
8 | * [Pull Request Lifecycle](#pull-request-lifecycle)
9 | * [Development Environment Setup](#development-environment-setup)
10 | * [Git and Github](#Git-and-Github)
11 | * [Start coding](#Start-coding)
12 | * [Proposing new features](#Proposing-new-features)
13 | * [Authoring PRs](Authoring-PRs)
14 |
15 |
16 | Welcome! We are glad that you want to contribute to our project! 💖
17 |
18 | As you get started, you are in the best position to give us feedback on areas of
19 | our project that we need help with including:
20 |
21 | * Problems found during setting up a new developer environment
22 | * Gaps in our Quickstart Guide or documentation
23 | * Bugs in our automation scripts
24 |
25 | If anything doesn't make sense, or doesn't work when you run it, please open a
26 | bug report and let us know!
27 |
28 | ## Ways to Contribute
29 |
30 | [Instructions](https://contribute.cncf.io/maintainers/github/templates/required/contributing/#ways-to-contribute)
31 |
32 | We welcome many different types of contributions including:
33 |
34 | * New features
35 | * Builds, CI/CD
36 | * Bug fixes
37 | * Documentation
38 | * Issue Triage
39 | * Answering questions on Slack/Mailing List/Matrix
40 | * Web design, helping to maintain the Flatcar website
41 | * Communications / Social Media / Blog Posts
42 | * Release management
43 | * Evangelise the project in talks, presentations, and workshops
44 | * Coordinate work between Flatcar maintainers and upstream projects, for instance coordinating work items and planning project roadmaps in special sub-projects like Flatcar CAPI, or our sysext initiative
45 | * Work with contributors and maintainers to organise project-wide events like bug fixing or doc writing days, devrooms at conferences, community days / meetups, or even conferences
46 |
47 | Not everything happens through a GitHub pull request. Please come to our
48 | [meetings](### Monthly Office hours and Developer Syncs) or [contact us](maintainers@flatcar-linux.org) and let's discuss how we can work
49 | together.
50 |
51 | ## Participate and contribute
52 |
53 | If you are thinking of making a contribution, then please engage with the project as early as possible -- by commenting on an existing issue, or creating a new issue, on GitHub. Consider the project’s mission, and how your contribution furthers it.
54 | Making your intent visible early on can be a major factor for getting your work accepted.
55 |
56 | You can reach contributors and maintainers via
57 |
58 | * Our matrix chat (via element.io): https://app.element.io/#/room/#flatcar:matrix.org
59 | * Our Slack channel in the Kubernetes Slack org: https://kubernetes.slack.com/archives/C03GQ8B5XNJ
60 | * By engaging in or starting a new Github Discussion: https://github.com/flatcar/Flatcar/discussions
61 |
62 | Though Matrix and Github discussions are encouraged and the preferred way to interact with the Flatcar community, we also maintain mailing lists for Flatcar users and developers:
63 | * Flatcar Users: https://groups.google.com/g/flatcar-linux-user
64 | * Flatcar Devs: https://groups.google.com/g/flatcar-linux-dev
65 |
66 |
67 | ### Monthly Office hours and Developer Syncs
68 |
69 | We maintain a [Google Calendar](https://calendar.google.com/calendar/u/0/embed?src=c_ii991mqrpta9en8o7ofd4v19g4@group.calendar.google.com) ([iCal](https://calendar.google.com/calendar/ical/c_ii991mqrpta9en8o7ofd4v19g4%40group.calendar.google.com/public/basic.ics)) with both our Office Hours and Developer Sync meeting series which interested folks can comfortably import into the calendar app of their choice.
70 |
71 | Join us in our monthly [office hours meetings](../../discussions/categories/office-hours-agenda) to engage with the Flatcar User community interactively, to learn about the project's directions, and to discuss contributions. We also conduct the occasional user-focused demo of technologies related to image-based Linux.
72 | Lastly, the call includes a brief Release Planning with an update on the changes in the next immediate releases.
73 |
74 | If you'd like to share something or if you have a pressing issue you'd like discussed, please let us know.
75 | Either comment on the respective meeting discussion, reach out to us on Matrix (see below), or simply join the meeting and speak up in the meeting's Q&A.
76 |
77 | **Flatcar Office Hours are on the second Tuesday of every month at 3:30pm UTC**
78 |
79 | The meeting time observes the Central European Time zone and is subject to summer time changes.
80 | It occurs at 3:30pm UTC, which may fluctuate in your timezone if you observe daylight saving time.
81 |
82 | Meeting agendas are published in advance - check our [discussions section](../../discussions/categories/office-hours-agenda) for examples.
83 | * Video call link: [https://meet.flatcar.org/OfficeHours](https://meet.flatcar.org/OfficeHours)
84 | * A Youtube live stream (which also serves as the meeting's recording) will be published on the respective agenda when a meeting starts.
85 |
86 | **Flatcar Developer Syncs commence every 4th Tuesday of a month at 3:30 UTC**
87 |
88 | The meeting time observes the Central European Time zone and is subject to summer time changes.
89 | It occurs at 3:30pm UTC, which may fluctuate in your timezone if you observe daylight saving time.
90 |
91 |
92 | While release planning is a recurring part of each community call we also conduct separate Developer Syncs for backlog grooming and task planning. We discuss Roadmap items, special projects, and day-to-day issues in these calls. If you want to participate and discuss or pick up work, that call is for you!
93 | Just like the Office Hours the call includes a brief Release Planning with an update on the changes in the next immediate releases.
94 |
95 | * Meeting agendas are published in advance - check our [discussions section](../../discussions/categories/flatcar-developer-sync) for examples.
96 | * Call link: [https://meet.flatcar.org/OfficeHours](https://meet.flatcar.org/OfficeHours)
97 | * A youtube live stream (which also serves as the meeting's recording) will be published on the respective agenda when a meeting starts.
98 |
99 | ## Report bugs and request features
100 |
101 | Please file a respective [issue](issues) right here in the top-level Flatcar github project.
102 | For instance, please use the "New Package Request" issue type to [file your request](https://github.com/flatcar/Flatcar/issues/new/choose). Please see [adding new packages to the Flatcar Linux OS image](adding-new-packages.md) for general guidelines.
103 |
104 | We have good first issues for new contributors and help wanted issues suitable for any contributor. [good first issue](https://github.com/flatcar/Flatcar/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) has extra information to help you make your first contribution. [help wanted](TODO) are issues suitable for someone who isn't a core maintainer and is good to move onto after
105 | your first pull request.
106 |
107 | Sometimes there won’t be any issues with these labels. That’s ok! There is likely still something for you to work on. If you want to contribute but you don’t know where to start or can't find a suitable issue, you can ⚠️ **explain how people can ask for an issue to work on**.
108 |
109 | Once you see an issue that you'd like to work on, please post a comment saying
110 | that you want to work on it. Something like "I want to work on this" is fine.
111 |
112 | ## Pull Request Lifecycle
113 |
114 | Pull requests may be issued from repository branches or from a fork of the repo.
115 | Branch PRs are limited to Maintainers since these require write access to the respective repository.
116 | While the origin of a PR may have impact on the approvals required for the CI to build and test, the project does not discriminate PR origins regarding getting a change reviewed or merged.
117 |
118 | PRs need to undergo a successful build+test as well as a review, and require at least one LGTM from a maintainer who is not the author of the PR for a merge.
119 | Note that the approver(s) of a PR may be co-authors though - this allows reviewers to suggest changes.
120 |
121 | A PR undergoes the following stages:
122 | 1. PR filed.
123 | This includes filing "draft" PRs which are not considered ready for review and will only undergo build+test when explicitly requested.
124 | 2. PR is ready for review.
125 | In this stage, maintainers can start reviewing the PR as well as approve build+test runs.
126 | PRs can be filed in this stage if the author considers the PR ready at the time of creation.
127 | To generate traction on stale PRs, authors or project coordinators may actively reach out to the maintainers team, e.g via the Matrix channel or in office hours and developer syncs.
128 | 3. PR is being reviewed.
129 | Maintainers add comments and may request changes.
130 | Reviewers may also add change suggestions, streamlining the review process for the author.
131 | During review, the PR is also vetted against Flatcar's mission statement and our core principles.
132 | Multiple build + test runs may be approved by maintainers to further validate the PR.
133 | 4. PR is being merged, or closed w/o merge.
134 | Depending on the outcome of the review, the PR is being merged or closed without a merge.
135 |
136 | ## Development Environment Setup
137 | For an introduction to the Flatcar SDK and a walk-through of common developer cases like customising the OS image (e.g. adding or upgrading packages), have a look at our [developer guides](https://www.flatcar.org/docs/latest/reference/developer-guides/); particularly the [howto on building custom images from source](https://www.flatcar.org/docs/latest/reference/developer-guides/sdk-modifying-flatcar/).
138 | The guides aim to provide a solid base for working with the SDK to help you filing successful PRs to the Flatcar project.
139 |
140 | # Git and Github
141 |
142 | This section has the guidelines we use to keep consistency across our different
143 | Git repositories and Github projects.
144 |
145 | ## Start coding
146 |
147 | If you're looking where to start, you can check the issues with the
148 | `good first issue` label. Other labels will be used that may be more related to
149 | the projects themselves, so don't hesitate to get in touch with the developers
150 | if you need more guidance on how to start contributing to our projects.
151 |
152 | ## Proposing new features
153 |
154 | If you want to propose a new feature (e.g adding a package) or do a big change
155 | in the architecture it is highly recommended to open an issue first to discuss
156 | it with the community.
157 |
158 | ## Authoring PRs
159 |
160 | These are general guidelines for making PRs/commits easier to review:
161 |
162 | * Commits should be atomic and self-contained. Divide logically separate changes
163 | to separate commits. This principle is best explained in the the Linux Kernel
164 | [submitting patches][linux-sep-changes] guide.
165 |
166 | * Commit messages should explain the intention, _why_ something is done. This,
167 | too, is best explained in [this section][linux-desc-changes] from the Linux
168 | Kernel patch submission guide.
169 |
170 | * Commit titles (the first line in a commit) should be meaningful and describe
171 | _what_ the commit does.
172 |
173 | * Don't add code you will change in a later commit (it makes it pointless to
174 | review that commit), nor create a commit to add code an earlier commit should
175 | have added. Consider squashing the relevant commits instead.
176 |
177 | * It's not important to retain your development history when contributing a
178 | change. Use `git rebase` to squash and order commits in a way that makes them easy to
179 | review. Keep the final, well-structured commits and not your development history
180 | that led to the final state.
181 |
182 | * Consider reviewing the changes yourself before opening a PR. It is likely
183 | you will catch errors when looking at your code critically and thus save the
184 | reviewers (and yourself) time.
185 |
186 | * Use the PR's description as a "cover letter" and give the context you think
187 | reviewers might need. Use the PR's description to explain why you are
188 | proposing the change, give an overview, raise questions about yet-unresolved
189 | issues in your PR, list TODO items etc.
190 |
191 | PRs which follow these rules are easier to review and merge.
192 |
193 | [linux-sep-changes]: https://www.kernel.org/doc/html/v4.17/process/submitting-patches.html#separate-your-changes
194 | [linux-desc-changes]: https://www.kernel.org/doc/html/v4.17/process/submitting-patches.html#describe-your-changes
195 |
196 | ### Commit Format
197 |
198 | ```
199 | :
200 |
201 | Detailed information about the commit message goes here
202 | ```
203 |
204 | Both the title and the body of the commit message shoud not exceed
205 | 72 characters in length. i.e. Please keep the title length under 72
206 | characters, and the wrap the body of the message at 72 characters.
207 |
208 | Separate the title and the body by 1 empty line.
209 |
210 | Use the [imperative mood](https://chris.beams.io/posts/git-commit/#imperative)
211 | for the title, and don't add a period at the end.
212 |
213 | For the commit's message body, a period should come at the end of each
214 | sentence (unless the line is not a regular sentence, e.g. code).
215 |
216 | Here is an example of commit messages:
217 |
218 | Good:
219 | ```
220 | app-shells/bash: update ebuild to 5.3
221 |
222 | Gentoo upstream has unmasked bash 5.3 and declared it stable.
223 | This change updates the component to use the latest upstream ebuild.
224 | ```
225 |
226 | Bad:
227 | ```
228 | Update bash
229 |
230 | Updated bash to the latest one.
231 | ```
232 |
--------------------------------------------------------------------------------
/EMERITUS_MAINTAINERS.md:
--------------------------------------------------------------------------------
1 | # Flatcar Container Linux Emeritus Maintainers
2 |
3 | This file lists contributors to the Flatcar project whose maintainership rests.
4 | It is meant to provide a fast-track back to active maintainer status should the emeritus decide to do so.
5 |
6 |
7 | * William Light [@wrl](https://github.com/wrl)
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/MAINTAINERS.md:
--------------------------------------------------------------------------------
1 | # Maintainers
2 |
3 | See [Governance](https://github.com/flatcar/Flatcar/blob/main/governance.md) for governance, commit, and vote guidelines as well as maintainer responsibilities. Everybody listed in this file is a maintainer as per governance definition.
4 |
5 |
6 | ## Repositories
7 |
8 | ### Flatcar
9 | maintainers:
10 | * Thilo Fromm @t-lo
11 |
12 | ### scripts
13 | maintainers:
14 | * Kai Lüke @pothos
15 | * Gabriel Samfira @gabriel-samfira
16 | * Thilo Fromm @t-lo
17 | * Krzesimir Nowak @krnowak
18 | * Adrian Vladu @ader1990
19 | * Dongsu Park @dongsupark
20 | * Mathieu Tortuyaux @tormath1
21 | * Sayan Chowdhury @sayanchowdhury
22 | * Jeremi Piotrowski @jepio
23 | * James Le Cuirot @chewi
24 |
25 | ### Nebraska
26 | maintainers:
27 | * Ervin Racz @ErvinRacz
28 |
29 | ### flatcar-website
30 | maintainers:
31 | * Kai Lüke @pothos
32 | * Thilo Fromm @t-lo
33 | * Mathieu Tortuyaux @tormath1
34 |
35 | ### mantle
36 | maintainers:
37 | * Mathieu Tortuyaux @tormath1
38 |
39 | ### locksmith
40 | maintainers:
41 | * Mathieu Tortuyaux @tormath1
42 |
43 | ### update_engine
44 | maintainers:
45 | * Kai Lüke @pothos
46 | * Dongsu Park @dongsupark
47 |
48 | ### ue-rs
49 | maintainers:
50 | * Kai Lüke @pothos
51 | * Dongsu Park @dongsupark
52 |
53 | ### flatcar-linux-update-operator
54 | maintainers:
55 | * Mateusz Gozdek @invidian
56 |
57 | ### init
58 | maintainers:
59 | * Kai Lüke @pothos
60 |
61 | ### bootengine
62 | maintainers:
63 | * Kai Lüke @pothos
64 | * James Le Cuirot @chewi
65 |
66 | ### container-linux-config-transpiler
67 | maintainers:
68 | * Jeremi Piotrowski @jepio
69 |
70 | ### ign-converter
71 | maintainers:
72 | * Mathieu Tortuyaux @tormath1
73 |
74 | ### baselayout
75 | maintainers:
76 | * Kai Lüke @pothos
77 |
78 | ### sysext-bakery
79 | maintainers:
80 | * Kai Lüke @pothos
81 |
82 | ### flatcar-tutorial
83 | maintainers:
84 | * Mathieu Tortuyaux @tormath1
85 |
86 | ### flatcar-app-minecraft
87 | maintainers:
88 | * Jan Bronicki @John15321
89 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | [](https://www.flatcar.org/)
4 | [](https://app.element.io/#/room/#flatcar:matrix.org)
5 | [](https://kubernetes.slack.com/archives/C03GQ8B5XNJ)
6 | [](https://x.com/flatcar)
7 | [](https://hachyderm.io/@flatcar)
8 | [](https://bsky.app/profile/flatcar.org)
9 |
10 |
11 |
12 | # Flatcar Container Linux
13 |
14 | ## Mission statement
15 |
16 | _Flatcar Container Linux is a fully open source, minimal-footprint, secure by default and always up-to-date Linux distribution for running containers at scale._
17 |
18 | ## Code of Conduct
19 |
20 | We follow the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md).
21 |
22 | Please contact [private Maintainer mailing list](maintainers@flatcar-linux.org) or the Linux Foundation mediator, Mishi Choudhary mishi@linux.com
23 | to report an issue.
24 |
25 | ## Releases
26 |
27 | See the [project website](https://www.flatcar.org/) for information about [current releases](https://www.flatcar.org/releases).
28 |
29 | ## Install and operate Flatcar
30 |
31 | Flatcar Container Linux has a dedicated [documentation site](https://www.flatcar.org/docs/latest/).
32 |
33 | The getting started guide has further links to the topics Ignition, local testing with QEMU, controlling automatic updates, and usage with cloud providers:
34 |
35 | * [Getting started](https://www.flatcar.org/docs/latest/installing/)
36 |
37 | **Does Flatcar run in my environment?** Consult the [interop-matrix](interop-matrix.md).
38 |
39 | **Does Flatcar have CIS Benchmarks?** Consult the [CIS reports](CIS/README.md).
40 |
41 | ## Report bugs and request features
42 |
43 | If you hit a bug, or have a feature request, please [file an issue](https://github.com/flatcar/Flatcar/issues/new/choose) right here in this github project.
44 | Please select the appropriate issue type to help us triage incoming requests. For example, if you would like a new package to be added to the base Flatcar image, use the "New Package Request" issue type. (In that specific case, please also see [adding new packages to the Flatcar Linux OS image](adding-new-packages.md) for general guidelines.)
45 |
46 | ### Chat
47 |
48 | For quick questions or for just hanging out with the community please use
49 | * Our matrix chat (via element.io): [https://app.element.io/#/room/#flatcar:matrix.org](https://app.element.io/#/room/#flatcar:matrix.org)
50 | * Our Slack channel in the Kubernetes Slack org: https://kubernetes.slack.com/archives/C03GQ8B5XNJ
51 |
52 | ### Discussions
53 |
54 | For more far-reaching topics please have a look at our [discussions](https://github.com/flatcar/Flatcar/discussions). Feel free to open a new discussion if you don't find an existing one covering your topic.
55 |
56 | ### Mailing lists
57 |
58 | Though the use of Github Discussions is encouraged (see above), we also maintain groups / mailing lists for a more old-fashioned way of having a discussion. Please note that we might consider to discontinue these mailing lists at some point in the future.
59 | * Flatcar Users: https://groups.google.com/g/flatcar-linux-user
60 | * Flatcar Devs: https://groups.google.com/g/flatcar-linux-dev
61 |
62 | ### Social Media/Fediverse
63 |
64 | You can follow the [Flatcar Mastodon account](https://hachyderm.io/@flatcar). While Mastodon, as an open platform, is our preferred social media channel, we also have an [account on X](https://x.com/flatcar).
65 |
66 | ## Participate and contribute
67 |
68 | If you are thinking of making a contribution, then please engage with the project as early as possible -- by commenting on an existing issue, or creating a new issue, on GitHub. Consider the project’s mission, and how your contribution furthers it.
69 | Making your intent visible early on can be a major factor for getting your work accepted.
70 |
71 | For the general guidelines on making PRs/commits easier to review, please check out the project's [contribution guidelines](CONTRIBUTING.md).
72 |
73 | For an introduction to the Flatcar SDK and a walk-through of common developer cases like customising the OS image (e.g. adding or upgrading packages), have a look at our [developer guides](https://www.flatcar.org/docs/latest/reference/developer-guides/); particularly the [howto on building custom images from source](https://www.flatcar.org/docs/latest/reference/developer-guides/sdk-modifying-flatcar/).
74 | The guides aim to provide a solid base for working with the SDK to help you filing successful PRs to the Flatcar project.
75 |
76 | ### Becoming a maintainer
77 |
78 | The Flatcar maintainer path is laid out in our [governance document](governance.md).
79 |
80 | ## Project status and roadmap - What's everybody working on, right now and in the future?
81 |
82 | 1. short-term concerns (bugs and minor enhancements) enter the project via our [issue tracker](https://github.com/flatcar/Flatcar/issues)
83 | 2. our [tactical board](https://github.com/orgs/flatcar/projects/7/views/1) reflects the issues and PRs the maintainers and the contributors are currently engaged with
84 | 3. items which are done will be assigned to an upcoming release on the [release board](https://github.com/orgs/flatcar/projects/7/views/8)
85 | in our release planning calls
86 |
87 | Lastly, epics like major features and long-term items are reflected in our [roadmap board](https://github.com/orgs/flatcar/projects/7/views/9).
88 |
89 | Check out our Matrix and Slack channels (mentioned above) for getting into contact with maintainers, and consider joining our Flatcar Developer Sync (next section below) where contributors and maintainers coordinate our work.
90 |
91 | ### Monthly Office hours and Developer Syncs
92 |
93 | We maintain a [Google Calendar](https://calendar.google.com/calendar/u/0/embed?src=c_ii991mqrpta9en8o7ofd4v19g4@group.calendar.google.com) ([iCal](https://calendar.google.com/calendar/ical/c_ii991mqrpta9en8o7ofd4v19g4%40group.calendar.google.com/public/basic.ics)) with both our Office Hours and Developer Sync meeting series which interested folks can comfortably import into the calendar app of their choice.
94 |
95 | Join us in our monthly [office hours meetings](../../discussions/categories/flatcar-office-hours) to engage with the Flatcar User community interactively, to learn about the project's directions, and to discuss contributions. We also conduct the occasional user-focused demo of technologies related to image-based Linux.
96 | Lastly, the call includes a brief Release Planning with an update on the changes in the next immediate releases.
97 |
98 | If you'd like to share something or if you have a pressing issue you'd like discussed, please let us know.
99 | Either comment on the respective meeting discussion, reach out to us on Matrix (see below), or simply join the meeting and speak up in the meeting's Q&A.
100 |
101 | **Flatcar Office Hours are on the second Wednesday of every month at 2:30pm UTC**
102 |
103 | * Meeting agendas are published in advance - check our [discussions section](../../discussions/categories/flatcar-office-hours) for examples.
104 | * Call link: [https://meet.flatcar.org/OfficeHours](https://meet.flatcar.org/OfficeHours)
105 | * A Youtube live stream (which also serves as the meeting's recording) will be published on the respective agenda when a meeting starts.
106 |
107 |
108 | **Flatcar Developer Syncs commence every 4th Wednesday of a month at 2:30pm UTC**
109 |
110 | While release planning is a recurring part of each community call we also conduct separate Developer Syncs for backlog grooming and task planning. We discuss Roadmap items, special projects, and day-to-day issues in these calls. If you want to participate and discuss or pick up work, that call is for you!
111 | Just like the Office Hours the call includes a brief Release Planning with an update on the changes in the next immediate releases.
112 |
113 | * Meeting agendas are published in advance - check our [discussions section](../../discussions/categories/flatcar-developer-sync) for examples.
114 | * Call link: [https://meet.flatcar.org/OfficeHours](https://meet.flatcar.org/OfficeHours)
115 | * A youtube live stream (which also serves as the meeting's recording) will be published on the respective agenda when a meeting starts.
116 |
117 | ## Release process
118 |
119 | Flatcar Container Linux follows an Alpha-Beta-Stable release process. New features and major version upgrades will enter the Alpha channel for initial testing, then transition to Beta, before landing in Stable.
120 |
121 | Note that unlike features, bug fixes for any release channel will be released to that respective channel directly, i.e. Alpha bug fixes will be included in the next Alpha, Beta fixes will directly go to Beta, and Stable fixes will be released with the next Stable.
122 |
123 | We plan our releases in a 14-day cadence. The maintainer team holds fortnightly release meetings - both as recurring part of our monthly [community calls](tree/main/community-meetings/) as well as a separate meeting in-between the monthly community call cadence. Up-to-date planning status is reflected in our [release planning board](https://github.com/orgs/flatcar/projects/7).
124 |
125 | ### LTS
126 |
127 | Some users prefer to avoid the operational impact of frequent version upgrades.
128 | For such users, the Flatcar project provides an "LTS channel".
129 | The LTS channel / branch is based on a "golden Stable" and is maintained for 18 months.
130 | A new LTS is branched from Stable every 12 months, leaving a 6 months window for LTS users to upgrade.
131 |
132 | ## Project governance
133 |
134 | Flatcar is a community-driven project, with community members participating through the following forums:
135 |
136 | * Contributors.
137 | * Maintainers.
138 |
139 | Every participant of the open source project - bug reporter, feature requester, code contributor - is considered a contributor.
140 |
141 | Maintainers have commit access to one or more repositories and help govern the project, driving it forward and maintaining its scope and vision.
142 | Please find more details in our [governance doc](governance.md).
143 |
144 | ## Repositories
145 |
146 | The github repositories that comprise Flatcar Container Linux can be found via the [organization](https://github.com/flatcar) page.
147 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Flatcar Security
2 | To keep Flatcar secure, the maintainers put a strong focus on tracking new and existing security issues.
3 | Dealing with Security concerns is owned by the [Flatcar Security team](https://github.com/orgs/flatcar/teams/flatcar-security-team), a sub-set of the Maintainers team, and elected by the Maintainers (see [governance.md](./governance.md)).
4 |
5 | While the team actively researches and tracks new and existing security issues, it may also be notified of issues via [security@flatcar-linux.org](mailto:security@flatcar-linux.org).
6 |
7 | The Security team meets in a fortnightly cadence, in a private video call.
8 | The team maintains an internal list of security Primaries and Secondaries, which are rotated on a weekly basis.
9 | Primary and Secondary are expected to actively engage in security work each day, including executing the Runbook (see below) and working on fixing ongoing security issues.
10 |
11 | Undisclosed security issues are tracked in a private repository only accessible by members of the security team.
12 | Public issues are tracked publicly in the project's main issue tracker.
13 |
14 | Security issues are addressed by releasing an updated OS image. Releases may be expedited depending on the issues' severity. For each release, release notes contain a concise list of security issues fixed. Also, a separate, detailed report on each of the issues addressed is part of every release.
15 |
16 | ## Daily security runbook for Security team primaries and secondaries
17 |
18 | The runbook below discusses steps for identifying new potential security issues and for making the issues known to the Flatcar project's maintainers and / or the other members of the Security team.
19 |
20 | Primaries are expected to execute the runbook at least once per day, optionally assisted or off-loaded by Secondaries.
21 |
22 | Every day look into upstream security trackers like below:
23 | - Gentoo security vulnerabilities. It might be useful to use gorss + RSS feed for this.
24 | - oss-security mailing list
25 | - Golang announce mailing list
26 | - Rust security announcements
27 | - (optional) issue trackers of other distros
28 | - Whenever we discover any new CVE, we add it to an internal database, and use automation tools to create a new issue about the CVE in [Flatcar GitHub issues](https://github.com/Flatcar/Flatcar/issues) with labels `security` and `advisory`.
29 | - If an issue of updating the specific package affected by the new CVE is already open in [Flatcar GitHub issues](https://github.com/Flatcar/Flatcar/issues), then unfortunately we need to manually edit the existing issue to add the new CVE.
30 |
--------------------------------------------------------------------------------
/adding-new-packages.md:
--------------------------------------------------------------------------------
1 | # Proposing new packages for inclusion into Flatcar Container Linux
2 |
3 | Flatcar Container Linux is a modern Linux distribution for running container workloads.
4 | To stay modern, the packages included need to be kept up-to-date, and sometimes new packages introduced.
5 | This documents explains the process for the latter.
6 |
7 | ## Project definition
8 |
9 | When proposing new packages for inclusion into Flatcar Container Linux, it's important to keep in mind how the project defines itself:
10 | _Flatcar Container Linux is a fully open source, minimal-footprint, secure by default and always up-to-date Linux distribution for running containers at scale._
11 |
12 | ## New package criteria
13 |
14 | As a minimal Linux distribution, the tools and applications included in Flatcar Container Linux are to be kept to a minimum.
15 | This is to reduce both the image size and attack surface.
16 | Package addition requests are evaluated with this in mind.
17 | Other criteria that are weighed are the following.
18 |
19 | - ***Secure by default***: Does the package increase the security of Flatcar?
20 | - ***Always up-to-date***: Is the package actively maintained?
21 | - ***Running containers***: Does the package make Flatcar more relevant for container environments?
22 | - ***At scale***: Does the package improve automation of or telemetry served by Flatcar and/or ease operational burden?
23 |
24 | ## How to propose a package for inclusion
25 |
26 | In order to propose a new package for inclusion, [open an issue using the "New Package Request" template](https://github.com/flatcar/Flatcar/issues/new?assignees=&labels=kind%2Fnew-package&template=new-package-request.md&title=New+Package+Request%3A+%5Bpackage-name%5D).
27 |
--------------------------------------------------------------------------------
/attic/community-meetings/2021-05-11-slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flatcar/Flatcar/e1f2e41bcb0ae40e721ce9d355cdb42f5dcb32c2/attic/community-meetings/2021-05-11-slides.pdf
--------------------------------------------------------------------------------
/attic/community-meetings/2021-05-11.md:
--------------------------------------------------------------------------------
1 | # Flatcar community call Tuesday, 11th of May, 17:30 CEST
2 |
3 | - [Slide deck](2021-05-11-slides.pdf)
4 | - Youtube recording: [https://youtu.be/YBfq2fcjp8E](https://youtu.be/YBfq2fcjp8E)
5 |
6 | # Call Agenda
7 |
8 | ## Welcome
9 | - Introduction to the new community meetings
10 | - Meet the team
11 | - Review agenda
12 | - Introduction: Brief intro of the team and community members participating in the call
13 |
14 | ## Flatcar Interoperability
15 | Review of our work on interoperability and how we plan to track/report
16 |
17 | ## Upcoming releases
18 | We give a brief overview of upcoming releases and the features included.
19 |
20 | ## Spotlight: CAPI
21 | Details on our ClusterAPI work so far and future plans
22 |
23 | ## Community Q&A
24 | Open Q&A / discussion
25 |
26 |
27 | # Call Minutes
28 |
29 | The meeting largely followed the [slide deck](2021-05-11-slides.pdf). After the presentation, community participants raised a total of 3 questions.
30 |
31 | 1. The Flatcar team, Thilo, Sayan, Marga, Dongsu, Mathieu, Andy, Kai, and Iago introduce themselves.
32 | 2. Andy briefly addresses the future of Flatcar following Kinvolk's acquisition by Microsoft.
33 | - “[...] we want to assure the Flatcar community that Microsoft and the Kinvolk team will continue to collaborate with the larger Flatcar community on the evolution of Flatcar Container Linux.” - Brendan Burns, Microsoft
34 | - “This will not be a replay of the movie you’ve seen before. In fact, we and Microsoft are committed to doubling down on the Flatcar community: we want to expand the universe of partners, contributors, and users, to ensure a vibrant, successful and sustainable long-term future for Flatcar as a truly open, community-driven project.” - Chris Kühl, Kinvolk
35 | 3. Thilo introduces monthly community calls and the new community focus of the Flatcar project, overcoming and leaving behind its single vendor past.
36 | 4. Marga introduces the [interop matrix](../interop-matrix.md) as a means to track Flatcar's support of runtime environments (clouds, on premise, etc.).
37 | - Some environments, while supported, do not currently have an owner.
38 | - The project aims to have community owners who operate workloads / clusters in the respective environments, in the long term.
39 | 5. Andy elaborates on Flatcar's core philosophy and shares details on stabilisation process and on release cadence.
40 | - Alpha introduces new major versions, which then transition to Beta and Stable. Not every Alpha is promoted to Beta, not every Beta becomes Stable.
41 | - Frequent Alpha releases, every 2 weeks on average.
42 | - Beta release for (typically) every second Alpha, with patch releases in between.
43 | - Stable releases roughly every 2 months.
44 | - "golden" Stable to become LTS once a year.
45 | 6. Sayan summarises the last round of releases, and provides an outlook of upcoming releases.
46 | - April 28th round shipped new major Alpha (2857.0.0) and Beta (2823.1.0) versions, and patch level updates to Stable (2765.2.3) and to LTS (2605.15.1).
47 | - Alpha release removes `rkt` and `kubelet-wrapper`. The changes will transition to Beta in June, and to Stable in July.
48 | - Upcoming May 19th releases will ship a new major Alpha (2879.0.0) and patch level updates to Beta, Stable, and LTS.
49 | 7. Dongsu provide an overview of ClusterAPI, and elaborates on our work to add Flatcar support to CAPI.
50 | - CAPI utilises a management cluster to deploy workload clusters on a variety of inrastructure providers.
51 | - Adding OS support for providers requires a separate implementation for each; there is no unified standard for OS config.
52 | - OS images are provided via the ClusterAPI Image Builder project.
53 | - Workload clusters are provisioned via the ClusterAPI Bootstrap provider.
54 | - Current Flatcar status:
55 | - QEmu and AWS OS images supported for Flatcar in Image builder.
56 | - Bootstrap (kubeadm) Ignition support added to enable Flatcar OS config.
57 | - AWS provider Ignition support added to enable Flatcar OS config.
58 | - Future plans:
59 | - support other cloud providers (Metal3, Azure, vSphere, Tinkerbell, Equinix Metal)
60 | 8. Thilo shares call for action to the community to join the project
61 |
62 | ## Q&A
63 |
64 | - Q: **What's the relationship between ClusterAPI and Lokomotive?**
65 | - Iago: Currently, no direct relation. We plan to investigate using parts of CAPI in the future, e.g. provisioning, but we do not plan to support the full-blown management / workload clusters pattern at this time.
66 |
67 | - Q: **here seems to be a lack of bare metal deployments / supported platforms in the compatibility matrix - is this intentional? Do we exepct Flatcar to "just work" since it's using Linux? Is there potential to add bare metal platforms (we use / plan to use Flatcar primarily on bare metal)?**
68 | - Thilo: It's Linux, as long as it PXE boots, you should be fine.
69 | - Andy: Are we discussing a hardware compatibility list?
70 | - Jannik: Not quite, however since we'll be running on bare metal we'll also test our bare metal. We're willing to support the community for our use cases.
71 | - Vincent: Currently, if you run into issues it's best to just open a ticket. If you'd like to expose your work to the community (test results etc.) you're of course welcome to do so!
72 | - Kai: We cover bare metal PXE boot / ignition config implicitly by our Equinix Metal workloads / CI / release tests. Lokomotive also maintains a bare metal CI test which covers PXE boots and deployments.
73 | - Marga: It's a good point that our interop matrix currently does not discuss hardware support at all. For instance, it's tribal knowledge that Flatcar boots on Rasperry Pi (with some tweaks), but that's not documented anywhere.
74 | - Andy: This might be something we should involve the larger community with, e.g. establishing a hardware interop list for users' existing deployments. Individual users then could volunteer to keep that list up to date for new releases since they'd be testing the release on their hardware anyway.
75 | - Jannik: We could use the hardware interop doc to also share tweaks / notes for specific environments more easily.
76 |
77 | - Q: **Can you talk about ARM64 support? There's Alpha support, but what's the path to Beta and Stable?**
78 | - Thilo: It's work in progress, we staffed / resourced this concern very recently. Some plumbing level and package upgrades are necessary to make things work for Stable, these are being worked on as we speak.
79 | - Kai: A number of system components' tests are currently failing. We're also interested in hardware enablement, i.e. getting feedback on our ARM64 kernel config / modules on different ARM64 platforms. Other than that, it's about ensuring our release tests pass.
80 | - Thilo: We need to discuss this in terms of support levels - you could go ahead and use Alpha ARM64 support today, there are no deal breakers we know of - it will support your workload.
81 | It just won't support the entire range of Flatcar features, and some boot-up units might fail (SELinux in particular).
82 | We're working on bringing up these components on ARM64.
83 |
--------------------------------------------------------------------------------
/attic/community-meetings/2021-06-08-slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flatcar/Flatcar/e1f2e41bcb0ae40e721ce9d355cdb42f5dcb32c2/attic/community-meetings/2021-06-08-slides.pdf
--------------------------------------------------------------------------------
/attic/community-meetings/2021-06-08.md:
--------------------------------------------------------------------------------
1 | # Flatcar community call Tuesday, 8th of June, 17:30 CEST
2 |
3 | - [Slide deck](2021-06-08-slides.pdf)
4 | - Youtube recording: [https://www.youtube.com/watch?v=cZ4o-ZD6r10&t=235s](https://www.youtube.com/watch?v=cZ4o-ZD6r10&t=235s)
5 |
6 | ## Welcome
7 | - Brief intro / check-in of all participants in the Zoom call. Please introduce yourself and share what brings you here today.
8 | - Review the meeting agenda.
9 |
10 | ## Spotlight: Nebraska update server
11 | - Brief presentation of Flatcar’s open source update server.
12 |
13 | ## Spotlight: Nightlies, Tests, and Releases
14 | - Brief presentation of Flatcar’s test and releases process.
15 |
16 | ## Status update: ARM64
17 | - What’s done, what’s missing, and how to help.
18 |
19 | ## Releases review & planning
20 | - We share details of the May 19th release, some bumps encountered.
21 | - We plan the next releases, including new features, bug fixes, and related PRs.
22 |
23 | ## Q&A
24 | - Questions from community participants, answered by the Flatcar maintainers.
25 |
26 |
27 | # Call Minutes
28 |
29 | As usual, the meeting minutes will be added here after the call.
30 | [tbd.]
31 |
32 | ## Q&A
33 |
34 | No questions this time.
35 |
--------------------------------------------------------------------------------
/attic/community-meetings/2021-07-13-slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flatcar/Flatcar/e1f2e41bcb0ae40e721ce9d355cdb42f5dcb32c2/attic/community-meetings/2021-07-13-slides.pdf
--------------------------------------------------------------------------------
/attic/community-meetings/2021-07-13.md:
--------------------------------------------------------------------------------
1 | # Agenda for the Flatcar community call on Tuesday, 13th of July, 17:30 CEST
2 |
3 | ## Links for participants
4 | - [Slide deck](2021-07-13-slides.pdf)
5 | - Youtube live stream link (for passively watching): [http://www.youtube.com/watch?v=jcwH4ZTrXnk](http://www.youtube.com/watch?v=jcwH4ZTrXnk)
6 |
7 | ## Welcome
8 | - Brief intro / check-in of all participants in the Zoom call. Please introduce yourself and share what brings you here today.
9 | - Review the meeting agenda.
10 |
11 | ## Spotlight: Flatcar Release Process
12 | - We will be talking about the Flatcar Release Process and Planning.
13 |
14 | ## Status update: ARM64
15 | - List of release tests that fail
16 | - Deep dive into selected test failures
17 |
18 | ## NEW: Release planning
19 | - Introducing our public release planning board
20 | - Items to be in the release of the week of July 21st
21 | - Community input wanted for upcoming releases!
22 |
23 | ## Q&A
24 | - Questions from community participants, answered by the Flatcar maintainers.
25 |
26 | # Call Minutes
27 |
28 | 1. Sayan introduces agenda for today:
29 | - Flatcar releases
30 | - Arm updates
31 | - Flatcar release planning
32 | - QA
33 | 2. Flatcar team introduce themselves: Sayan, Jeremi, Kai, Marga, William, Danielle (program manager for ARM support for Flatcar)
34 | 3. Kai talks about Flatcar Release Process
35 | - In contrast to regular distros, releases are not just bi-yearly but more frequent
36 | - Update granularity is whole image, not single packages
37 | - Releases are based on package updates, open PRs that are ready, and critical security fixes
38 | - Build is performed on private Jenkins instance, from scratch
39 | - Flatcar test suite runs on PRs
40 | - Big test run right before a release may uncover issues not found during development
41 | - Each release is signed and gets uploaded to our website and all supported cloud providers
42 | - Release planning happens every two weeks: review pending PRs and see if they can be fast tracked into the release
43 | - Release planning board has been made public today (https://github.com/orgs/kinvolk/projects/15) 😊 Community input is welcome!
44 | - Build/Test:
45 | - New SDK is produced on alpha release
46 | - Update signature is always cryptographically verified
47 | - Nightlies: packages from nightly builds can be consumed by SDK
48 | - Planned improvements to the CI process
49 | - Setting up a community accessible CI system (Concourse maybe)
50 | - Setting up automatic CI for PRs
51 | - Making release scripts independent of Jenkins and making it possible to build releases on dev machines
52 | 4. William talks about state of ARM64:
53 | - William lists failing test cases
54 | - A lot of test cases seem to be failing due to similar root causes, we hope the community can help investigate
55 | - Ongoing work in the ARM64 stream:
56 | - Polkit depends on spidermonkey, but spidermonkey is complex for cross-compilation and ARM64
57 | - We are going to replace spidermonkey with duktape like others in open source community have done
58 | - Help welcome! Find us on Matrix/IRC "wrl"
59 | 5. Sayan talks about recent releases:
60 | - Alpha 2920.0.0, Beta 2905.1.0
61 | - There will be monthly community call for release planning and a smaller bi-weekly to check progress
62 | - Sayan introduces the planning board (https://github.com/orgs/kinvolk/projects/15)
63 | - Columns for planned/in-progress/ready-for-review and items-completed for the closest update of alpha (and bumps of the other release channels).
64 |
65 | ## Q&A
66 |
67 | * Q (Adam): migrated from CoreOS to Flatcar for hosting bioinformatics workloads on Kubernetes. Hitting limits on ignition file sizes on AWS (16K), wondering about possibility of using compression to buy some more time (ignition v3). Is ignition the right thing to use, plans for upgrade (flatcar is currently on v2)?
68 | * A (Kai): Probably will upgrade to v3 at some point, but keep v2 support unlike upstream. For the AWS issue, recommend fetching bigger ignition payloads from S3, is secured by IAM.
69 |
70 | * Q (Adam): what's the practical difference between cloud-config vs. Ignition. If cloud-config works for us, should we still migrate?
71 | * A (Kai): differences: ignition runs during initramfs, before systemd from rootfs starts, allowing more customization and potentially sparing users from a reboot. Also ignition runs once and not on every boot. Coreos-cloudconfig is an independent Go implementation of the Python cloudconfig found in Ubuntu. It’s not actively developed but will stick around.
72 |
--------------------------------------------------------------------------------
/attic/community-meetings/2021-07-26.md:
--------------------------------------------------------------------------------
1 | # Agenda for the Flatcar Release Planning call on Monday, 26th of July, 17:30 CEST
2 |
3 | ## Links for participants
4 | - Call (for actively participating): [https://zoom.us/j/99741357880](https://zoom.us/j/99741357880)
5 | - Youtube live stream link (for passively watching): https://www.youtube.com/watch?v=SM4lfaITzsI
6 | - Release Planning Board: [https://github.com/orgs/kinvolk/projects/15](https://github.com/orgs/kinvolk/projects/15)
7 |
8 | ## Welcome
9 | - Brief introduction of new participants or attendees
10 | - Status of the previous Flatcar Release
11 | - Planning for the upcoming release for the week of August 2nd.
12 |
13 | ## Q&A
14 | - Questions from community participants, answered by the Flatcar maintainers.
15 |
16 | # Call Minutes
17 | As usual, the meeting minutes will be added here after the call.
18 |
--------------------------------------------------------------------------------
/attic/community-meetings/2021-08-10-slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flatcar/Flatcar/e1f2e41bcb0ae40e721ce9d355cdb42f5dcb32c2/attic/community-meetings/2021-08-10-slides.pdf
--------------------------------------------------------------------------------
/attic/community-meetings/2021-08-10.md:
--------------------------------------------------------------------------------
1 | # Flatcar community call Tuesday, 10th of August, 5:30 pm CEST
2 |
3 | - [Slide deck](2021-08-10-slides.pdf)
4 | - Youtube recording: [https://www.youtube.com/watch?v=Hy34rw7kax8](https://www.youtube.com/watch?v=Hy34rw7kax8)
5 |
6 | ## Welcome
7 | - Brief intro / check-in of all participants in the Zoom call. Please introduce yourself and share what brings you here today.
8 | - Review the meeting agenda.
9 |
10 | ## News
11 | - New section! We will discuss news and happenings in the Flatcar world, including how the team handled issues recently with Cilium interoperability and an image availability failure.
12 |
13 | ## Spotlight: Docker 20.10 / cgroups v2 update
14 | - Docker 20 and CGroups v2 (unified mode) are coming to Flatcar Linux! We'll give an overview of the challenges and the implications, as well as discuss the timeline.
15 |
16 | ## Spotlight community committer: contributing to Flatcar
17 | - What it took Aniruddha to contribute to Flatcar and solve the locksmith reboot issue.
18 |
19 | ## Status update: ARM64
20 | - What’s done, what’s missing, and how to help.
21 |
22 | ## Releases review & planning
23 | - Update from our planning for the next releases, including new features, bug fixes, and related PRs.
24 |
25 | ## Q&A
26 | - Questions from community participants, answered by the Flatcar maintainers.
27 |
--------------------------------------------------------------------------------
/attic/community-meetings/2021-08-23.md:
--------------------------------------------------------------------------------
1 | # Agenda for the Flatcar Release Planning call on Monday, August of 23rd, 17:30 CEST
2 |
3 | ## Links for participants
4 | - Call (for actively participating): [https://us06web.zoom.us/j/85781192057](https://us06web.zoom.us/j/85781192057)
5 | - Youtube live stream link (for passively watching): http://www.youtube.com/watch?v=TfmiNy5020g
6 | - Release Planning Board: [https://github.com/orgs/kinvolk/projects/15](https://github.com/orgs/kinvolk/projects/15)
7 |
8 | ## Welcome
9 | - Brief introduction of new participants or attendees
10 | - Status of the previous Flatcar Release
11 | - Planning for the upcoming release for the week of August 30th.
12 |
13 | ## Q&A
14 | - Questions from community participants, answered by the Flatcar maintainers.
15 |
--------------------------------------------------------------------------------
/attic/community-meetings/2021-09-14-slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flatcar/Flatcar/e1f2e41bcb0ae40e721ce9d355cdb42f5dcb32c2/attic/community-meetings/2021-09-14-slides.pdf
--------------------------------------------------------------------------------
/attic/community-meetings/2021-09-14.md:
--------------------------------------------------------------------------------
1 | # Flatcar community call Tuesday, 14th of September, 5:30pm CEST / 9pm IST / 3:30pm GMT / 11:30am EDT / 8:30am PST
2 |
3 | - [Slide deck](2021-09-14-slides.pdf)
4 | - Youtube recording: http://www.youtube.com/watch?v=9YxsZYyQrkA
5 |
6 | ## Welcome
7 | - Brief intro / check-in of all participants in the Zoom call. Please introduce yourself and share what brings you here today.
8 |
9 | ## News
10 | - We will discuss news and happenings in the Flatcar world, including our move out of the Kinvolk github org / website back into our own, features coming to the Flatcar community release images, and the results of our recent user survey.
11 |
12 | ## Spotlight: Equinix Metal's use of Flatcar Container Linux
13 | - Andy Holtzmann [@andy-v-h](https://github.com/andy-v-h) gives an introduction on EM's use of Flatcar.
14 |
15 | ## Status update: ARM64
16 | - Progress made, remaining items, and next steps.
17 | - Ed Vielmetti [@vielmetti](https://github.com/vielmetti) shares information on the "Works on ARM" project at Equinix Metal, inclunding hardware available today and in the near future.
18 |
19 | ## Releases review & planning (updated section!)
20 | - We'll wrap up changes for the upcoming release (week of September 20) and will plan items we aim to integrate for the release after that (week of October 4th).
21 |
22 | ## Q&A
23 | - Questions from community participants, answered by the Flatcar maintainers.
24 |
--------------------------------------------------------------------------------
/attic/community-meetings/2021-09-28.md:
--------------------------------------------------------------------------------
1 | # Agenda for the Flatcar Release Team call on Tuesday, September 28th, 5:30pm CEST / 9pm IST / 3:30pm GMT / 11:30am EDT / 8:30am PST
2 |
3 | ## Links for participants
4 | * Zoom link: [https://us06web.zoom.us/j/82054240491](https://us06web.zoom.us/j/82054240491)
5 | * Meeting ID: 843 3611 6610
6 | * Passcode: 444888
7 | - Youtube live stream / recording: [https://www.youtube.com/watch?v=XbkHZMJlC8g](https://www.youtube.com/watch?v=XbkHZMJlC8g)
8 | - Release Planning Board: [https://github.com/orgs/flatcar-linux/projects/5](https://github.com/orgs/flatcar-linux/projects/5)
9 |
10 | ## Welcome
11 | - Brief introduction of new participants or attendees
12 | - Status of the previous Flatcar Release
13 | - Status/Planning for the release for the week of October 4th
14 | - Planning for the release for the week of October 18th
15 |
16 | ## Q&A
17 | - Questions from community participants, answered by the Flatcar maintainers.
18 |
--------------------------------------------------------------------------------
/attic/community-meetings/2021-10-19-slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flatcar/Flatcar/e1f2e41bcb0ae40e721ce9d355cdb42f5dcb32c2/attic/community-meetings/2021-10-19-slides.pdf
--------------------------------------------------------------------------------
/attic/community-meetings/2021-10-19.md:
--------------------------------------------------------------------------------
1 | # Flatcar community call Tuesday, 19th of October, 5:30pm CEST / 9pm IST / 3:30pm GMT / 11:30am EDT / 8:30am PST
2 |
3 | - [Slide deck](2021-10-11-slides.pdf)
4 | - Youtube recording: [https://www.youtube.com/watch?v=YP9HnYxepVo](https://www.youtube.com/watch?v=YP9HnYxepVo)
5 |
6 | ## Welcome
7 | - Brief intro / check-in of all participants in the Zoom call. Please introduce yourself and share what brings you here today.
8 |
9 | ## News
10 | - We will discuss news and happenings in the Flatcar world.
11 | - We will elaborate on recent issues with our CI infrastructure, and repercussions for people using the SDK or the developer container.
12 | - Today's call won't have a release planning section (there's a dedicated release planning coming up right next week).
13 | - We're participating in [Hacktoberfest](https://hacktoberfest.digitalocean.com/), your contribution to a Flatcar repo will count!
14 |
15 | ## Spotlight: Flatcar dev mini-projects
16 | - Support for Ignition v3
17 | - Flog, the automated changelog generator
18 | - SDK container
19 |
20 | ## Status update: ARM64
21 | - Progress made, remaining items, and next steps.
22 |
23 | ## Q&A
24 | - Questions from community participants, answered by the Flatcar maintainers.
25 |
--------------------------------------------------------------------------------
/attic/community-meetings/2021-10-26.md:
--------------------------------------------------------------------------------
1 | # Agenda for the Flatcar Release Team call on Tuesday, October 26th, 5:30pm CEST / 9pm IST / 3:30pm GMT / 11:30am EDT / 8:30am PST
2 |
3 | ## Links for participants
4 | - Zoom link: [https://us06web.zoom.us/j/82054240491](https://us06web.zoom.us/j/82054240491)
5 | - Meeting ID: 820 5424 0491
6 | - Passcode: 444888
7 | - Youtube live stream / recording: [https://www.youtube.com/watch?v=xh-MkIoZvVw](https://www.youtube.com/watch?v=xh-MkIoZvVw)
8 | - Release Planning Board: [https://github.com/orgs/flatcar-linux/projects/5](https://github.com/orgs/flatcar-linux/projects/5)
9 |
10 | ## Welcome
11 | - Brief introduction of new participants or attendees
12 | - Status of the previous Flatcar Release
13 | - Status/Planning for the release for the week of November 1st
14 | - Planning for the release for the week of November 15th
15 |
16 | ## Q&A
17 | - Questions from community participants, answered by the Flatcar maintainers.
18 |
--------------------------------------------------------------------------------
/attic/community-meetings/2021-11-09.md:
--------------------------------------------------------------------------------
1 | # Flatcar community call Tuesday, 9th of November, 5:30pm CET / 10pm IST / 4:30pm GMT / 11:30am EST / 8:30am PST
2 |
3 | - Zoom link: [https://us06web.zoom.us/j/84336116610](https://us06web.zoom.us/j/84336116610)
4 | - Meeting ID: 843 3611 6610
5 | - Passcode: 444888
6 | - Youtube live stream / recording: https://www.youtube.com/watch?v=5XCgOByOSeQ
7 |
8 | - Community Calls calendar (all future calls): [link](https://calendar.google.com/calendar/u/0/embed?src=c_ii991mqrpta9en8o7ofd4v19g4@group.calendar.google.com)
9 | - iCal version: [link](https://calendar.google.com/calendar/ical/c_ii991mqrpta9en8o7ofd4v19g4%40group.calendar.google.com/public/basic.ics)
10 |
11 | ## Welcome
12 | - Brief intro / check-in of all participants in the Zoom call. Please introduce yourself and share what brings you here today.
13 |
14 | ## News
15 | - We will discuss news and happenings in the Flatcar world.
16 | - CGroups V2 are coming to stable
17 | - ARM64 goes beta
18 |
19 | ## Spotlight: Flatcar dev mini-projects
20 | - OpenSSL 3.0 in Alpha-3046.0.0 FIPS provider showcase
21 | - ignition-as-a-service: online ignition transpiler
22 | - Flatcar on Firecracker hack + demo
23 |
24 | ## Status update: ARM64
25 | - Progress made, next steps, and path to stable.
26 |
27 | ## Release planning
28 | - Status/Planning for the release for the week of November 15th
29 | - Planning for the release for the week of November 29th
30 |
31 | ## Q&A
32 | - Questions from community participants, answered by the Flatcar maintainers - e.g. feedback on the new Stable release w/ cgroups v2.
33 |
--------------------------------------------------------------------------------
/attic/community-meetings/2021-11-23.md:
--------------------------------------------------------------------------------
1 | # Agenda for the Flatcar Release Team call on Tuesday, 23rd of November 5:30pm CET / 10pm IST / 4:30pm GMT / 11:30am EST / 8:30am PST
2 |
3 | ## Links for participants
4 | - Zoom link: [https://us06web.zoom.us/j/82054240491](https://us06web.zoom.us/j/82054240491)
5 | - Meeting ID: 820 5424 0491
6 | - Passcode: 444888
7 | - Youtube live stream / recording: [https://www.youtube.com/watch?v=VUzMuZgFQfY](https://www.youtube.com/watch?v=VUzMuZgFQfY)
8 | - Release Planning Board: [https://github.com/orgs/flatcar-linux/projects/5](https://github.com/orgs/flatcar-linux/projects/5)
9 |
10 | ## Welcome
11 | - Brief introduction of new participants or attendees
12 | - Status of the previous Flatcar Release
13 | - Status/Planning for the release for the week of November 29th
14 | - Planning for the release for the week of December 13th
15 |
16 | ## Q&A
17 | - Questions from community participants, answered by the Flatcar maintainers.
18 |
--------------------------------------------------------------------------------
/attic/community-meetings/2021-12-17-slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flatcar/Flatcar/e1f2e41bcb0ae40e721ce9d355cdb42f5dcb32c2/attic/community-meetings/2021-12-17-slides.pdf
--------------------------------------------------------------------------------
/attic/community-meetings/2021-12-17.md:
--------------------------------------------------------------------------------
1 | # Agenda for the Flatcar community call on Friday, 17th of December 5:30pm CET / 10pm IST / 4:30pm GMT / 11:30am EST / 8:30am PST
2 |
3 | - [Slide deck](2021-12-17-slides.pdf)
4 | - Youtube recording: [https://www.youtube.com/watch?v=1YsY9XEtF7Q](https://www.youtube.com/watch?v=1YsY9XEtF7Q)
5 |
6 | ## Welcome
7 | - Brief intro / check-in of all participants in the Zoom call. Please introduce yourself and share what brings you here today.
8 |
9 | ## News
10 | - We will discuss news and happenings in the Flatcar world.
11 | - ARM64 goes stable
12 | - Flatcar CAPI support with CAPI release 1.1
13 |
14 | ## Q&A
15 | - Questions from community participants, answered by the Flatcar maintainers
16 |
--------------------------------------------------------------------------------
/attic/community-meetings/2022-01-11-slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flatcar/Flatcar/e1f2e41bcb0ae40e721ce9d355cdb42f5dcb32c2/attic/community-meetings/2022-01-11-slides.pdf
--------------------------------------------------------------------------------
/attic/community-meetings/2022-01-11.md:
--------------------------------------------------------------------------------
1 | # Agenda for the Flatcar community call on Tuesday, 11th of January 5:30pm CET / 10pm IST / 4:30pm GMT / 11:30am EST / 8:30am PST
2 |
3 | - Zoom link: [https://us06web.zoom.us/j/84336116610](https://us06web.zoom.us/j/84336116610)
4 | - Meeting ID: 843 3611 6610
5 | - Passcode: 444888
6 | - Youtube live stream / recording: [link](https://www.youtube.com/watch?v=X_nqgXLOmLk)
7 | - [Slide deck](2022-01-11-slides.pdf)
8 | - Community Calls calendar (all future calls): [link](https://calendar.google.com/calendar/u/0/embed?src=c_ii991mqrpta9en8o7ofd4v19g4@group.calendar.google.com)
9 | - iCal version: [link](https://calendar.google.com/calendar/ical/c_ii991mqrpta9en8o7ofd4v19g4%40group.calendar.google.com/public/basic.ics)
10 |
11 |
12 | ## Welcome
13 | - Brief intro / check-in of all participants in the Zoom call. Please introduce yourself and share what brings you here today.
14 |
15 | ## News
16 | - 5.15 Kernel in Alpha
17 | - upcoming FOSDEM devroom talks overview
18 |
19 | ## Spotlight
20 | - 2021 recap - cgroupsv2, systemd updates, docker 20, ARM64
21 | - Flatcar on Raspberry Pi blog
22 | - Fleetlock (@aniruddha2000, @tormath1 )
23 |
24 | ## Release planning
25 | - Ongoing and upcoming releases (https://github.com/orgs/flatcar-linux/projects/5)
26 |
27 | ## Q&A
28 | - Questions from community participants, answered by the Flatcar maintainers
29 |
30 |
--------------------------------------------------------------------------------
/attic/community-meetings/README.md:
--------------------------------------------------------------------------------
1 | # Old-style community meeting agendas and presentation slides
2 |
3 | Community meeting planning / agendas has moved to [Github discussions](../../../../discussions/categories/community-meeting-agenda)
4 |
5 | This section in the attic contains agenda markdown files of "old style" Flatcar community calls where the agenda was agreed on in a PR instead of a github discussion.
6 | Also archived here are slide decks used in these meetings.
7 |
8 |
--------------------------------------------------------------------------------
/governance.md:
--------------------------------------------------------------------------------
1 | # Flatcar Project Governance
2 |
3 |
4 | Flatcar is a community based project, anyone who wants to participate is welcomed.
5 | We adopted the [CNCF code of Conduct](./CODE_OF_CONDUCT.md) as we pledge to be an opening and welcoming community for anyone who want to participate in it.
6 |
7 | The project is governed by a flat hierarchy - a group of people sharing a common vision of Flatcar in accordance to its mission statement.
8 |
9 | This goverance explains how the project is run.
10 |
11 | - [Values](#values)
12 | - [Maintainers](#maintainers)
13 | - [Becoming a Maintainer](#becoming-a-maintainer)
14 | - [Meetings](#meetings)
15 | - [CNCF Resources](#cncf-resources)
16 | - [Code of Conduct Enforcement](#code-of-conduct)
17 | - [Security Response Team](#security-response-team)
18 | - [Voting](#voting)
19 | - [Modifications](#modifying-this-charter)
20 |
21 | ## Values
22 |
23 | The Flatcar project, its leadership, and its maintainers embrace the following values:
24 |
25 | * Openness: Communication and decision-making happens in the open and is discoverable for future
26 | reference. As much as possible, all discussions and work take place in public
27 | forums and open repositories.
28 |
29 | * Fairness: All stakeholders have the opportunity to provide feedback and submit
30 | contributions, which will be considered on their merits.
31 |
32 | * Community over Product or Company: Sustaining and growing our community takes
33 | priority over shipping code or sponsors' organizational goals. Each
34 | contributor participates in the project as an individual.
35 |
36 | * Inclusivity: We innovate through different perspectives and skill sets, which
37 | can only be accomplished in a welcoming and respectful environment.
38 |
39 | * Participation: Responsibilities within the project are earned through
40 | participation, and there is a clear path up the contributor ladder into leadership
41 | positions.
42 |
43 | ## Maintainers
44 |
45 | Flatcar Maintainers have full access to most of the repositories in the [Flatcar project](https://github.com/orgs/flatcar/), except for very few repositories that contain sensitive information, e.g. for with undisclosed security issues (see [SECURITY.md](./SECURITY.md) for more information).
46 | Maintainers can merge PRs, approve PR builds+tests, and create and publish releases.
47 | Maintainers collectively manage the project's resources, interact with contributors, elect new maintainers, and remove inactive ones.
48 | The current list of maintainers can be found in [MAINTAINERS.md](./MAINTAINERS.md). Most maintainer access privileges are granted via membership of the Flatcar Github organisation's [Flatcar Maintainers team](https://github.com/orgs/flatcar/teams/flatcar-maintainers).
49 |
50 | This privilege is granted with some expectation of responsibility: maintainers
51 | are people who care about the Flatcar project and want to help it grow and
52 | improve. A maintainer is not just someone who can make changes, but someone who
53 | has demonstrated their ability to collaborate with the team, get the most
54 | knowledgeable people to review code and docs, contribute high-quality code, and
55 | follow through to fix issues (in code or tests).
56 |
57 | A maintainer is a contributor to the project's success and a citizen helping
58 | the project succeed.
59 |
60 | The collective team of all Maintainers is known as the Maintainer Council, which
61 | is the governing body for the project.
62 |
63 | ### Becoming a Maintainer
64 |
65 | Maintainers are active community members who are responsible for the overall quality and stewardship of the project, and are expected to remain actively involved in the project and participate in voting and discussing of proposed project level changes.
66 |
67 | Anyone with an established track record of contributions to the project can become a maintainer.
68 | The contributions are expected to be substantial, and must demonstrate a commitment to the long-term success of the project.
69 | Maintainership is not limited to engineering / development merits; all contributions - e.g. working with issues, providing guidance and feedback to users, reviewing PRs, contributing to docs, evangelising Flatcar - count.
70 | Becoming a maintainer is about building trust with the current maintainers of the project and being a person that they can depend on to make decisions in the best interest of the project in a consistent manner.
71 |
72 | Maintainer candidates should have demonstrated they:
73 | - Collaborate well.
74 | - Have a deep and comprehensive understanding of the Flatcar code base, technical goals, and directions.
75 | - Actively engage with major Flatcar feature proposals and implementations.
76 |
77 | The Flatcar project welcomes both development as well as community-focuses contributions.
78 | To gain maintainership, the following is expected:
79 | * commitment to the project's continued success:
80 | * participate in discussions, contributions, code and documentation reviews for 6 months or more,
81 | * actively evangelise Flatcar in at least 20 talks/presentations at 10 different conferences or meetups
82 | * organise and chair at least 15 maintainer events, e.g. bug fixing or doc writing days, with at least 5 maintainers participating each event
83 | * Contribute to the project's development
84 | * perform reviews for 30 non-trivial pull requests,
85 | * contribute 10 non-trivial pull requests and have them merged,
86 | * ability to write quality code and/or documentation,
87 | * ability to collaborate with the team,
88 | * demonstrated understanding of how the team works (policies, processes for testing and code review, etc),
89 | * understanding of the project's code base and coding and / or documentation style.
90 |
91 | Periodically, the existing maintainers curate a list of contributors that have shown regular activity on the project over the prior months.
92 | The nominating maintainer will create a PR to update the Maintainers List.
93 | It is recommended to describe the reasons for the nomination and the contribution of the nominee in the PR.
94 | Upon consensus of incumbent maintainers, the PR will be approved and the new maintainer becomes active.
95 |
96 | Maintainers who are selected will be granted the necessary GitHub rights.
97 |
98 |
99 | ### Removing a Maintainer
100 |
101 | Life priorities, interests, and passions can change.
102 | If you're a maintainer but feel you must remove yourself from the list, inform other maintainers that you intend to step down, and if possible, help find someone to pick up your work.
103 | At the very least, ensure your work can be continued where you left off.
104 | After you've informed other maintainers, create a pull request to remove yourself from the [MAINTAINERS](MAINTAINERS.md) file.
105 | If applicable, include a change to [EMERITUS_MAINTAINERS](EMERITUS_MAINTAINERS.md) to add yourself to the list of emeritus maintainers.
106 | This will ease your return to active maintainership in the future.
107 |
108 | Maintainers may also be removed after being inactive, failure to fulfill their
109 | Maintainer responsibilities, violating the Code of Conduct, or other reasons.
110 | Inactivity is defined as a period of very low or no activity in the project
111 | for a year or more, with no definite schedule to return to full Maintainer
112 | activity.
113 |
114 | A Maintainer may be removed at any time by a 2/3 vote of the remaining maintainers.
115 |
116 | Depending on the reason for removal, a Maintainer may be converted to Emeritus
117 | status. Emeritus Maintainers will still be consulted on some project matters,
118 | and can be rapidly returned to Maintainer status if their availability changes.
119 |
120 |
121 | ## Meetings
122 |
123 | Time zones permitting, Maintainers are expected to participate in the Flatcar Developer Syncs meeting every 4th Wednesday of a month.
124 | The meeting time observes the Universal Coordinated time. It occurs at 2:30pm UTC.
125 | Depending on your local timezone, the slot might be subject to summer time changes.
126 | * During daylight saving time, the meeting occurs at 8pm IST (IST does not observe daylight saving time) / 4:30pm CEST / 10:30am EDT / 7:30am PST.
127 | * Outside of daylight saving time, the meeting occurs at 8pm IST / 3:30pm CET / 9:30am EST / 6:30am PST.
128 |
129 | A calendar is available to ease planning. The calendar contains Developer syncs, project office hours, and one-off events like bug fixing or doc writing days.
130 | * Google calendar link: https://calendar.google.com/calendar/u/0/embed?src=c_ii991mqrpta9en8o7ofd4v19g4@group.calendar.google.com
131 | * iCal link (for importing): https://calendar.google.com/calendar/ical/c_ii991mqrpta9en8o7ofd4v19g4%40group.calendar.google.com/public/basic.ics
132 |
133 | Maintainers will also have closed meetings in order to discuss security reports
134 | or Code of Conduct violations. Such meetings should be scheduled by any
135 | Maintainer on receipt of a security issue or CoC report. All current Maintainers
136 | must be invited to such closed meetings, except for any Maintainer who is
137 | accused of a CoC violation.
138 |
139 | ## CNCF Resources
140 |
141 | Any Maintainer may suggest a request for CNCF resources during a
142 | meeting. A simple majority of Maintainers approves the request. The Maintainers
143 | may also choose to delegate working with the CNCF to non-Maintainer community
144 | members, who will then be added to the [CNCF's Maintainer List](https://github.com/cncf/foundation/blob/main/project-maintainers.csv)
145 | for that purpose.
146 |
147 | ## Code of Conduct
148 |
149 | [Code of Conduct](./code-of-conduct.md)
150 | violations by community members will be discussed and resolved
151 | on the [private Maintainer mailing list](maintainers@flatcar-linux.org). If a Maintainer is directly involved
152 | in the report, the Maintainers will instead designate two Maintainers to work
153 | with the CNCF Code of Conduct Committee in resolving it.
154 |
155 | ## Security Response Team
156 |
157 | The Maintainers will appoint a Security Response Team to handle security reports.
158 | This committee is a sub-set of the Maintainer Council with full access to undisclosed security issues tracked by the project.
159 | Members of the Security Response team as well as respective access permissions to sensitive data are administrated via membership in the [Flatcar Github organisation's Security team](https://github.com/orgs/flatcar/teams/flatcar-security-team).
160 | The Maintainers will review who is assigned to this at least once a year.
161 |
162 | The Security Response Team is responsible for handling all reports of security
163 | issues and breaches according to the [security policy](./SECURITY.md).
164 |
165 | ## Voting
166 |
167 | While most business in Flatcar is conducted by "[lazy consensus](https://community.apache.org/committers/lazyConsensus.html)",
168 | periodically the Maintainers may need to vote on specific actions or changes.
169 | A vote can be taken on
170 | [the private Maintainer mailing list](maintainers@flatcar-linux.org) for security or conduct matters.
171 | Votes may also be taken at [Flatcar Developer Syncs meetings](https://meet.flatcar.org/OfficeHours). Any Maintainer may
172 | demand a vote be taken.
173 |
174 | Most votes require a simple majority of all Maintainers to succeed, except where
175 | otherwise noted. Two-thirds majority votes mean at least two-thirds of all
176 | existing maintainers.
177 |
178 | ## Modifying this Charter
179 |
180 | Changes to this Governance and its supporting documents may be approved by
181 | a 2/3 vote of the Maintainers.
182 |
--------------------------------------------------------------------------------
/interop-matrix.md:
--------------------------------------------------------------------------------
1 | # Flatcar inter-operation matrix
2 |
3 | This document tracks Flatcar inter-operability across environments.
4 |
5 | Ownership of an item implies ensuring test coverage in release tests of official Flatcar releases (L2 and above) as well as handling bugs and feature requests that affect the respective environment specifically.
6 | Please propose ownership by filing a PR for this document.
7 |
8 | ## Public cloud (machines)
9 |
10 | | Environment | Full-Feature (release blocker) | Works | Tested (CI) | Owner | Reference (e.g. GH issue) | Notes |
11 | |-------------|--------------------------------|-------|-------------|-------|---------------------------|-------|
12 | | EC2 | Partial | X | X | @flatcar/flatcar-maintainers | | IAM 2.0 support missing |
13 | | Azure | X | X | X | @flatcar/flatcar-maintainers | | |
14 | | GCE | X | X | X | @flatcar/flatcar-maintainers | | |
15 | | Digital Ocean (VMs) | X | X | X | @flatcar/flatcar-maintainers | | |
16 | | Equinix Metal | X | X | X | @flatcar/flatcar-maintainers | | |
17 | | ESXi / vSphere | X | X | X | @flatcar/flatcar-maintainers | | |
18 | | Hetzner Cloud | | X | | [no owner] | | |
19 | | Vultr VPS | | X | | [no owner] | | |
20 | | Cloudscale | | X | | [no owner] | | |
21 | | Oracle Cloud | | X | | [no owner] | | Bring-your-own-image on OCI VMs; install via Ubuntu on OCI bare metal |
22 | | Tencent | | | | [no owner] | | |
23 | | AliCloud | | | | [no owner] | | |
24 | | Yandex | | | | [no owner] | | |
25 | | Brightbox | X | X | X | @flatcar/flatcar-maintainers | | |
26 |
27 | ## Private Cloud (machines)
28 |
29 | | Environment | Full-Feature (release blocker) | Works | Tested (CI) | Owner | Reference (e.g. GH issue) | Notes |
30 | |-------------|--------------------------------|-------|-------------|-------|---------------------------|-------|
31 | | Azure Stack | | w/ caveat | | [no owner] | | controller node not supported on Flatcar (cloud-init feature missing) |
32 | | Tinkerbell | | X | | [no owner] | | |
33 | | Rancher (VMs) | | X | | [no owner] | | |
34 | | QEmu / KVM backed | X | X | X | @flatcar/flatcar-maintainers | | |
35 | | OpenStack | X | X | X | @flatcar/flatcar-maintainers | | |
36 | | VirtualBox | | X | | [no owner] | | |
37 | | Vagrant | | X | | [no owner] | | Isn't this plain qemu/kvm? |
38 |
39 | ## Managed Kubernetes
40 |
41 | | Environment | Full-Feature (release blocker) | Works | Tested (CI) | Owner | Reference (e.g. GH issue) | Notes |
42 | |-------------|--------------------------------|-------|-------------|-------|---------------------------|-------|
43 | | EKS | | X | | [no owner] | | |
44 | | GiantSwarm | | X | | Provider | | |
45 |
46 | ## Cluster API
47 |
48 | | Environment | Full-Feature (release blocker) | Works | Tested (CI) | Owner | Reference (e.g. GH issue) | Notes |
49 | |-------------|--------------------------------|-------|-------------|-------|---------------------------|-------|
50 | | CAPB | X | X | X (upstream) | Upstream | | Covered by CAPB release tests |
51 | | CAPA | X | X | X (upstream) | Upstream | | Covered by CAPA release tests |
52 | | CAPA EKS | | | | [no owner] | | |
53 | | CAPZ | | w/ caveat | | @flatcar/flatcar-maintainers | | WIP Prototype |
54 | | CAPV | | [no owner] | | | |
55 | | CAPM3 | | [no owner] | | | |
56 | | CAPG | | [no owner] | | | |
57 | | CAPO | | X | X (upstream) | Upstream | | |
58 |
59 | ## Kubernetes Distros
60 |
61 | | Environment | Full-Feature (release blocker) | Works | Tested (CI) | Owner | Reference (e.g. GH issue) | Notes |
62 | |-------------|--------------------------------|-------|-------------|-------|---------------------------|-------|
63 | | AKS Engine | | X | | [no owner] | | https://kinvolk.io/blog/2020/12/supercharging-aks-engine-with-flatcar-container-linux/ |
64 | | Rancher (rke) | | X | | [no owner] | | |
65 | | Rancher (rke2) | | | | [no owner] | | |
66 | | Lokomotive | X | X | X | @kinvolk/lokomotive-developers | | |
67 | | Tanzu KG | | X | | [no owner] | | |
68 | | K3s | | X | | [no owner] | | |
69 | | EKS-Distro | | X | | [no owner] | | |
70 | | KOPS | | X | | upstream | | |
71 | | Kubematic | | X | | [no owner] | | |
72 | | Gardener | | X | | [no owner] | | |
73 |
74 | ## Other
75 |
76 | Please add below what does not fit into any of the categories above.
77 |
78 | | Environment | Full-Feature (release blocker) | Works | Tested (CI) | Owner | Reference (e.g. GH issue) | Notes |
79 | |-------------|--------------------------------|-------|-------------|-------|---------------------------|-------|
80 | | | | | | | | |
81 |
--------------------------------------------------------------------------------
/sync-maintainers/README:
--------------------------------------------------------------------------------
1 | A personal access token with public_repo scope is needed.
2 | Usage:
3 |
4 | ```
5 | python3 -m venv venv
6 | . venv/bin/activate
7 | pip install -r requirements.txt
8 | ./sync-maintainers.py list
9 | ./sync-maintainers.py repo --repo=REPONAME
10 | GITHUB_TOKEN=... ./sync-maintainers github --repo=REPONAME
11 | ```
12 |
--------------------------------------------------------------------------------
/sync-maintainers/requirements.txt:
--------------------------------------------------------------------------------
1 | requests
2 | black
3 |
--------------------------------------------------------------------------------
/sync-maintainers/sync-maintainers.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | import requests
3 | import json
4 | import subprocess
5 | import os
6 | import sys
7 | import argparse
8 |
9 |
10 | def parse(m):
11 | para = []
12 | repos = []
13 | while len(m):
14 | line = m.pop(0)
15 | if line == "# Maintainers":
16 | line = m.pop(0)
17 | while not line.startswith("#"):
18 | para.append(line)
19 | line = m.pop(0)
20 | if line.startswith("###"):
21 | repo = line.split("### ")[1].strip()
22 | maint = []
23 | m.pop(0) # maintainers:
24 | line = m.pop(0)
25 | while line.startswith("* "):
26 | maint.append(line)
27 | line = m.pop(0) if len(m) else ""
28 | if repo != "Flatcar":
29 | repos.append((repo, maint))
30 | return para, repos
31 |
32 |
33 | MAINTAINERS_TEMPLATE = """# Maintainers
34 |
35 | {maintainers}
36 |
37 | {paragraph}
38 |
39 | The contents of this file are synchronized from [Flatcar/MAINTAINERS.md](https://github.com/flatcar/Flatcar/blob/main/MAINTAINERS.md).
40 | """
41 |
42 |
43 | def write_maintainers_file(repo_name, paragraph, maintainers):
44 | maintainers_entry = "\n".join(maintainers)
45 | maintainers_content = MAINTAINERS_TEMPLATE.format(
46 | maintainers=maintainers_entry, paragraph=paragraph
47 | )
48 | repo_filename = f"{repo_name}/MAINTAINERS.md"
49 | with open(repo_filename, "w") as f:
50 | f.write(maintainers_content)
51 |
52 |
53 | BRANCH_NAME = "sync-maintainers"
54 |
55 |
56 | def checkout_branch(repo_name):
57 | return subprocess.run(
58 | ["git", "-C", repo_name, "checkout", "-B", BRANCH_NAME, "origin/HEAD"],
59 | check=True,
60 | )
61 |
62 |
63 | def commit(repo_name):
64 | subprocess.run(["git", "-C", repo_name, "add", "MAINTAINERS.md"], check=True)
65 | subprocess.run(
66 | [
67 | "git",
68 | "-C",
69 | repo_name,
70 | "commit",
71 | "-m",
72 | "Sync maintainers file from flatcar/flatcar repository",
73 | ],
74 | check=True,
75 | )
76 |
77 |
78 | def push(repo_name):
79 | subprocess.run(
80 | ["git", "-C", repo_name, "push", "--force", "origin", BRANCH_NAME], check=True
81 | )
82 |
83 |
84 | def parse_maintainers(repo=None):
85 | maint_file = "../MAINTAINERS.md"
86 | with open(maint_file) as f:
87 | m = f.read().splitlines()
88 | para, repos = parse(m)
89 | paragraph = "\n".join(para).strip()
90 | if repo:
91 | repos = [r for r in repos if r[0] == repo]
92 | return repos, paragraph
93 |
94 |
95 | def main_repo(args):
96 | repos, paragraph = parse_maintainers(args.repo)
97 | for (repo_name, maintainers) in repos:
98 | repo_url = f"git@github.com:flatcar/{repo_name}"
99 | subprocess.run(["git", "clone", "--depth=1", repo_url])
100 | checkout_branch(repo_name)
101 | write_maintainers_file(repo_name, paragraph, maintainers)
102 | commit(repo_name)
103 | push(repo_name)
104 |
105 |
106 | def prepare_req(repo, token, api):
107 | api = "/" + api if api else ""
108 | url = f"https://api.github.com/repos/flatcar/{repo}{api}"
109 | headers = {
110 | "Accept": "application/vnd.github+json",
111 | f"Authorization": "Bearer {token}",
112 | }
113 | return url, headers
114 |
115 |
116 | def get_pr(repo, token):
117 | url, headers = prepare_req(repo, token, "pulls")
118 | params = {"state": "open", "head": f"flatcar:{BRANCH_NAME}"}
119 | return requests.get(url, headers=headers, params=params)
120 |
121 |
122 | def get_default_branch(repo, token):
123 | url, headers = prepare_req(repo, token, "")
124 | resp = requests.get(url, headers=headers).json()
125 | return resp["default_branch"]
126 |
127 |
128 | def create_pr(repo, token, base):
129 | url, headers = prepare_req(repo, token, "pulls")
130 | data = {
131 | "title": "Sync MAINTAINERS.md",
132 | "head": f"flatcar:{BRANCH_NAME}",
133 | "base": base,
134 | }
135 | return requests.post(url, headers=headers, json=data)
136 |
137 |
138 | def update_assignees(repo, token, pr, assignees):
139 | url, headers = prepare_req(repo, token, f"pulls/{pr}/requested_reviewers")
140 | data = {"reviewers": assignees}
141 | return requests.post(url, headers=headers, json=data)
142 |
143 |
144 | def get_assignees(maintainers):
145 | assignees = [e.split("@")[1] for e in maintainers]
146 | return assignees
147 |
148 |
149 | def main_github(args):
150 | token = os.getenv("GITHUB_TOKEN")
151 | if not token:
152 | raise Exception("Missing GITHUB_TOKEN env variable")
153 | repos, _ = parse_maintainers(args.repo)
154 | for (repo_name, maintainers) in repos:
155 | pr = get_pr(repo_name, token).json()
156 | if not pr:
157 | print(f"{repo_name} creating pr")
158 | base = get_default_branch(repo_name, token)
159 | pr = [create_pr(repo_name, token, base).json()]
160 | prnum = pr[0]["number"]
161 | assignees = get_assignees(maintainers)
162 | resp = update_assignees(repo_name, token, prnum, assignees)
163 | if resp.status_code != 201:
164 | print(resp.json())
165 | else:
166 | print("{repo_name} ok")
167 |
168 |
169 | def main_list(args):
170 | repos, _ = parse_maintainers()
171 | for (repo_name, _) in repos:
172 | print(repo_name)
173 |
174 |
175 | parser = argparse.ArgumentParser(prog="sync-maintainers.py")
176 | subparser = parser.add_subparsers(required=True, dest="cmd")
177 | parser_repo = subparser.add_parser("repo", help="perform git repository operations")
178 | parser_repo.add_argument("--repo", help="Repository to operate on; default all")
179 | parser_repo.set_defaults(func=main_repo)
180 | parser_github = subparser.add_parser(
181 | "github", help="perform github pull request operations"
182 | )
183 | parser_github.add_argument("--repo", help="Repository to operate on; default all")
184 | parser_github.set_defaults(func=main_github)
185 | parser_list = subparser.add_parser("list", help="list all repositories with entries")
186 | parser_list.set_defaults(func=main_list)
187 |
188 | if __name__ == "__main__":
189 | args = parser.parse_args()
190 | args.func(args)
191 |
--------------------------------------------------------------------------------