#!/usr/bin/env python3

# Copyright 2018 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


import os
import subprocess
import sys

def main():
    if os.geteuid() != 0:
        print('Can not reboot as a normal user. Please re-run with sudo.')
        sys.exit(1)

    misc_path = os.path.join(os.sep, 'dev', 'disk', 'by-partlabel', 'misc')
    if not os.path.exists(misc_path):
        print('Could not find a misc partition! Giving up.')
        sys.exit(1)

    with open(misc_path, 'wb') as misc:
        misc.write(b'bootonce-bootloader')

    subprocess.run('reboot')

if __name__ == '__main__':
    main()
