Giter Club home page Giter Club logo

omaha-server's Introduction

omaha-server

Coverage Status Scrutinizer Code Quality Apache License, Version 2.0

This is the Python 2 version of omaha-server. To obtain the Python 3 version with the latest security updates and support for the latest Omaha versions (including Omaha v3.1 / v4), please go to our web site.

omaha-server implements the server side of Google's Omaha update protocol, which for example powers Chrome's automatic update mechanism. Because Omaha is typically used to update Windows applications, omaha-server also supports the Sparkle framework for updating Mac applications. omaha-server is used by organisations large and small for products that require sophisticated update logic and advanced usage statistics.

Setting up a development server

Requirements:

$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo apt-get install python-paver python-pip
$ sudo pip install -U docker-compose
$ git clone https://github.com/Crystalnix/omaha-server.git
$ cd omaha-server
$ sudo paver up_local_dev_server

# Stop server
$ sudo docker-compose stop

Open http://{DOCKER_HOST}:9090/admin/

  • username: admin
  • password: admin

Setting up a development environment

Requirements:

$ mkvirtualenv omaha-server
$ pip install -r requirements/dev.txt

Tests

$ paver test

or

$ paver run_test_in_docker

Statistics

All statistics are stored in Redis. In order not to lose all data, we recommend to set up the backing up process. The proposed solution uses ElastiCache which supports automatic backups. In the case of a self-hosted solution do not forget to set up backups.

Required userid. Including user id into request

Utils

A command for generating fake data such as requests, events and statistics:

# Usage: ./manage.py generate_fake_data [options] <app_id>
# Options:
#     --count=COUNT         Total number of data values (default: 100)
$ ./manage.py generate_fake_data {F07B3878-CD6F-4B96-B52F-95C4D2} --count=20

A command for generating fake statistics:

# Usage: ./manage.py generate_fake_statistics [options]
# Options:
#     --count=COUNT         Total number of data values (default: 100)
$ ./manage.py generate_fake_statistics --count=3000

A command for generating fake live data:

# Usage: ./manage.py generate_fake_live_data <app_id>
#
$ ./manage.py generate_fake_live_data {c00b6344-038f-4e51-bcb1-33ffdd812d81}

A command for generating fake live data for Mac:

# Usage: ./manage.py generate_fake_mac_live_data <app_name> <channel>
#
$ ./manage.py generate_fake_mac_live_data Application alpha

Deploying Omaha-Server to AWS Elastic Beanstalk

Requirements:

Initializing the Configuration

$ cd deploy
$ cp settings.yml.example settings.yml

To change Omaha-Server configuration, add the settings that you want to modify to the ebs.config file. For example:

deploy:
  aws_access_key: '**********'
  aws_secret_key: '**********'
  bucket: 'example-ebs-archives'
  region: 'us-east-1' # http://docs.aws.amazon.com/general/latest/gr/rande.html#ec2_region

