Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Docker image] Can't compile apk: /bin/tar ... "Cannot utime: Operation not permitted" #902

Closed
Sirfanas opened this issue May 19, 2019 · 7 comments

Comments

@Sirfanas
Copy link
Contributor

Versions

  • Python: 3
  • OS: Windows
  • Buildozer: Dockerfile on master (last commit: 586152c)

Description

I actually try to compile my app, I can assume my code is correct as I can compile it on a fresh linux install (Ubuntu) where I install manually Buildozer.

My main computer is under Windows 10, with Docker for Windows
So I simply build the image, then I go in terminal to access biuldozer container with a terminal:
docker run --interactive --tty --rm --volume ${pwd}.buildozer:/home/user/.buildozer --volume ${pwd}:/home/user/hostcwd --entrypoint /bin/bash kivy/buildozer

Then in my container's terminal I do this command (in /home/user/hostcwd):
buildozer android deploy run

Everything run except at the end, command tar fail because of error "Cannot utime: Operation not permitted"

buildozer.spec

Command:

docker run --interactive --tty --rm --volume ${pwd}\.buildozer\:/home/user/.buildozer --volume ${pwd}:/home/user/hostcwd --entrypoint /bin/bash kivy/buildozer
buildozer android debug run

Spec file:

[app]

# (str) Title of your application
title = myapp

# (str) Package name
package.name = myapp

# (str) Package domain (needed for android/ios packaging)
package.domain = org.myapp

# (str) Source code where the main.py live
source.dir = .

# (list) Source files to include (let empty to include all the files)
source.include_exts = py,png,jpg,kv,atlas

# (list) List of inclusions using pattern matching
#source.include_patterns = assets/*,images/*.png

# (list) Source files to exclude (let empty to not exclude anything)
#source.exclude_exts = spec

# (list) List of directory to exclude (let empty to not exclude anything)
#source.exclude_dirs = tests, bin

# (list) List of exclusions using pattern matching
#source.exclude_patterns = license,images/*/*.jpg

# (str) Application versioning (method 1)
version = 0.2

# (str) Application versioning (method 2)
# version.regex = __version__ = ['"](.*)['"]
# version.filename = %(source.dir)s/main.py

# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy
requirements = python3,kivy,android,openssl

# (str) Custom source folders for requirements
# Sets custom source for any requirements with recipes
# requirements.source.kivy = ../../kivy

# (list) Garden requirements
#garden_requirements =

# (str) Presplash of the application
#presplash.filename = %(source.dir)s/data/presplash.png

# (str) Icon of the application
#icon.filename = %(source.dir)s/data/icon.png

# (str) Supported orientation (one of landscape, sensorLandscape, portrait or all)
orientation = all

# (list) List of service to declare
#services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY

#
# OSX Specific
#

#
# author = © Copyright Info

# change the major version of python used by the app
osx.python_version = 3

# Kivy version to use
osx.kivy_version = 1.10.1

#
# Android specific
#

# (bool) Indicate if the application should be fullscreen or not
fullscreen = 0

# (string) Presplash background color (for new android toolchain)
# Supported formats are: #RRGGBB #AARRGGBB or one of the following names:
# red, blue, green, black, white, gray, cyan, magenta, yellow, lightgray,
# darkgray, grey, lightgrey, darkgrey, aqua, fuchsia, lime, maroon, navy,
# olive, purple, silver, teal.
#android.presplash_color = #FFFFFF

# (list) Permissions
android.permissions = INTERNET

# (int) Target Android API, should be as high as possible.
android.api = 26

# (int) Minimum API your APK will support.
android.minapi = 21

# (str) Android NDK version to use
android.ndk = 17c

# (int) Android NDK API to use. This is the minimum API your app will support, it should usually match android.minapi.
android.ndk_api = 21

# (bool) Use --private data storage (True) or --dir public storage (False)
#android.private_storage = True

# (str) Android NDK directory (if empty, it will be automatically downloaded.)
#android.ndk_path =

