├── .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\n

Discussions Metrics

' >> summary_report.md 319 | echo -e '\n

Questions & 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 '\n

Other 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\n

Advisory 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 '\n

New 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 '\n

Advisories 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 '\n

All 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\n

Issue Metrics

' >> summary_report.md 389 | 390 | echo -e '\n

Summary 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 '\n

New 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 '\n

Issues 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\n

Pull Requests Metrics

' >> comment_report.md 420 | 421 | echo -e '\n

Summary 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 '\n

New 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 '\n

PRs 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 | [![Flatcar OS](https://img.shields.io/badge/Flatcar-Website-blue?logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyNi4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4wIiBpZD0ia2F0bWFuXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgODAwIDYwMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgODAwIDYwMDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6IzA5QkFDODt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTQ0MCwxODIuOGgtMTUuOXYxNS45SDQ0MFYxODIuOHoiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik00MDAuNSwzMTcuOWgtMzEuOXYxNS45aDMxLjlWMzE3Ljl6Ii8+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNNTQzLjgsMzE3LjlINTEydjE1LjloMzEuOVYzMTcuOXoiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik02NTUuMiw0MjAuOXYtOTUuNGgtMTUuOXY5NS40aC0xNS45VjI2MmgtMzEuOVYxMzQuOEgyMDkuNFYyNjJoLTMxLjl2MTU5aC0xNS45di05NS40aC0xNnY5NS40aC0xNS45djMxLjINCgloMzEuOXYxNS44aDQ3Ljh2LTE1LjhoMTUuOXYxNS44SDI3M3YtMTUuOGgyNTQuOHYxNS44aDQ3Ljh2LTE1LjhoMTUuOXYxNS44aDQ3Ljh2LTE1LjhoMzEuOXYtMzEuMkg2NTUuMnogTTQ4Ny44LDE1MWg3OS42djMxLjgNCgloLTIzLjZ2NjMuNkg1MTJ2LTYzLjZoLTI0LjJMNDg3LjgsMTUxTDQ4Ny44LDE1MXogTTIzMywyMTQuNlYxNTFoNjMuN3YyMy41aC0zMS45djE1LjhoMzEuOXYyNC4yaC0zMS45djMxLjhIMjMzVjIxNC42eiBNMzA1LDMxNy45DQoJdjE1LjhoLTQ3Ljh2MzEuOEgzMDV2NDcuN2gtOTUuNVYyODYuMUgzMDVMMzA1LDMxNy45eiBNMzEyLjYsMjQ2LjRWMTUxaDMxLjl2NjMuNmgzMS45djMxLjhMMzEyLjYsMjQ2LjRMMzEyLjYsMjQ2LjRMMzEyLjYsMjQ2LjR6DQoJIE00NDguMywzMTcuOXY5NS40aC00Ny44di00Ny43aC0zMS45djQ3LjdoLTQ3LjhWMzAyaDE1Ljl2LTE1LjhoOTUuNVYzMDJoMTUuOUw0NDguMywzMTcuOXogTTQ0MCwyNDYuNHYtMzEuOGgtMTUuOXYzMS44aC0zMS45DQoJdi03OS41aDE1Ljl2LTE1LjhoNDcuOHYxNS44aDE1Ljl2NzkuNUg0NDB6IE01OTEuNiwzMTcuOXY0Ny43aC0xNS45djE1LjhoMTUuOXYzMS44aC00Ny44di0zMS43SDUyOHYtMTUuOGgtMTUuOXY0Ny43aC00Ny44VjI4Ni4xDQoJaDEyNy4zVjMxNy45eiIvPg0KPC9zdmc+DQo=)](https://www.flatcar.org/) 4 | [![Matrix](https://img.shields.io/badge/Matrix-Chat%20with%20us!-green?logo=matrix)](https://app.element.io/#/room/#flatcar:matrix.org) 5 | [![Slack](https://img.shields.io/badge/Slack-Chat%20with%20us!-4A154B?logo=slack)](https://kubernetes.slack.com/archives/C03GQ8B5XNJ) 6 | [![Twitter Follow](https://img.shields.io/twitter/follow/flatcar?style=social)](https://x.com/flatcar) 7 | [![Mastodon Follow](https://img.shields.io/badge/Mastodon-Follow-6364FF?logo=mastodon)](https://hachyderm.io/@flatcar) 8 | [![Bluesky](https://img.shields.io/badge/Bluesky-Follow-0285FF?logo=bluesky)](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 | --------------------------------------------------------------------------------