app:
  name: 'omaha-server'
  description: 'Omaha Server'

  key_name: 'omaha_server'

  solution_stack_name: '64bit Amazon Linux 2015.03 v1.4.3 running Docker 1.6.2' # optional default: '64bit Amazon Linux 2015.03 v1.4.3 running Docker 1.6.2'
  InstanceType: 't2.large' # optional default: t2.small http://aws.amazon.com/ec2/instance-types/
  autoscaling: # optional default: min=1 max=10
    min: 4
    max: 20
  healthcheck_url: '/admin/' # optional default: '/healthcheck/status/'

  environments:
    omaha-server-private:
      option_settings: # Configuration Options http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html
        'aws:autoscaling:launchconfiguration':
          IamInstanceProfile: 'omaha-public'
          SecurityGroups: 'omaha-server,omaha-server-private' # If you use Amazon VPC with Elastic Beanstalk so that your instances are launched within a virtual private cloud (VPC), specify security group IDs instead of a security group name.

        'aws:ec2:vpc':
          VPCId: 'vpc-bb6b9fdf'
          Subnets: 'subnet-e386d5ba'
          AssociatePublicIpAddress: 'true'

      environment:
        OMAHA_SERVER_PRIVATE: 'true'
        SECRET_KEY: '**********'
        DB_HOST: 'postgres.example.com'
        DB_USER: 'omaha'
        DB_NAME: 'omaha'
        DB_PASSWORD: '**********'
        AWS_STORAGE_BUCKET_NAME: 'omaha-server'
        RAVEN_DNS: 'http://b3615b99118949dbae3c7d06e93fa74c:[email protected]/2'
        RAVEN_DSN_STACKTRACE: 'http://637c17c832f44663b381916d4e0cb34d:[email protected]/5'
        REDIS_HOST: 'redis.example.com'
        DB_PUBLIC_USER: 'omaha_public'
        DB_PUBLIC_PASSWORD: 'omaha_public_password'
        AWS_ROLE: 'omaha-private'

    omaha-server-public:
      option_settings:
        'aws:autoscaling:launchconfiguration':
          IamInstanceProfile: 'omaha-public'
          SecurityGroups: 'omaha-server,omaha-server-public'
      environment:
        OMAHA_SERVER_PRIVATE: 'false'
        SECRET_KEY: '**********'
        DB_HOST: 'postgres.example.com'
        DB_USER: 'omaha_public'
        DB_NAME: 'omaha'
        DB_PASSWORD: 'omaha_public_password'
        AWS_STORAGE_BUCKET_NAME: 'omaha-server'
        RAVEN_DNS: 'http://b3615b99118949dbae3c7d06e93fa74c:[email protected]/2'
        RAVEN_DSN_STACKTRACE: 'http://637c17c832f44663b381916d4e0cb34d:[email protected]/5'
        REDIS_HOST: 'redis.example.com'
        AWS_ROLE: 'omaha-public'
        DJANGO_SETTINGS_MODULE: 'omaha_server.settings_prod'

Environment variables

Environment variable name Description Default value
APP_VERSION App version DEV
DJANGO_SETTINGS_MODULE omaha_server.settings_prod
SECRET_KEY Django SECRET_KEY
HOST_NAME Eb app host name
DB_HOST DB Host 127.0.0.1
DB_USER DB User postgres
DB_NAME DB Name postgres
DB_PASSWORD DB Password ''
DB_PORT DB port 5432
AWS_ACCESS_KEY_ID AWS Access Key
AWS_SECRET_ACCESS_KEY AWS Secret Key
AWS_STORAGE_BUCKET_NAME S3 storage bucket
RAVEN_DNS Sentry url
RAVEN_DSN_STACKTRACE Sentry url RAVEN_DNS
REDIS_HOST Redis host 127.0.0.1
REDIS_PORT Redis port 6379
REDIS_DB Redis db 1
REDIS_STAT_PORT For statistics REDIS_PORT
REDIS_STAT_HOST REDIS_HOST
REDIS_STAT_DB 15
UWSGI_PROCESSES
UWSGI_THREADS
OMAHA_SERVER_PRIVATE Is private server False
DB_PUBLIC_USER
DB_PUBLIC_PASSWORD
AWS_ROLE
OMAHA_URL_PREFIX no trailing slash!
SENTRY_STACKTRACE_API_KEY Auth API token
OMAHA_ONLY_HTTPS HTTPS-only False
CUP_REQUEST_VALIDATION False
CRASH_TRACKER Sentry, ELK Sentry
LOGSTASH_HOST Logstash host
LOGSTASH_PORT Logstash TCP port
FILEBEAT_HOST Filebeat host 127.0.0.1
FILEBEAT_PORT Filebeat UDP port 9021
ELK_HOST Logstash host ''
ELK_PORT Logstash TCP port ''
FILEBEAT_DESTINATION filebeat output type ''
LOG_NGINX_TO_FILEBEAT Send logs to filebeat 'True'
EMAIL_SENDER Verified SES email
EMAIL_RECIPIENTS Feedback recepients

Initialize your ElasticBeanstalk application

# generate config file
$ python main.py
$ ebs-deploy init

Deploy your application

$ ebs-deploy deploy -e omaha-server-dev

Enable HTTPS

  1. Add SSL Certificate for Elastic Load Balancing
  2. Next, just add the following snippet to your file deploy/settings.yml
# http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options-general.html#command-options-general-elbloadbalancer
'aws:elb:loadbalancer':
  LoadBalancerHTTPSPort: 443
  LoadBalancerSSLPortProtocol: HTTPS
  SSLCertificateId: arn:aws:acm:us-east-1:your-ssl-id # ToDo: change on your SSL ID
  1. Finally, in the case if you want to redirect all HTTP traffic to HTTPS, you can add OMAHA_ONLY_HTTPS: true to environment variables in the environment section. Warning: Please, don't activate the redirection of HTTP to HTTPS if you don't enable HTTPS. It will lead to that an Omaha server won't be accessible.