# (str) Android SDK directory (if empty, it will be automatically downloaded.)
#android.sdk_path =

# (str) ANT directory (if empty, it will be automatically downloaded.)
#android.ant_path =

# (bool) If True, then skip trying to update the Android sdk
# This can be useful to avoid excess Internet downloads or save time
# when an update is due and you just want to test/build your package
# android.skip_update = False

# (bool) If True, then automatically accept SDK license
# agreements. This is intended for automation only. If set to False,
# the default, you will be shown the license when first running
# buildozer.
android.accept_sdk_license = True

# (str) Android entry point, default is ok for Kivy-based app
#android.entrypoint = org.renpy.android.PythonActivity

# (list) Pattern to whitelist for the whole project
#android.whitelist =

# (str) Path to a custom whitelist file
#android.whitelist_src =

# (str) Path to a custom blacklist file
#android.blacklist_src =

# (list) List of Java .jar files to add to the libs so that pyjnius can access
# their classes. Don't add jars that you do not need, since extra jars can slow
# down the build process. Allows wildcards matching, for example:
# OUYA-ODK/libs/*.jar
#android.add_jars = foo.jar,bar.jar,path/to/more/*.jar

# (list) List of Java files to add to the android project (can be java or a
# directory containing the files)
#android.add_src =

# (list) Android AAR archives to add (currently works only with sdl2_gradle
# bootstrap)
#android.add_aars =

# (list) Gradle dependencies to add (currently works only with sdl2_gradle
# bootstrap)
#android.gradle_dependencies =

# (list) Java classes to add as activities to the manifest.
#android.add_activites = com.example.ExampleActivity

# (str) python-for-android branch to use, defaults to master
#p4a.branch = master

# (str) OUYA Console category. Should be one of GAME or APP
# If you leave this blank, OUYA support will not be enabled
#android.ouya.category = GAME

# (str) Filename of OUYA Console icon. It must be a 732x412 png image.
#android.ouya.icon.filename = %(source.dir)s/data/ouya_icon.png

# (str) XML file to include as an intent filters in <activity> tag
#android.manifest.intent_filters =

# (str) launchMode to set for the main activity
#android.manifest.launch_mode = standard

# (list) Android additional libraries to copy into libs/armeabi
#android.add_libs_armeabi = libs/android/*.so
#android.add_libs_armeabi_v7a = libs/android-v7/*.so
#android.add_libs_x86 = libs/android-x86/*.so
#android.add_libs_mips = libs/android-mips/*.so

# (bool) Indicate whether the screen should stay on
# Don't forget to add the WAKE_LOCK permission if you set this to True
#android.wakelock = False

# (list) Android application meta-data to set (key=value format)
#android.meta_data =

# (list) Android library project to add (will be added in the
# project.properties automatically.)
#android.library_references =

# (list) Android shared libraries which will be added to AndroidManifest.xml using <uses-library> tag
#android.uses_library =

# (str) Android logcat filters to use
#android.logcat_filters = *:S python:D

# (bool) Copy library instead of making a libpymodules.so
#android.copy_libs = 1

# (str) The Android arch to build for, choices: armeabi-v7a, arm64-v8a, x86, x86_64
android.arch = armeabi-v7a

#
# Python for android (p4a) specific
#

# (str) python-for-android git clone directory (if empty, it will be automatically cloned from github)
#p4a.source_dir =

# (str) The directory in which python-for-android should look for your own build recipes (if any)
#p4a.local_recipes =

# (str) Filename to the hook for p4a
#p4a.hook =

# (str) Bootstrap to use for android builds
# p4a.bootstrap = sdl2

# (int) port number to specify an explicit --port= p4a argument (eg for bootstrap flask)
#p4a.port =


#
# iOS specific
#

# (str) Path to a custom kivy-ios folder
#ios.kivy_ios_dir = ../kivy-ios
# Alternately, specify the URL and branch of a git checkout:
ios.kivy_ios_url = https://github.com/kivy/kivy-ios
ios.kivy_ios_branch = master

