diff options
| author | John Estabrook <jestabro@vyos.io> | 2026-03-29 21:17:44 -0500 |
|---|---|---|
| committer | John Estabrook <jestabro@vyos.io> | 2026-04-15 15:17:27 -0500 |
| commit | 47814a3f61f58dd79d4165cb75f358b93b289310 (patch) | |
| tree | b21134596bc21d3f27b9bcd4c4a7d8a52df9addd | |
| parent | ad0658eba6084943da3ef7430314b757478252e5 (diff) | |
| download | vyos-1x-47814a3f61f58dd79d4165cb75f358b93b289310.tar.gz vyos-1x-47814a3f61f58dd79d4165cb75f358b93b289310.zip | |
T8445: add activation script to indicate first installed boot
Add script to leave hint of first installed boot (as, say, distinguished
from first live boot, or subsequent); this is useful as pre/post
conditions and self-modification of activation scripts.
| -rw-r--r-- | python/vyos/utils/activate.py | 15 | ||||
| -rw-r--r-- | src/activation-scripts/00-first-installed-boot.py | 35 |
2 files changed, 50 insertions, 0 deletions
diff --git a/python/vyos/utils/activate.py b/python/vyos/utils/activate.py index 588dda733..056bb2527 100644 --- a/python/vyos/utils/activate.py +++ b/python/vyos/utils/activate.py @@ -18,6 +18,7 @@ import json import typing from pathlib import Path +from vyos.base import Warning as Warn from vyos.defaults import activation_list from vyos.defaults import activation_init from vyos.defaults import activation_hint @@ -101,3 +102,17 @@ def refresh_activation_list(): obj = new_obj orig_list_path.write_text(json.dumps(obj)) + + +first_installed_boot_file = '/run/first_installed_boot' + + +def set_first_installed_boot(): + try: + Path(first_installed_boot_file).touch(exist_ok=False) + except FileExistsError: + Warn('redundant set of first_installed_boot') + + +def is_first_installed_boot(): + return Path(first_installed_boot_file).exists() diff --git a/src/activation-scripts/00-first-installed-boot.py b/src/activation-scripts/00-first-installed-boot.py new file mode 100644 index 000000000..ca02c2642 --- /dev/null +++ b/src/activation-scripts/00-first-installed-boot.py @@ -0,0 +1,35 @@ +# Copyright (C) VyOS Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library. If not, see <http://www.gnu.org/licenses/>. + + +from vyos.configtree import ConfigTree +from vyos.system.image import is_live_boot +from vyos.utils.activate import set_activation +from vyos.utils.activate import set_first_installed_boot +from vyos.utils.activate import is_first_installed_boot + + +def pre_condition() -> bool: + return not is_live_boot() + + +def activate(_config: ConfigTree) -> None: + pass + + +def post_condition() -> None: + set_first_installed_boot() + if is_first_installed_boot(): + set_activation(__file__, 'never') |