Enable Client Update Protocol v2

  1. Use Omaha eckeytool to generate private.pem key and cup_ecdsa_pubkey.{KEYID}.h files.
  2. Add cup_ecdsa_pubkey.{KEYID}.h to Omaha source directory /path/to/omaha/omaha/net/, set CupEcdsaRequestImpl::kCupProductionPublicKey in /path/to/omaha/omaha/net/cup_ecdsa_request.cc to new key and build Omaha client.
  3. Add private.pem keyid and path to omaha CUP_PEM_KEYS dictionary.

Links

Contributors

Thanks to Abiral Shrestha for the security reports and suggestions.

Copyright and license

This software is licensed under the Apache 2 license, quoted below.

Copyright 2020+ Omaha Consulting

Copyright 2014 - 2019 Crystalnix Limited

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.

omaha-server's People

Contributors

anmekin avatar dmitry-lyfar avatar ildarshukubaev avatar inebritov avatar kyakovenko avatar mherrmann avatar oyvindsk avatar sandsmark avatar shashkin avatar thekondr avatar w0ts0n avatar yukels avatar yurtaev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

omaha-server's Issues

Improve crash list view

It would be helpful to see the following values in the crash list (and also implement some search/filters):

  • OS
  • CPU architecture
  • Crash signature
  • Crashing module name
  • Does it contain archive? (true/false)

Omaha client not downloading mini-installer from correct omaha server

  • create two omaha servers

To reproduce, from the same PC:

  • use metainstaller pointed at first omaha server to download browser miniinstaller from first omaha server
  • uninstall browser
  • use metainstaller pointed at second omaha server to download miniinstaller from second. The metainstaller will not go to the second omaha-server, it will download from the first.

How to change update respond from "latest version" to "next version"?

I saw code in file: omaha-server\omaha_server\omaha\builder.py
line 98-100:
qs = qs.filter(Q(partialupdate__isnull=True)
| Q(partialupdate__is_enabled=False))
new_version = qs.cache().latest('version')

I can't find what "qs" is and its class :( do I find right place to change? or it's related in another place?
Thanks,

So does this work?

We currently use WinSparkle and Sparkle for our updating, but we'd like to move to silent updates. We know of the Sparkle silent update source, so we may go that route.

Is this better for the windows side? We'd prefer a more unified solution rather than having two update streams.

Thank you.

Crash Report in Server not work

I use last omaha client-server source, and also follow this guide
https://github.com/Crystalnix/omaha/wiki/Crash-reporting
but when i run omaha_unittest.exe, the program is hang in this line:

[----------] 13 tests from CrashTest
[ RUN ] CrashTest.CreateCustomInfoFile
[ OK ] CrashTest.CreateCustomInfoFile (10 ms)
[ RUN ] CrashTest.Report_OmahaCrash

and i also i get this log:

