# ccam ను అప్‌డేట్ చేయడం

> ccam update SHA-256 తనిఖీ తర్వాత ccam ను తాజా GitHub రిలీజ్‌తో భర్తీ చేస్తుంది; --check కేవలం నివేదిస్తుంది, --version ఇచ్చిన రిలీజ్ ట్యాగ్‌ను ఇన్‌స్టాల్ చేస్తుంది.

Source: https://ccam.dev/te/features/update/ · Updated 2026-10-19

`ccam update` GitHub నుంచి ఒక ccam రిలీజ్‌ను డౌన్‌లోడ్ చేసి, రిలీజ్ యొక్క `checksums.txt` తో దాన్ని తనిఖీ చేసి, రన్ అవుతున్న బైనరీని ఒకే rename తో భర్తీ చేస్తుంది. మీరు ccam ను ఇన్‌స్టాల్ స్క్రిప్ట్‌తో లేదా ఆర్కైవ్ నుంచి ఇన్‌స్టాల్ చేసినప్పుడు దీన్ని ఉపయోగించండి. ccam ఎప్పుడూ తనంతట తానే అప్‌డేట్‌ల కోసం తనిఖీ చేయదు: ఈ కమాండ్ మాత్రమే GitHub ను సంప్రదిస్తుంది, కాబట్టి మిగతా ప్రతి కమాండ్ ఆఫ్‌లైన్‌లో కూడా అలాగే పనిచేస్తుంది.

## వినియోగం

```sh
ccam update                    # install the latest release
ccam update --check            # only say whether a newer release exists
ccam update --version v0.3.0   # install that release, also an older one
ccam --dry-run update          # show what would be downloaded and replaced
```

```console
$ ccam update --check
ccam 0.5.0 is available (you have 0.4.0). Run `ccam update`.
$ ccam --dry-run update
Would update ccam 0.4.0 → 0.5.0:
  download  https://github.com/jhyunwoo/ccam/releases/download/v0.5.0/ccam_linux_amd64.tar.gz
  verify    with https://github.com/jhyunwoo/ccam/releases/download/v0.5.0/checksums.txt
  replace   /home/you/.local/bin/ccam
$ ccam update
→ downloading https://github.com/jhyunwoo/ccam/releases/download/v0.5.0/ccam_linux_amd64.tar.gz
✓ Updated ccam 0.4.0 → 0.5.0 (/home/you/.local/bin/ccam)
```

కొత్త రిలీజ్ లేనప్పుడు, ccam `ccam 0.4.0 is up to date.` అని ప్రింట్ చేసి ఏదీ మార్చదు. `--version` తో మీరు ఇప్పటికే రన్ చేస్తున్న వెర్షన్‌ను ఇస్తే, అది `ccam 0.4.0 is already installed.` అని ప్రింట్ చేస్తుంది.

## ఆప్షన్లు

| ఆప్షన్ | ఏమి చేస్తుంది | డిఫాల్ట్ |
| --- | --- | --- |
| `--check` | కొత్త రిలీజ్ ఉందో లేదో మాత్రమే నివేదిస్తుంది | ఆఫ్ |
| `--version <tag>` | ప్రస్తుతదాని కంటే కొత్తదైనా పాతదైనా, `v0.3.0` వంటి ఈ రిలీజ్ ట్యాగ్‌ను ఇన్‌స్టాల్ చేస్తుంది | తాజాది |
| `--dry-run` | పాటిస్తుంది: తాజా ట్యాగ్‌ను కనుగొంటుంది (`--version` ఒకటి ఇస్తే తప్ప), బైనరీపై అవే తనిఖీలను రన్ చేస్తుంది, డౌన్‌లోడ్ చేయకుండా డౌన్‌లోడ్, చెక్‌సమ్, భర్తీ పాత్‌లను ప్రింట్ చేస్తుంది | ఆఫ్ |

`--check`, `--version` ను కలిపి ఉపయోగించలేము. ట్యాగ్ `vMAJOR.MINOR.PATCH` లాగా ఉండాలి, ఐచ్ఛికంగా ప్రీ-రిలీజ్ లేదా బిల్డ్ ప్రత్యయంతో; ముందున్న `v` ను వదిలేయవచ్చు. మరేదైనా విఫలమవుతుంది, ఉదాహరణకు `--version takes a release tag such as v0.3.0, not "1.2"`.