# Another platform dependency: ios-deploy
# Uncomment to use a custom checkout
#ios.ios_deploy_dir = ../ios_deploy
# Or specify URL and branch
ios.ios_deploy_url = https://github.com/phonegap/ios-deploy
ios.ios_deploy_branch = 1.7.0

# (str) Name of the certificate to use for signing the debug version
# Get a list of available identities: buildozer ios list_identities
#ios.codesign.debug = "iPhone Developer: <lastname> <firstname> (<hexstring>)"

# (str) Name of the certificate to use for signing the release version
#ios.codesign.release = %(ios.codesign.debug)s


[buildozer]

# (int) Log level (0 = error only, 1 = info, 2 = debug (with command output))
log_level = 2

# (int) Display warning if buildozer is run as root (0 = False, 1 = True)
warn_on_root = 1

# (str) Path to build artifact storage, absolute or relative to spec file
# build_dir = ./.buildozer

# (str) Path to build output (i.e. .apk, .ipa) storage
# bin_dir = ./bin

#    -----------------------------------------------------------------------------
#    List as sections
#
#    You can define all the "list" as [section:key].
#    Each line will be considered as a option to the list.
#    Let's take [app] / source.exclude_patterns.
#    Instead of doing:
#
#[app]
#source.exclude_patterns = license,data/audio/*.wav,data/images/original/*
#
#    This can be translated into:
#
#[app:source.exclude_patterns]
#license
#data/audio/*.wav
#data/images/original/*
#


#    -----------------------------------------------------------------------------
#    Profiles
#
#    You can extend section / key with a profile
#    For example, you want to deploy a demo version of your application without
#    HD content. You could first change the title to add "(demo)" in the name
#    and extend the excluded directories to remove the HD content.
#
#[app@demo]
#title = My Application (demo)
#
#[app:source.exclude_patterns@demo]
#images/hd/*
#
#    Then, invoke the command line with the "demo" profile:
#
#buildozer --profile demo android debug

Logs