[01/27/15 18:43:33.354][omaha_unittest][2764:1308]* TEST CrashTest.CreateCustomInfoFile starting.
[01/27/15 18:43:33.364][omaha_unittest][2764:1308][crash dir C:\Program Files (x86)\OmahaCompanyName\CrashReports]
[01/27/15 18:43:33.364][omaha_unittest][2764:1308]
* TEST CrashTest.CreateCustomInfoFile ending.
[01/27/15 18:43:33.364][omaha_unittest][2764:1308]*** TEST CrashTest.Report_OmahaCrash starting.
[01/27/15 18:43:33.364][omaha_unittest][2764:1308][crash dir C:\Program Files (x86)\OmahaCompanyName\CrashReports]
[01/27/15 18:43:33.364][omaha_unittest][2764:1308][Crash::ReportGoogleUpdateCrash]
[01/27/15 18:43:33.364][omaha_unittest][2764:1308][IsOemInstalling][OemInstallTime not found]
[01/27/15 18:43:33.364][omaha_unittest][2764:1308][GetThreadUserSid failed][0x800703f0]
[01/27/15 18:43:33.364][omaha_unittest][2764:1308][Crash::CleanStaleCrashes]
[01/27/15 18:43:33.384][omaha_unittest][2764:1308][Crash::ReportGoogleUpdateCrash]
[01/27/15 18:43:33.384][omaha_unittest][2764:1308][IsOemInstalling][OemInstallTime not found]
[01/27/15 18:43:33.384][omaha_unittest][2764:1308][GetThreadUserSid failed][0x800703f0]
[01/27/15 18:43:33.384][omaha_unittest][2764:1308][Crash::SaveLastCrash][to C:\Program Files (x86)\OmahaCompanyName\CrashReports\Update2-last.dmp][from D:\omaha_official\omaha\scons-out\dbg-win\staging\minidump.dmp]
[01/27/15 18:43:33.394][omaha_unittest][2764:1308][Uploading crash report][http://1.1.1.2:9090/service/crash_report][D:\omaha_official\omaha\scons-out\dbg-win\staging\minidump.dmp]
[01/27/15 18:43:33.564][omaha_unittest][2764:1308][Crash report failed but it will retry sending]
[01/27/15 19:43:33.567][omaha_unittest][2764:1308][Uploading crash report][http://1.1.1.2:9090/service/crash_report][D:\omaha_official\omaha\scons-out\dbg-win\staging\minidump.dmp]
[01/27/15 19:43:34.034][omaha_unittest][2764:1308][Crash report failed but it will retry sending]

Wrong application version number in details

Open "Statistics" page, choose any application, then "View Requests and Events" and "Detail". The "Version" field is always the same. Probably, it's Omaha client version and not the application version. I'm not sure if it is bug.

How to test Using Omaha

Thanks for your project and your time!!!

When i test this command (in staging folder):
GoogleUpdate.exe /install "appguid={8A69D345-CCCC-BBBB-AAAA-A69D9E530F96}&appname=BChrome&needsadmin=False&lang=en"

It say:
Title: BChrome Installer
Contents: No update is available.

my omaha server url:
http://1.1.1.2:9090/admin/

Modified: omaha\base\const_addresses.h
// ============================================================
namespace omaha {

// Static string that gives the main Google website address
// TODO(omaha): Rename this as a connection-check URL. Name should be in caps
// and not include "Google".

define kGoogleHttpServer _T("www.") COMPANY_DOMAIN

// Static string used as an identity for the "Omaha" Google domain.
// TODO(omaha): Rename this as a plug-in domain.
const TCHAR* const kGoopdateServer = _T("tools.") COMPANY_DOMAIN;

// HTTP protocol prefix

define kProtoSuffix _T("://")

define kFileProtoScheme _T("file")

define kHttpProtoScheme _T("http")

define kHttpsProtoScheme _T("https")

define kHttpProto kHttpProtoScheme kProtoSuffix

define kHttpsProto kHttpsProtoScheme kProtoSuffix

define kFileProto kFileProtoScheme kProtoSuffix

// Default ports for proxies

define kDefaultHttpProxyPort 80

define kDefaultSslProxyPort 443

// Update checks and manifest requests.
const TCHAR* const kUrlUpdateCheck = _T("http://1.1.1.2:9090/service/update2");
// kHttpsProto _T("tools.") COMPANY_DOMAIN _T("/service/update2");

// Pings.
const TCHAR* const kUrlPing = _T("http://1.1.1.2:9090/service/update2");
// _T("http://tools.") COMPANY_DOMAIN _T("/service/update2");

// Crash reports.
const TCHAR* const kUrlCrashReport = _T("http://1.1.1.2:9090/service/crash_report");
// _T("http://clients2.") COMPANY_DOMAIN _T("/cr/report");

// More information url.
// Must allow query parameters to be appended to it.
const TCHAR* const kUrlMoreInfo =
_T("http://www.") COMPANY_DOMAIN _T("/support/installer/?");

// Code Red check url.
const TCHAR* const kUrlCodeRedCheck = _T("http://1.1.1.2:9090/service/check2");
// _T("http://cr-tools.clients.") COMPANY_DOMAIN _T("/service/check2");

// Usage stats url.
const TCHAR* const kUrlUsageStatsReport = _T("http://1.1.1.2:9090/tbproxy/usagestats");
// _T("http://clients5.") COMPANY_DOMAIN _T("/tbproxy/usagestats");

} // namespace omaha
// ============================================================

I add my app to web server:
App Id
BChrome 8A69D345-CCCC-BBBB-AAAA-A69D9E530F96

What's went wrong? :((

Upload ClickOnce files for Omaha setup

It would be nice to be able to upload all necessary ClickOnce files (several *.application files, clickonce_bootstrap.exe and clickonce_bootstrap.exe.manifest) to the server along with Omaha installer, so all files required for ClickOnce installation of Omaha will be located at the same place.

In addition, it would be nice to have the URL which always points to the latest version of Omaha installer, and also URLs to the latest versions of respective ClickOnce files.

How to change port 9090 to 80 or 443

Hi, I have problem in request url: domain:9090
I need to hide port in request url so I need to change 9090 to default http port
How to do that? I try change in config file but not success :(

Regenerate stack trace for existing crash report

It can be useful in cases where we receive crash report but can not extract full stack trace because of missing symbol files.

In this case we upload all missing symbol files, then go to crash detail in admin panel and trigger stack trace generating manually.

server error

I am trying to upload a mac symbol file, which is big, more than 250M. The upload took a while, and then I got a message: "Server error". Seem after the server stops taking new crash reports.

Build omaha server error

I use below commands
$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo apt-get install python-paver python-pip
$ sudo pip install -U docker-compose
$ git clone https://github.com/Crystalnix/omaha-server.git
$ cd omaha-server
$ sudo paver up_local_dev_server

but with last command: sudo paver up_local_dev_server
I get that error:

ubuntu@bchrome:~/omaha_server/version0001/omaha-server$ sudo paver up_local_dev_server
---> pavement.up_local_dev_server
docker-compose -f docker-compose.dev.yml -p dev up -d db
Couldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

Captured Task Output:

---> pavement.up_local_dev_server
docker-compose -f docker-compose.dev.yml -p dev up -d db

Build failed running pavement.up_local_dev_server: Subprocess return code: 1

Differentiate between duplicate and server error.

We think there is an upload issue with the Omaha server, but we are not entirely sure as we get a 500 HTTP error which could mean that there is a duplicate of the symbol or crash file on the server or something actually wrong with the server. We need a response that explicitly tells us when we try to upload a duplicate symbol or crash file.

Documenting the error codes here (http://crystalnix.github.io/omaha-server/#) would be nice, too.

How to add new field for new filter?

I explore the project, see that it have filter for app_id, platform, channel, version

omaha_server\omaha\builder.py
I just wanna add a boolean variable for filter: is_full, it's mean the version upload is full package (big size) or update package (small size)
I try add like this:
omaha_server\omaha\models.py
Line 91-100:

 is_enabled = models.BooleanField(default=True)
 app = models.ForeignKey(Application)
 platform = models.ForeignKey(Platform, db_index=True)
 channel = models.ForeignKey(Channel, db_index=True)
 version = VersionField(help_text='Format: 255.255.65535.65535', number_bits=(8, 8, 16, 16), db_index=True)
 release_notes = models.TextField(blank=True, null=True)
 file = models.FileField(upload_to=_version_upload_to)
 file_hash = models.CharField(verbose_name='Hash', max_length=140, null=True, blank=True)
 file_size = models.PositiveIntegerField(null=True, blank=True)
 is_full = models.BooleanField(default=False)

omaha_server\omaha\serializers.py
Line 61-66:

class Meta:
    model = Version
    fields = ('id', 'is_enabled', 'app', 'platform', 'channel',
              'version', 'release_notes', 'file', 'file_hash', 'file_size',
              'is_full', 'created', 'modified')
    read_only_fields = ('created', 'modified')

new file:
omaha_server\omaha\migrations\0017_is_full_20150609_0855.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

    dependencies = [
        ('omaha', '0016_auto_20150207_0911'),
    ]

    operations = [
        migrations.AddField(
            model_name='version',
            name='is_full',
            field=models.BooleanField(default=False),
            preserve_default=False,
        ),
    ]

But project build failed :(
Please tell me how to do it, Thanks so much!

About Partial Update feature

Thank CrystalIngyx's author for fully support my app and also answers for all silly question.
I've try apply your open-source server and it's worked well. Now I continue to discover some CystalIngyx's feature to suited my app desire.

Following "Add new version"'s manual page, I'm wondering about setup "Partial block" in add new version process. Some content in this block is so complicated such as percent, start date, end date,...
Whether this content is provisoned for scheduled purpose for some type of customer, i.e, in my knowledge, if in my development process, e.g I released version 1.0 -> 1.1 -> 1.2, etc for my customer in week 1, and if new customer start installed my app in week 2, could I combined new update to a single file, and upload this version, tinkger some info and send new update content to new customer, and formal customer have not bad effect ?

Pls, give me some detail about this block of content. Do Crystalnix support more complex update scenario than simple download and install new version ?

Duplicate Symbol files can be uploaded

Viasat automation team is testing symbol upload functionality. They found duplicate symbol files (with same debug ID) can be uploaded to server. For example, on the server there are two uploads with the same ID: 6233AAF7BA5D4AF1B4C4BD8114DBD10E6. They do not think we should allow duplicate entries. They should either overwrite the existing entry and file, or we should cancel the upload and send back a 400 HTTP response

Error running paver during omaha server creation

I am going through the installation instructions here for setting up a development server on an Amazon Server (Amazon Linux HVM, General purpose (1gb RAM, 1 CPU), 20GB HD, general purpose SSD)

https://github.com/Crystalnix/omaha-server/

After installing paver, docker and fig:
Paver: sudo easy_install Paver
Docker: sudo yum install docker
Fig: sudo curl -L https://github.com/docker/fig/releases/download/1.0.1/fig-`uname -s-uname -m` > /usr/local/bin/fig; chmod +x /usr/local/bin/fig

I ran into an error executing the command "paver up_local_dev_server"

[ec2-user@ip-172-31-41-229 ~]$ paver up_local_dev_server
Build failed: Unknown task: up_local_dev_server

how is the task "up_local_dev_server" created?

Add version number to the uploaded binary URL

Now it is possible for binaries to be overwritten. Scenario:

  1. Create one version of the application, upload binary to this version
  2. Create another version of the application. Use the same app, platform and channel. Upload the binary for new version with the same filename as the previous binary

Result: both versions have the same binary URL. The real binary accessible by this URL is the second uploaded.

Why server always responds the highest version

Hi, thanks for your time,
My Chromium release has 2 versions:
mini_installer_31_0_1650_57.exe => full installers with 26mb size
mini_installer_31_0_1650_58.exe => patch update with 17 kb size
They need to be installed one by one in order 57 then 58 (I can install offline successfully)
When I upload them to omaha server, I run tagged GoogleUpdateSetup.exe created from:
ApplyTag.exe GoogleUpdateSetup.exe BChromeSetup.exe "appguid={4994F468-38FE-4D21-B659-A77C659E4A9A}&appname=BChrome&needsadmin=False&lang=en&usagestats=1&channel=dev"
It always download the version 58 => so alway failed because 58 need 57 already installed
So what's wrong?
Thanks for help,

add userid to statistics page

Could userid be added to Home » Statistics » » Requests page?
that would enable associating a specific omaha client with an event

Incorrect parsing of symbol files with module name containing spaces

Here is the MODULE record of Chromium framework:

MODULE mac x86_64 476350E1D4033CF180A2A7E388A7B6E40 Chromium Framework

At the moment server detects its Debug ID as Chromium and Debug Filename as Framework.

According to docs, the fields of MODULE record are separated by spaces, and cannot contain spaces themselves, except for name; the name field may contain spaces, and extends to the end of the line

The required changes are the following:

  1. Refactor code duplication. Move _parse_debug_meta_info() method from SymbolsAdminForm and SymbolsSerializer classes to, say, utils module
  2. Use head.split(' ', 4) instead of head.split(' ') in new parse_debug_meta_info function
  3. Update unit tests according to step 1. Add another unit test for new parse_debug_meta_info function, use symbol file with module name containing spaces.

How to setup Https without install EWS BeanStalk

In my own application, I've search for some common approach to support auto update feature. At the moment I found that Omaha protocol is good one and CrystalIngix is famous open-source server has support that .
But I've faced up with a problem before decided to implement in my project. Suppose that, in my near future plan, I want to install some client-server certificate, i.e https connection to setup the secure tunnel between client and update server, how would I do that in CrystalIngix without mess up with third party EWS Beanstalk, as described in manual page ? (Because in experiment process, I want to test it in some free webserver, it's really difficult to install some cloud webservie belong to Amazon)

Thanks for your patience

Slow Omaha upload

It was noticed that uploading Chromium mini_installer, which is about 3.5M, to Omaha server takes long time. Some times it takes 3~5 minutes. Not sure it is a network issue, or server issue, or something else. On the other hand, user downloading of mini_installer is very quick, normally within 15 secs.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.