మిర్రర్ కోసం లేదా టెస్ట్‌ల కోసం, ఎన్విరాన్‌మెంట్ వేరియబుల్ `CCAM_RELEASES_URL` `https://github.com/jhyunwoo/ccam/releases` ను భర్తీ చేస్తుంది. దాని నిర్మాణం కూడా అలాగే ఉండాలి: `<url>/latest` `<url>/tag/<tag>` కు రీడైరెక్ట్ అవుతుంది, అసెట్‌లు `<url>/download/<tag>/<asset>` వద్ద ఉంటాయి.

## ఇది ఎలా పనిచేస్తుంది

కోడ్ `internal/update` లో ఉంటుంది, దాన్ని `ccam update` మాత్రమే ఇంపోర్ట్ చేస్తుంది. ప్రారంభ మార్గం దాన్ని ఎప్పుడూ పిలవదు.

1. `cli.updateCmd` `os.Executable` తో రన్ అవుతున్న బైనరీని కనుగొని, `filepath.EvalSymlinks` తో సింలింక్‌లను పరిష్కరిస్తుంది. భర్తీ అయ్యేది ఆ అసలు పాత్.
2. `--version` లేకుండా, `Updater.Latest` రీడైరెక్ట్‌ను అనుసరించకుండా `<releases>/latest` ను అభ్యర్థించి, `Location` హెడర్ (`…/tag/v0.5.0`) నుంచి ట్యాగ్‌ను చదువుతుంది. ఇది GitHub API బదులు రిలీజ్‌ల పేజీని ఉపయోగిస్తుంది, కాబట్టి API యొక్క గంటకు 60 అభ్యర్థనల పరిమితి వర్తించదు. లుకప్‌కు 10 సెకన్లు ఉంటాయి.
3. `parseVersion` ట్యాగ్‌ను ఒక కఠినమైన ప్యాటర్న్‌తో తనిఖీ చేస్తుంది. ట్యాగ్ డౌన్‌లోడ్ URL లలో, ప్రింట్ చేసే షెల్ కమాండ్‌లో చేరుతుంది, కాబట్టి `/`, `%`, ఖాళీలు లేదా షెల్ అక్షరాలు ఉన్నది ఏదీ దాటదు. `compareVersions` దాన్ని రన్ అవుతున్న వెర్షన్‌తో పోలుస్తుంది; ప్రీ-రిలీజ్ తన రిలీజ్ కంటే ముందు వస్తుంది.
4. ccam అసలు బైనరీని భర్తీ చేయవచ్చో లేదో `managed()`, `writable()` నిర్ణయిస్తాయి (కింద చూడండి).
5. `Updater.Fetch` `ccam_<os>_<arch>.tar.gz` ను, `checksums.txt` ను ఒకేసారి, రెండింటికీ కలిపి 2 నిమిషాలతో డౌన్‌లోడ్ చేస్తుంది. ప్రతి డౌన్‌లోడ్ గరిష్ఠంగా 256 MB.
6. మరేదైనా జరగడానికి ముందు, ఆర్కైవ్ SHA-256 `checksums.txt` లోని దాని లైన్‌తో సరిపోలాలి. లైన్ లేకపోయినా, చెక్‌సమ్ వేరుగా ఉన్నా అప్‌డేట్ `nothing was changed` తో ఆగుతుంది.
7. `extract()` tar ను చదివి, `ccam` అనే పేరుగల మొదటి సాధారణ ఫైల్‌ను తీసుకుంటుంది. ఫోల్డర్‌లు, లింక్‌లు, ఇతర ఎంట్రీలు పట్టించుకోబడవు, బైనరీ కూడా గరిష్ఠంగా 256 MB.
8. `Updater.Install` కొత్త బైనరీని `fsutil.AtomicWrite` తో రాస్తుంది: బైనరీ పక్కన పాత ఫైల్ అనుమతి బిట్‌లతో ఒక తాత్కాలిక ఫైల్ `.ccam.tmp*`, డిస్క్‌కు ఫ్లష్ చేయబడి, పాతదానిపై rename చేయబడుతుంది.

ట్యాగ్ లుకప్ నుంచి rename వరకు, మొత్తం పైప్‌లైన్:

ఆర్కైవ్, `checksums.txt` పక్కపక్కనే డౌన్‌లోడ్ అవుతాయి, చెక్‌సమ్ సరిపోలే వరకు ఏదీ రాయబడదు. rename అటామిక్, కాబట్టి క్రాష్ అయినా డిస్క్ నిండినా పాత బైనరీ గానీ కొత్తది గానీ మిగులుతుంది, సగం బైనరీ ఎప్పుడూ మిగలదు. `~/.local/bin/ccwork` వంటి షార్ట్‌కట్ కమాండ్‌లు ccam బైనరీకి సింలింక్‌లు, కాబట్టి అవి ఏ మార్పు లేకుండానే కొత్త వెర్షన్‌ను రన్ చేస్తాయి.