user@717394c35664:~/hostcwd$ buildozer android deploy run
# Check configuration tokens
# Ensure build layout
# Check configuration tokens
# Preparing build
# Check requirements for android
# Run 'dpkg --version'
# Cwd None
Debian 'dpkg' package management program version 1.19.0.5 (amd64).
This is free software; see the GNU General Public License version 2 or
later for copying conditions. There is NO warranty.
# Search for Git (git)
#  -> found at /usr/bin/git
# Search for Cython (cython)
#  -> found at /home/user/.local/bin/cython
# Search for Java compiler (javac)
#  -> found at /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
# Search for Java keytool (keytool)
#  -> found at /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/keytool
# Install platform
# Run '/usr/bin/python3 -m pip install -q --user \'appdirs\' \'colorama>=0.3.3\' \'jinja2\' \'six\' \'enum34; python_version<"3.4"\' \'sh>=1.10; sys_platform!="nt"\' \'pep517\' \'pytoml\' \'virtualenv\''
# Cwd None
# Apache ANT found at /home/user/.buildozer/android/platform/apache-ant-1.9.4
# Android SDK found at /home/user/.buildozer/android/platform/android-sdk
# Android NDK found at /home/user/.buildozer/android/platform/android-ndk-r17c
# Check application requirements
# Check garden requirements
# Compile platform
# Run '/usr/bin/python3 -m pythonforandroid.toolchain create --dist_name=myapp--bootstrap=sdl2 --requirements=python3,kivy,android,openssl --arch armeabi-v7a --copy-libs --color=always --storage-dir="/home/user/hostcwd/.buildozer/android/platform/build" --ndk-api=21'
# Cwd /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Will compile for the following archs: armeabi-v7a
[INFO]:    Found Android API target in $ANDROIDAPI: 26
[INFO]:    Available Android APIs are (26)
[INFO]:    Requested API target 26 is available, continuing.
[INFO]:    Found NDK dir in $ANDROIDNDK: /home/user/.buildozer/android/platform/android-ndk-r17c
[INFO]:    Found NDK revision 17.2.4988734
[INFO]:    Getting NDK API version (i.e. minimum supported API) from user argument
[INFO]:    Found virtualenv at /home/user/.local/bin/virtualenv
[INFO]:    Found the following toolchain versions: ['4.9']
[INFO]:    Picking the latest gcc toolchain, here 4.9
[INFO]:    No existing dists meet the given requirements!
[INFO]:    No dist exists that meets your requirements, so one will be built.
[INFO]:    Found a single valid recipe set: ['hostpython3', 'libffi', 'openssl', 'sdl2_image', 'sdl2_mixer', 'sdl2_ttf', 'sqlite3', 'python3', 'sdl2', 'six', 'pyjnius', 'android', 'kivy']
[INFO]:    The selected bootstrap is sdl2
[INFO]:    # Creating dist with sdl2 bootstrap
[INFO]:    Dist will have name myappand requirements (python3, kivy, android, openssl)
[INFO]:    Dist contains the following requirements as recipes: ['hostpython3', 'libffi', 'openssl', 'sdl2_image', 'sdl2_mixer', 'sdl2_ttf', 'sqlite3', 'python3', 'sdl2', 'six', 'pyjnius', 'android', 'kivy']
[INFO]:    Dist will also contain modules () installed from pip
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/build/bootstrap_builds/sdl2-python3
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Recipe build order is ['hostpython3', 'libffi', 'openssl', 'sdl2_image', 'sdl2_mixer', 'sdl2_ttf', 'sqlite3', 'python3', 'sdl2', 'six', 'pyjnius', 'android', 'kivy']
[INFO]:    # Downloading recipes 
[INFO]:    Downloading hostpython3
[INFO]:    -> running mkdir -p /home/user/hostcwd/.buildozer/android/platform/build/packages/hostpython3
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/packages/hostpython3
[INFO]:    -> running basename https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
[INFO]:    hostpython3 download already cached, skipping
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Downloading libffi
[INFO]:    -> running mkdir -p /home/user/hostcwd/.buildozer/android/platform/build/packages/libffi
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/packages/libffi
[INFO]:    -> running basename https://github.com/libffi/libffi/archive/v3.2.1.tar.gz
[INFO]:    libffi download already cached, skipping
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Downloading openssl
[INFO]:    -> running mkdir -p /home/user/hostcwd/.buildozer/android/platform/build/packages/openssl
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/packages/openssl
[INFO]:    -> running basename https://www.openssl.org/source/openssl-1.1.1.tar.gz
[INFO]:    openssl download already cached, skipping
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Downloading sdl2_image
[INFO]:    -> running mkdir -p /home/user/hostcwd/.buildozer/android/platform/build/packages/sdl2_image
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/packages/sdl2_image
[INFO]:    -> running basename https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.4.tar.gz
[INFO]:    sdl2_image download already cached, skipping
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Downloading sdl2_mixer
[INFO]:    -> running mkdir -p /home/user/hostcwd/.buildozer/android/platform/build/packages/sdl2_mixer
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/packages/sdl2_mixer
[INFO]:    -> running basename https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.4.tar.gz
[INFO]:    sdl2_mixer download already cached, skipping
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Downloading sdl2_ttf
[INFO]:    -> running mkdir -p /home/user/hostcwd/.buildozer/android/platform/build/packages/sdl2_ttf
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/packages/sdl2_ttf
[INFO]:    -> running basename https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.14.tar.gz
[INFO]:    sdl2_ttf download already cached, skipping
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Downloading sqlite3
[INFO]:    -> running mkdir -p /home/user/hostcwd/.buildozer/android/platform/build/packages/sqlite3
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/packages/sqlite3
[INFO]:    -> running basename https://www.sqlite.org/2016/sqlite-amalgamation-3150100.zip
[INFO]:    sqlite3 download already cached, skipping
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Downloading python3
[INFO]:    -> running mkdir -p /home/user/hostcwd/.buildozer/android/platform/build/packages/python3
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/packages/python3
[INFO]:    -> running basename https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
[INFO]:    python3 download already cached, skipping
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Downloading sdl2
[INFO]:    -> running mkdir -p /home/user/hostcwd/.buildozer/android/platform/build/packages/sdl2
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/packages/sdl2
[INFO]:    -> running basename https://www.libsdl.org/release/SDL2-2.0.9.tar.gz
[INFO]:    sdl2 download already cached, skipping
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Downloading six
[INFO]:    -> running mkdir -p /home/user/hostcwd/.buildozer/android/platform/build/packages/six
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/packages/six
[INFO]:    -> running basename https://pypi.python.org/packages/source/s/six/six-1.9.0.tar.gz
[INFO]:    six download already cached, skipping
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Downloading pyjnius
[INFO]:    -> running mkdir -p /home/user/hostcwd/.buildozer/android/platform/build/packages/pyjnius
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/packages/pyjnius
[INFO]:    -> running basename https://github.com/kivy/pyjnius/archive/6553ad4.zip
[INFO]:    pyjnius download already cached, skipping
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Downloading android
[INFO]:    Skipping android download as no URL is set
[INFO]:    Downloading kivy
[INFO]:    -> running mkdir -p /home/user/hostcwd/.buildozer/android/platform/build/packages/kivy
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/packages/kivy
[INFO]:    -> running basename https://github.com/kivy/kivy/archive/44a8a6f.zip
[INFO]:    kivy download already cached, skipping
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    # Building all recipes for arch armeabi-v7a
[INFO]:    # Unpacking recipes
[INFO]:    Unpacking hostpython3 for armeabi-v7a
[INFO]:    -> running basename https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/build/other_builds/hostpython3/desktop
[INFO]:    hostpython3 is already unpacked, skipping
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Unpacking libffi for armeabi-v7a
[INFO]:    -> running basename https://github.com/libffi/libffi/archive/v3.2.1.tar.gz
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/build/other_builds/libffi/armeabi-v7a__ndk_target_21
[INFO]:    libffi is already unpacked, skipping
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Unpacking openssl for armeabi-v7a
[INFO]:    -> running basename https://www.openssl.org/source/openssl-1.1.1.tar.gz
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/build/other_builds/openssl/armeabi-v7a__ndk_target_21
[INFO]:    openssl is already unpacked, skipping
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Unpacking sdl2_image for armeabi-v7a
[INFO]:    -> running basename https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.4.tar.gz
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build/build/bootstrap_builds/sdl2-python3/jni
Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/user/hostcwd/.buildozer/android/platform/python-for-android/pythonforandroid/toolchain.py", line 1186, in <module>
    main()
  File "/home/user/hostcwd/.buildozer/android/platform/python-for-android/pythonforandroid/toolchain.py", line 1180, in main
    ToolchainCL()
  File "/home/user/hostcwd/.buildozer/android/platform/python-for-android/pythonforandroid/toolchain.py", line 663, in __init__
    getattr(self, args.subparser_name.replace('-', '_'))(args)
  File "/home/user/hostcwd/.buildozer/android/platform/python-for-android/pythonforandroid/toolchain.py", line 152, in wrapper_func
    build_dist_from_args(ctx, dist, args)
  File "/home/user/hostcwd/.buildozer/android/platform/python-for-android/pythonforandroid/toolchain.py", line 205, in build_dist_from_args
    args, "ignore_setup_py", False
  File "/home/user/hostcwd/.buildozer/android/platform/python-for-android/pythonforandroid/build.py", line 544, in build_recipes
    recipe.prepare_build_dir(arch.arch)
  File "/home/user/hostcwd/.buildozer/android/platform/python-for-android/pythonforandroid/recipe.py", line 510, in prepare_build_dir
    self.unpack(arch)
  File "/home/user/hostcwd/.buildozer/android/platform/python-for-android/pythonforandroid/recipe.py", line 409, in unpack
    sh.tar('xf', extraction_filename)
  File "/home/user/.local/lib/python3.6/site-packages/sh.py", line 1427, in __call__
    return RunningCommand(cmd, call_args, stdin, stdout, stderr)
  File "/home/user/.local/lib/python3.6/site-packages/sh.py", line 774, in __init__
    self.wait()
  File "/home/user/.local/lib/python3.6/site-packages/sh.py", line 792, in wait
    self.handle_command_exit_code(exit_code)
  File "/home/user/.local/lib/python3.6/site-packages/sh.py", line 815, in handle_command_exit_code
    raise exc
