Missing service file for pure-ftpd

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP












1















Background



I want to change some options of Pure-FTPD. Since it has no config file, I need to add command line arguments. My system is Debian Stretch, which uses systemd.




What I tried



There is no pure-ftpd.service file in /etc/systemd/* nor in /usr/lib/systemd/*. I ran updatedb and then locate pure-ftpd which gave no results. Running systemctl status pure-ftpd (or other commands such as restart) works fine.



Finally I found a way to make edits: systemctl edit pure-ftpd. As suggested by another answer on this site, I typed [Service] n ExecStart=/usr/sbin/pure-ftpd -my options and hit :wq. Systemd reloads the service and all is well.



Running systemctl status pure-ftpd, it tells me:




pure-ftpd.service: Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.




I don't know what a oneshot service is. The documentation doesn't say when to use which, only "it is expected that the process has to exit before systemd starts follow-up units". I don't want systemd to wait for pure-ftpd to exit before starting other "units" (other services?) so that's not an option.



Grepping for pure (grep -r pure) in both /etc/systemd and /usr/lib/systemd gives only the result that I made myself: /etc/systemd/system/pure-ftpd.service.d/override.conf. There does not appear to be a service file, yet it complains about a doubly defined ExecStart option.



Calling /etc/init.d/pure-ftpd directly does not work either. Tracing that shell script, I see systemd hooked into this and hijacks it.



I also ran strace systemd restart pure-ftpd. Scrolling through, this catches my eye:



socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
connect(3, sa_family=AF_UNIX, sun_path="/run/systemd/private", 22) = 0
sendmsg(3, msg_name=NULL, msg_namelen=0, msg_iov=[iov_base="AUTH EXTERNAL ", iov_len=15, iov_base="30", iov_len=2, iov_base="rnNEGOTIATE_UNIX_FDrnBEGINrn", iov_len=28], msg_iovlen=3, msg_controllen=0, msg_flags=0, MSG_DONTWAIT|MSG_NOSIGNAL) = 45
sendmsg(3, msg_name=NULL, msg_namelen=0, msg_iov=[iov_base="l141$124011o31/org/fre"..., iov_len=176, iov_base="21pure-ftpd.service7repl"..., iov_len=36], msg_iovlen=2, msg_controllen=0, msg_flags=0, MSG_DONTWAIT|MSG_NOSIGNAL) = 212
---------------------->---------------------->---------------------->---------------------->---------------------->--------------------------^^^


So it sends something about "21pure-ftpd.service7repl"... over a unix socket. And evidently, systemd gets what it's talking about. It appears to me as if there is a template service file which is used by default if the real one is absent.



Attaching strace to the owner of /run/systemd/private (unsurprisingly: PID 1 / init), I see the authentication and the freedesktop message coming in, after which it immediately replies with an error message about the service not being properly loaded. It never checks for the existence of any files nor does it read from any.




Workarounds



  • I can systemctl disable pure-ftpd and edit the init.d file so it doesn't hook into systemd. But that's just an ugly hack. There should be a better way.

  • After typing all this, I found another answer describing that you can -- after all! -- do it via a config file and start pure-ftpd-wrapper (which is the default in the init.d script, but who knows whether systemd uses that). However, now I want to know the answer to the actual question:


Question



How do I provide additional command line options?










share|improve this question


























    1















    Background



    I want to change some options of Pure-FTPD. Since it has no config file, I need to add command line arguments. My system is Debian Stretch, which uses systemd.




    What I tried



    There is no pure-ftpd.service file in /etc/systemd/* nor in /usr/lib/systemd/*. I ran updatedb and then locate pure-ftpd which gave no results. Running systemctl status pure-ftpd (or other commands such as restart) works fine.



    Finally I found a way to make edits: systemctl edit pure-ftpd. As suggested by another answer on this site, I typed [Service] n ExecStart=/usr/sbin/pure-ftpd -my options and hit :wq. Systemd reloads the service and all is well.



    Running systemctl status pure-ftpd, it tells me:




    pure-ftpd.service: Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.




    I don't know what a oneshot service is. The documentation doesn't say when to use which, only "it is expected that the process has to exit before systemd starts follow-up units". I don't want systemd to wait for pure-ftpd to exit before starting other "units" (other services?) so that's not an option.



    Grepping for pure (grep -r pure) in both /etc/systemd and /usr/lib/systemd gives only the result that I made myself: /etc/systemd/system/pure-ftpd.service.d/override.conf. There does not appear to be a service file, yet it complains about a doubly defined ExecStart option.



    Calling /etc/init.d/pure-ftpd directly does not work either. Tracing that shell script, I see systemd hooked into this and hijacks it.



    I also ran strace systemd restart pure-ftpd. Scrolling through, this catches my eye:



    socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
    connect(3, sa_family=AF_UNIX, sun_path="/run/systemd/private", 22) = 0
    sendmsg(3, msg_name=NULL, msg_namelen=0, msg_iov=[iov_base="AUTH EXTERNAL ", iov_len=15, iov_base="30", iov_len=2, iov_base="rnNEGOTIATE_UNIX_FDrnBEGINrn", iov_len=28], msg_iovlen=3, msg_controllen=0, msg_flags=0, MSG_DONTWAIT|MSG_NOSIGNAL) = 45
    sendmsg(3, msg_name=NULL, msg_namelen=0, msg_iov=[iov_base="l141$124011o31/org/fre"..., iov_len=176, iov_base="21pure-ftpd.service7repl"..., iov_len=36], msg_iovlen=2, msg_controllen=0, msg_flags=0, MSG_DONTWAIT|MSG_NOSIGNAL) = 212
    ---------------------->---------------------->---------------------->---------------------->---------------------->--------------------------^^^


    So it sends something about "21pure-ftpd.service7repl"... over a unix socket. And evidently, systemd gets what it's talking about. It appears to me as if there is a template service file which is used by default if the real one is absent.



    Attaching strace to the owner of /run/systemd/private (unsurprisingly: PID 1 / init), I see the authentication and the freedesktop message coming in, after which it immediately replies with an error message about the service not being properly loaded. It never checks for the existence of any files nor does it read from any.




    Workarounds



    • I can systemctl disable pure-ftpd and edit the init.d file so it doesn't hook into systemd. But that's just an ugly hack. There should be a better way.

    • After typing all this, I found another answer describing that you can -- after all! -- do it via a config file and start pure-ftpd-wrapper (which is the default in the init.d script, but who knows whether systemd uses that). However, now I want to know the answer to the actual question:


    Question



    How do I provide additional command line options?










    share|improve this question
























      1












      1








      1








      Background



      I want to change some options of Pure-FTPD. Since it has no config file, I need to add command line arguments. My system is Debian Stretch, which uses systemd.




      What I tried



      There is no pure-ftpd.service file in /etc/systemd/* nor in /usr/lib/systemd/*. I ran updatedb and then locate pure-ftpd which gave no results. Running systemctl status pure-ftpd (or other commands such as restart) works fine.



      Finally I found a way to make edits: systemctl edit pure-ftpd. As suggested by another answer on this site, I typed [Service] n ExecStart=/usr/sbin/pure-ftpd -my options and hit :wq. Systemd reloads the service and all is well.



      Running systemctl status pure-ftpd, it tells me:




      pure-ftpd.service: Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.




      I don't know what a oneshot service is. The documentation doesn't say when to use which, only "it is expected that the process has to exit before systemd starts follow-up units". I don't want systemd to wait for pure-ftpd to exit before starting other "units" (other services?) so that's not an option.



      Grepping for pure (grep -r pure) in both /etc/systemd and /usr/lib/systemd gives only the result that I made myself: /etc/systemd/system/pure-ftpd.service.d/override.conf. There does not appear to be a service file, yet it complains about a doubly defined ExecStart option.



      Calling /etc/init.d/pure-ftpd directly does not work either. Tracing that shell script, I see systemd hooked into this and hijacks it.



      I also ran strace systemd restart pure-ftpd. Scrolling through, this catches my eye:



      socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
      connect(3, sa_family=AF_UNIX, sun_path="/run/systemd/private", 22) = 0
      sendmsg(3, msg_name=NULL, msg_namelen=0, msg_iov=[iov_base="AUTH EXTERNAL ", iov_len=15, iov_base="30", iov_len=2, iov_base="rnNEGOTIATE_UNIX_FDrnBEGINrn", iov_len=28], msg_iovlen=3, msg_controllen=0, msg_flags=0, MSG_DONTWAIT|MSG_NOSIGNAL) = 45
      sendmsg(3, msg_name=NULL, msg_namelen=0, msg_iov=[iov_base="l141$124011o31/org/fre"..., iov_len=176, iov_base="21pure-ftpd.service7repl"..., iov_len=36], msg_iovlen=2, msg_controllen=0, msg_flags=0, MSG_DONTWAIT|MSG_NOSIGNAL) = 212
      ---------------------->---------------------->---------------------->---------------------->---------------------->--------------------------^^^


      So it sends something about "21pure-ftpd.service7repl"... over a unix socket. And evidently, systemd gets what it's talking about. It appears to me as if there is a template service file which is used by default if the real one is absent.



      Attaching strace to the owner of /run/systemd/private (unsurprisingly: PID 1 / init), I see the authentication and the freedesktop message coming in, after which it immediately replies with an error message about the service not being properly loaded. It never checks for the existence of any files nor does it read from any.




      Workarounds



      • I can systemctl disable pure-ftpd and edit the init.d file so it doesn't hook into systemd. But that's just an ugly hack. There should be a better way.

      • After typing all this, I found another answer describing that you can -- after all! -- do it via a config file and start pure-ftpd-wrapper (which is the default in the init.d script, but who knows whether systemd uses that). However, now I want to know the answer to the actual question:


      Question



      How do I provide additional command line options?










      share|improve this question














      Background



      I want to change some options of Pure-FTPD. Since it has no config file, I need to add command line arguments. My system is Debian Stretch, which uses systemd.




      What I tried



      There is no pure-ftpd.service file in /etc/systemd/* nor in /usr/lib/systemd/*. I ran updatedb and then locate pure-ftpd which gave no results. Running systemctl status pure-ftpd (or other commands such as restart) works fine.



      Finally I found a way to make edits: systemctl edit pure-ftpd. As suggested by another answer on this site, I typed [Service] n ExecStart=/usr/sbin/pure-ftpd -my options and hit :wq. Systemd reloads the service and all is well.



      Running systemctl status pure-ftpd, it tells me:




      pure-ftpd.service: Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.




      I don't know what a oneshot service is. The documentation doesn't say when to use which, only "it is expected that the process has to exit before systemd starts follow-up units". I don't want systemd to wait for pure-ftpd to exit before starting other "units" (other services?) so that's not an option.



      Grepping for pure (grep -r pure) in both /etc/systemd and /usr/lib/systemd gives only the result that I made myself: /etc/systemd/system/pure-ftpd.service.d/override.conf. There does not appear to be a service file, yet it complains about a doubly defined ExecStart option.



      Calling /etc/init.d/pure-ftpd directly does not work either. Tracing that shell script, I see systemd hooked into this and hijacks it.



      I also ran strace systemd restart pure-ftpd. Scrolling through, this catches my eye:



      socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
      connect(3, sa_family=AF_UNIX, sun_path="/run/systemd/private", 22) = 0
      sendmsg(3, msg_name=NULL, msg_namelen=0, msg_iov=[iov_base="AUTH EXTERNAL ", iov_len=15, iov_base="30", iov_len=2, iov_base="rnNEGOTIATE_UNIX_FDrnBEGINrn", iov_len=28], msg_iovlen=3, msg_controllen=0, msg_flags=0, MSG_DONTWAIT|MSG_NOSIGNAL) = 45
      sendmsg(3, msg_name=NULL, msg_namelen=0, msg_iov=[iov_base="l141$124011o31/org/fre"..., iov_len=176, iov_base="21pure-ftpd.service7repl"..., iov_len=36], msg_iovlen=2, msg_controllen=0, msg_flags=0, MSG_DONTWAIT|MSG_NOSIGNAL) = 212
      ---------------------->---------------------->---------------------->---------------------->---------------------->--------------------------^^^


      So it sends something about "21pure-ftpd.service7repl"... over a unix socket. And evidently, systemd gets what it's talking about. It appears to me as if there is a template service file which is used by default if the real one is absent.



      Attaching strace to the owner of /run/systemd/private (unsurprisingly: PID 1 / init), I see the authentication and the freedesktop message coming in, after which it immediately replies with an error message about the service not being properly loaded. It never checks for the existence of any files nor does it read from any.




      Workarounds



      • I can systemctl disable pure-ftpd and edit the init.d file so it doesn't hook into systemd. But that's just an ugly hack. There should be a better way.

      • After typing all this, I found another answer describing that you can -- after all! -- do it via a config file and start pure-ftpd-wrapper (which is the default in the init.d script, but who knows whether systemd uses that). However, now I want to know the answer to the actual question:


      Question



      How do I provide additional command line options?







      systemd startup arguments pure-ftpd






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jun 18 '17 at 0:04









      LucLuc

      9721921




      9721921




















          1 Answer
          1






          active

          oldest

          votes


















          1














          Did you know that systemd comes with some generators that generate the pure-ftpd.service file for you? The result is a not so nice unit file, but working.



          The folder where it is generated is /run/systemd/generator.late
          You can see the source with cat pure-ftpd.service



          Then, create a new /lib/systemd/system/pure-ftpd.service and put the contents of the /run/ unit in there (then you will be able to tune in the code of the unit).



          Take in consideration that init.d is no longer used by debian (while using systemd) and all the non serviced services are generated automatically with the generators.



          More info:



          https://www.freedesktop.org/software/systemd/man/systemd.generator.html
          https://www.freedesktop.org/software/systemd/man/systemd-sysv-generator.html




          systemd-sysv-generator is a generator that creates wrapper .service
          units for SysV init scripts in /etc/init.d/* at boot and when
          configuration of the system manager is reloaded. This will allow
          systemd(1) to support them similarly to native units.







          share|improve this answer























          • If I understand your answer correctly, I can just add a regular service file with the same name to prevent systemd from wrapping the init.d file?

            – Luc
            Mar 1 at 10:27











          • @Luc that's it, as the documentation says: Regarding overriding semantics: there are two rules we try to follow when thinking about the overriding semantics: User configuration should override vendor configuration. This (mostly) means that stuff from /etc should override stuff from /usr. Native configuration should override non-native configuration. This (mostly) means that stuff you generate should never override native unit files for the same purpose.

            – Marc Palau
            Mar 4 at 8:29












          Your Answer








          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "106"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f371734%2fmissing-service-file-for-pure-ftpd%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          Did you know that systemd comes with some generators that generate the pure-ftpd.service file for you? The result is a not so nice unit file, but working.



          The folder where it is generated is /run/systemd/generator.late
          You can see the source with cat pure-ftpd.service



          Then, create a new /lib/systemd/system/pure-ftpd.service and put the contents of the /run/ unit in there (then you will be able to tune in the code of the unit).



          Take in consideration that init.d is no longer used by debian (while using systemd) and all the non serviced services are generated automatically with the generators.



          More info:



          https://www.freedesktop.org/software/systemd/man/systemd.generator.html
          https://www.freedesktop.org/software/systemd/man/systemd-sysv-generator.html




          systemd-sysv-generator is a generator that creates wrapper .service
          units for SysV init scripts in /etc/init.d/* at boot and when
          configuration of the system manager is reloaded. This will allow
          systemd(1) to support them similarly to native units.







          share|improve this answer























          • If I understand your answer correctly, I can just add a regular service file with the same name to prevent systemd from wrapping the init.d file?

            – Luc
            Mar 1 at 10:27











          • @Luc that's it, as the documentation says: Regarding overriding semantics: there are two rules we try to follow when thinking about the overriding semantics: User configuration should override vendor configuration. This (mostly) means that stuff from /etc should override stuff from /usr. Native configuration should override non-native configuration. This (mostly) means that stuff you generate should never override native unit files for the same purpose.

            – Marc Palau
            Mar 4 at 8:29
















          1














          Did you know that systemd comes with some generators that generate the pure-ftpd.service file for you? The result is a not so nice unit file, but working.



          The folder where it is generated is /run/systemd/generator.late
          You can see the source with cat pure-ftpd.service



          Then, create a new /lib/systemd/system/pure-ftpd.service and put the contents of the /run/ unit in there (then you will be able to tune in the code of the unit).



          Take in consideration that init.d is no longer used by debian (while using systemd) and all the non serviced services are generated automatically with the generators.



          More info:



          https://www.freedesktop.org/software/systemd/man/systemd.generator.html
          https://www.freedesktop.org/software/systemd/man/systemd-sysv-generator.html




          systemd-sysv-generator is a generator that creates wrapper .service
          units for SysV init scripts in /etc/init.d/* at boot and when
          configuration of the system manager is reloaded. This will allow
          systemd(1) to support them similarly to native units.







          share|improve this answer























          • If I understand your answer correctly, I can just add a regular service file with the same name to prevent systemd from wrapping the init.d file?

            – Luc
            Mar 1 at 10:27











          • @Luc that's it, as the documentation says: Regarding overriding semantics: there are two rules we try to follow when thinking about the overriding semantics: User configuration should override vendor configuration. This (mostly) means that stuff from /etc should override stuff from /usr. Native configuration should override non-native configuration. This (mostly) means that stuff you generate should never override native unit files for the same purpose.

            – Marc Palau
            Mar 4 at 8:29














          1












          1








          1







          Did you know that systemd comes with some generators that generate the pure-ftpd.service file for you? The result is a not so nice unit file, but working.



          The folder where it is generated is /run/systemd/generator.late
          You can see the source with cat pure-ftpd.service



          Then, create a new /lib/systemd/system/pure-ftpd.service and put the contents of the /run/ unit in there (then you will be able to tune in the code of the unit).



          Take in consideration that init.d is no longer used by debian (while using systemd) and all the non serviced services are generated automatically with the generators.



          More info:



          https://www.freedesktop.org/software/systemd/man/systemd.generator.html
          https://www.freedesktop.org/software/systemd/man/systemd-sysv-generator.html




          systemd-sysv-generator is a generator that creates wrapper .service
          units for SysV init scripts in /etc/init.d/* at boot and when
          configuration of the system manager is reloaded. This will allow
          systemd(1) to support them similarly to native units.







          share|improve this answer













          Did you know that systemd comes with some generators that generate the pure-ftpd.service file for you? The result is a not so nice unit file, but working.



          The folder where it is generated is /run/systemd/generator.late
          You can see the source with cat pure-ftpd.service



          Then, create a new /lib/systemd/system/pure-ftpd.service and put the contents of the /run/ unit in there (then you will be able to tune in the code of the unit).



          Take in consideration that init.d is no longer used by debian (while using systemd) and all the non serviced services are generated automatically with the generators.



          More info:



          https://www.freedesktop.org/software/systemd/man/systemd.generator.html
          https://www.freedesktop.org/software/systemd/man/systemd-sysv-generator.html




          systemd-sysv-generator is a generator that creates wrapper .service
          units for SysV init scripts in /etc/init.d/* at boot and when
          configuration of the system manager is reloaded. This will allow
          systemd(1) to support them similarly to native units.








          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Mar 1 at 10:17









          Marc PalauMarc Palau

          263




          263












          • If I understand your answer correctly, I can just add a regular service file with the same name to prevent systemd from wrapping the init.d file?

            – Luc
            Mar 1 at 10:27











          • @Luc that's it, as the documentation says: Regarding overriding semantics: there are two rules we try to follow when thinking about the overriding semantics: User configuration should override vendor configuration. This (mostly) means that stuff from /etc should override stuff from /usr. Native configuration should override non-native configuration. This (mostly) means that stuff you generate should never override native unit files for the same purpose.

            – Marc Palau
            Mar 4 at 8:29


















          • If I understand your answer correctly, I can just add a regular service file with the same name to prevent systemd from wrapping the init.d file?

            – Luc
            Mar 1 at 10:27











          • @Luc that's it, as the documentation says: Regarding overriding semantics: there are two rules we try to follow when thinking about the overriding semantics: User configuration should override vendor configuration. This (mostly) means that stuff from /etc should override stuff from /usr. Native configuration should override non-native configuration. This (mostly) means that stuff you generate should never override native unit files for the same purpose.

            – Marc Palau
            Mar 4 at 8:29

















          If I understand your answer correctly, I can just add a regular service file with the same name to prevent systemd from wrapping the init.d file?

          – Luc
          Mar 1 at 10:27





          If I understand your answer correctly, I can just add a regular service file with the same name to prevent systemd from wrapping the init.d file?

          – Luc
          Mar 1 at 10:27













          @Luc that's it, as the documentation says: Regarding overriding semantics: there are two rules we try to follow when thinking about the overriding semantics: User configuration should override vendor configuration. This (mostly) means that stuff from /etc should override stuff from /usr. Native configuration should override non-native configuration. This (mostly) means that stuff you generate should never override native unit files for the same purpose.

          – Marc Palau
          Mar 4 at 8:29






          @Luc that's it, as the documentation says: Regarding overriding semantics: there are two rules we try to follow when thinking about the overriding semantics: User configuration should override vendor configuration. This (mostly) means that stuff from /etc should override stuff from /usr. Native configuration should override non-native configuration. This (mostly) means that stuff you generate should never override native unit files for the same purpose.

          – Marc Palau
          Mar 4 at 8:29


















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Unix & Linux Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f371734%2fmissing-service-file-for-pure-ftpd%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown






          Popular posts from this blog

          How to check contact read email or not when send email to Individual?

          Displaying single band from multi-band raster using QGIS

          How many registers does an x86_64 CPU actually have?