### ప్యాకేజీ మేనేజర్ ఇన్‌స్టాల్‌లు

`.deb` నుంచి ఇన్‌స్టాల్ చేసిన ccam apt కు చెందుతుంది, apt కు తెలియకుండా దాన్ని భర్తీ చేస్తే ప్యాకేజీ డేటాబేస్ తప్పుగా మిగులుతుంది. డౌన్‌లోడ్ చేసే ముందు, బైనరీ ఎవరిదో ccam తనిఖీ చేస్తుంది:

1. `/usr/bin`, `/bin`, `/usr/sbin` లేదా `/sbin` లోని బైనరీ ప్యాకేజీ మేనేజర్ నిర్వహించేదిగా లెక్కించబడుతుంది.
2. ఇతర చోట్ల, `dpkg` ఇన్‌స్టాల్ అయి ఉండి `dpkg -S <path>` విజయవంతమైతే, అది కూడా ప్యాకేజీ మేనేజర్ నిర్వహించేదిగా లెక్కించబడుతుంది.
3. లేకపోతే, అక్కడ రాయగలదో లేదో నిర్ధారించుకోవడానికి ccam బైనరీ పక్కన ఒక తాత్కాలిక `.ccam-update-*` ఫైల్‌ను సృష్టించి తీసివేస్తుంది.

ప్యాకేజీ మేనేజర్ నిర్వహించే బైనరీకి ccam ఆగి apt దశలను ప్రింట్ చేస్తుంది:

```console
$ ccam update
ccam: /usr/bin/ccam was installed by a package, so `ccam update` leaves it alone.
To update the .deb, download ccam_0.5.0_linux_amd64.deb from https://github.com/jhyunwoo/ccam/releases/tag/v0.5.0 and run:
  sudo apt install ./ccam_0.5.0_linux_amd64.deb
Or install a copy in ~/.local/bin with the install script:
  curl -fsSL https://raw.githubusercontent.com/jhyunwoo/ccam/main/install.sh | sh
```

Linux కాని సిస్టమ్‌లలో, ఇన్‌స్టాల్ స్క్రిప్ట్ లైన్ మాత్రమే ప్రింట్ అవుతుంది. ఫోల్డర్‌లో రాయలేనప్పుడు, ccam ఇన్‌స్టాల్ స్క్రిప్ట్‌ను మళ్లీ రన్ చేయమని సూచిస్తుంది, అది ccam ను `~/.local/bin` లో ఇన్‌స్టాల్ చేస్తుంది.

## భద్రత, ప్రత్యేక సందర్భాలు

- డెవలప్‌మెంట్ బిల్డ్ తన వెర్షన్‌ను `dev` గా నివేదిస్తుంది, పోల్చడానికి దానికి రిలీజ్ లేదు, కాబట్టి `ccam update`, `ccam update --check` దాన్ని తిరస్కరిస్తాయి. `ccam update --version vX.Y.Z` దానిపై ఒక రిలీజ్‌ను ఇన్‌స్టాల్ చేస్తుంది.
- విఫలమైన డౌన్‌లోడ్, మీ ప్లాట్‌ఫామ్‌కు లేని అసెట్, లేదా చెక్‌సమ్ సరిపోలకపోవడం ఇన్‌స్టాల్ అయిన బైనరీని ఉన్నట్లే వదిలేస్తాయి.
- లేని రిలీజ్ `there is no release <tag>` తో విఫలమవుతుంది. GitHub HTTP 403 లేదా 429 తో తిరస్కరిస్తే, అది బహుశా రేట్ లిమిట్ అని ccam చెప్పి, తర్వాత మళ్లీ ప్రయత్నించమని అడుగుతుంది.
- `--check` చదువుతుంది మాత్రమే. బైనరీ ప్యాకేజీ మేనేజర్ నిర్వహించేదా లేదా రాయగలిగేదా అని అది తనిఖీ చేయదు.
- పాత ట్యాగ్‌తో `--version` ఇవ్వడమే వెనక్కి వెళ్లే మార్గం.

## సంబంధిత పేజీలు

- [ఇన్‌స్టాల్](https://ccam.dev/te/docs/install.md)
- [కమాండ్‌లు](https://ccam.dev/te/docs/commands.md)
- [తరచుగా అడిగే ప్రశ్నలు](https://ccam.dev/te/docs/faq.md)