sh.ErrorReturnCode_2:

  RAN: /bin/tar xf /home/user/hostcwd/.buildozer/android/platform/build/packages/sdl2_image/SDL2_image-2.0.4.tar.gz

  STDOUT:


  STDERR:
/bin/tar: SDL2_image-2.0.4/Xcode/Frameworks/webp.framework/Resources: Cannot utime: Operation not permitted
/bin/tar: SDL2_image-2.0.4/Xcode/Frameworks/webp.framework/webp: Cannot utime: Operation not permitted
/bin/tar: SDL2_image-2.0.4/Xcode/Frameworks/webp.framework/Headers: Cannot utime: Operation not permitted
/bin/tar: SDL2_image-2.0.4/Xcode/Frameworks/webp.framework/Versions/Current: Cannot utime: Operation not permitted
/bin/tar: Exiting with failure status due to previous errors

# Command failed: /usr/bin/python3 -m pythonforandroid.toolchain create --dist_name=myapp--bootstrap=sdl2 --requirements=python3,kivy,android,openssl --arch armeabi-v7a --copy-libs --color=always --storage-dir="/home/user/hostcwd/.buildozer/android/platform/build" --ndk-api=21
# ENVIRONMENT:
#     LC_ALL = 'en_US.UTF-8'
#     LS_COLORS = 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'
#     LANG = 'en_US.UTF-8'
#     HOSTNAME = '717394c35664'
#     HOME_DIR = '/home/user'
#     USER = 'user'
#     SRC_DIR = '/home/user/src'
#     PWD = '/home/user/hostcwd'
#     HOME = '/home/user'
#     TERM = 'xterm'
#     SHLVL = '1'
#     LANGUAGE = 'en_US.UTF-8'
#     PATH = '/home/user/.buildozer/android/platform/apache-ant-1.9.4/bin:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
#     WORK_DIR = '/home/user/hostcwd'
#     _ = '/home/user/.local/bin/buildozer'
#     PACKAGES_PATH = '/home/user/.buildozer/android/packages'
#     ANDROIDSDK = '/home/user/.buildozer/android/platform/android-sdk'
#     ANDROIDNDK = '/home/user/.buildozer/android/platform/android-ndk-r17c'
#     ANDROIDAPI = '26'
#     ANDROIDMINAPI = '21'
# 
# Buildozer failed to execute the last command
# The error might be hidden in the log above this error
# Please read the full log, and search for it before
# raising an issue with buildozer itself.
# In case of a bug report, please add a full log with log_level = 2

I already try: "chown $USER -R /home/user/hostcwd/"
Any ideas ?

Thank's !

@Sirfanas Sirfanas changed the title Can't compile apk: /bin/tar ... "Cannot utime: Operation not permitted" [Docker image] Can't compile apk: /bin/tar ... "Cannot utime: Operation not permitted" May 19, 2019
@Sirfanas
Copy link
Contributor Author

Just to add some test:
I try to use a volume so I do that:

docker volume create buildozer_data
docker run --interactive --tty --rm --volume buildozer_data:/home/user/.buildozer --volume ${pwd}:/home/user/hostcwd --entrypoint /bin/bash kivy/buildozer

Then I use

buildozer android debug deploy

The error appair exactly the same so I did

sudo chown $USER -R /home/user/hostcwd/.buildozer
buildozer android debug deploy

But error still appear...

Hope someone help me, may I done something wrong ?
Thank's

@AndreMiras
Copy link
Member

Yes I had permission issues with Docker/buildozer in the past, but not like that. It's usually tricky, but if we find out we should add to troubleshooting guide.
Regarding the chown command, did you run it from the host or from the container?
In that comment I suggest to run it from the host for a similar issue with ~/.buildozer:
https://github.com/kivy/buildozer/blob/831d85a/Dockerfile#L21
So I would give that a try, in this case yes it could be an issue with your $PWD/.buildozer/ (the one local of your project, not the one in the home). So try that from the host:

sudo chown $USER -R $PWD/.buildozer/

@Sirfanas
Copy link
Contributor Author

I can't do that from the host cause host is... Windows ^^'

So I actually did what seem to be the equivalent:

takeown /F myapp /R
icacls myapp /grant:r romai:F /T

Of curse myapp is the folder where all my kivy app is (including buildozer.spec) and romai is my current user

But it still crash for same problem

Any idea ?

@AndreMiras
Copy link
Member

I can't do that from the host cause host is... Windows ^^'

Oh yes true story.

Any idea ?

OK then it would be great to really isolate the problem in a super simple reproduction. The best would be to narrow the reproduction down to a single command. For instance you find out that just running a chmod, touch or whatever command from the container produces this error. Then if you have it share it on this ticket that would help

@Sirfanas
Copy link
Contributor Author

Hi,
So I made a few test and here what I got:

cd /home/user/hostcwd/.buildozer/android/platform/build/packages/sdl2_image
ls
	Output: SDL2_image-2.0.4.tar.gz

touch test
ls
	Output: SDL2_image-2.0.4.tar.gz  test
echo "It's working !" > test
cat test
	Output: It's working !

# As the previous command works, I try to tar xf on the file buildozer try to:
tar xf SDL2_image-2.0.4.tar.gz
Output: 
	tar: SDL2_image-2.0.4/Xcode/Frameworks/webp.framework/Resources: Cannot utime: Operation not permitted
	tar: SDL2_image-2.0.4/Xcode/Frameworks/webp.framework/webp: Cannot utime: Operation not permitted
	tar: SDL2_image-2.0.4/Xcode/Frameworks/webp.framework/Headers: Cannot utime: Operation not permitted
	tar: SDL2_image-2.0.4/Xcode/Frameworks/webp.framework/Versions/Current: Cannot utime: Operation not permitted
	tar: Exiting with failure status due to previous errors

So I can create and edit file, but tar still fail

As a temporary solution, I'll try to use Buildozer image as an "under os", so I'll make a persistent container and move the .buildozer folder in a non shared volume to see if it work, if it did then it will do the job for me, but if a better solution is found I'll take it ^^

Not closing the issue now, I'll put my feedback of my test after that so if somebody else meet the problem he can do the same

Thank's

@Sirfanas
Copy link
Contributor Author

Well, so I finally build my app, here the step I used:

First, create buildozer container to use it as a "subsystem" (not as a service so I think subsytem is a better call):

docker run --interactive --tty --name=buildozer --volume ${pwd}:/home/user/hostcwd/kivy_app --entrypoint "/bin/bash" kivy/buildozer

Then leave it, to go inside the container:

docker start -ai buildozer

When I first try to compile I got a permission denied on .buildozer folder so I did

sudo chown $USER .

Note I don't use '-R' arguments cause it's only a current dir permission problem

Then to compile:

cp kivy_app/buildozer.spec ./ && buildozer android debug deploy

I then do that to put the apk in my build folder of my shared volumes

mv bin/*.apk kivy_app/build/

So the final architecture of the foler is so (in the container):
/home/user/hostcwd # Where I use my previous command
|----kivy_app # My shared volume
|---buildozer.spec
|---build/ # Folder where apk will be
|---main.py
|---All other file of your app

It actually work, it may not be the best solution, but it work.
Hope someone find a better fix than mine

Thank's !

@AndreMiras
Copy link
Member

Thanks for sharing it!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants