# ccam ಅನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡುವುದು

> ccam update SHA-256 ಪರಿಶೀಲನೆಯ ನಂತರ ccam ಅನ್ನು GitHub ನ ಇತ್ತೀಚಿನ ಬಿಡುಗಡೆಯಿಂದ ಬದಲಾಯಿಸುತ್ತದೆ; --check ಕೇವಲ ತಿಳಿಸುತ್ತದೆ, --version ನಿರ್ದಿಷ್ಟ ಬಿಡುಗಡೆಯ ಟ್ಯಾಗ್ ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುತ್ತದೆ.

Source: https://ccam.dev/kn/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` | ಹೊಸ ಬಿಡುಗಡೆ ಇದೆಯೇ ಎಂದು ಮಾತ್ರ ತಿಳಿಸುತ್ತದೆ | off |
| `--version <tag>` | `v0.3.0` ನಂತಹ ಈ ಬಿಡುಗಡೆಯ ಟ್ಯಾಗ್ ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುತ್ತದೆ, ಈಗಿನದಕ್ಕಿಂತ ಹೊಸದಾಗಿರಲಿ ಅಥವಾ ಹಳೆಯದಾಗಿರಲಿ | latest |
| `--dry-run` | ಗೌರವಿಸಲಾಗುತ್ತದೆ: ಇತ್ತೀಚಿನ ಟ್ಯಾಗ್ ಅನ್ನು ಹುಡುಕುತ್ತದೆ (`--version` ಒಂದನ್ನು ಹೆಸರಿಸದಿದ್ದರೆ), ಬೈನರಿಯ ಮೇಲೆ ಅದೇ ಪರಿಶೀಲನೆಗಳನ್ನು ನಡೆಸುತ್ತದೆ, ಮತ್ತು ಡೌನ್‌ಲೋಡ್ ಮಾಡದೆ ಡೌನ್‌ಲೋಡ್, ಚೆಕ್‌ಸಮ್ ಮತ್ತು ಬದಲಾಯಿಸುವ ಪಾತ್‌ಗಳನ್ನು ಮುದ್ರಿಸುತ್ತದೆ | off |

`--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` ಮಾತ್ರ ಇಂಪೋರ್ಟ್ ಮಾಡುತ್ತದೆ. Claude Code ಆರಂಭಿಸುವ ಮಾರ್ಗ ಅದನ್ನು ಎಂದಿಗೂ ಕರೆಯುವುದಿಲ್ಲ.

1. `cli.updateCmd` ಚಾಲನೆಯಲ್ಲಿರುವ ಬೈನರಿಯನ್ನು `os.Executable` ಮೂಲಕ ಕಂಡುಹಿಡಿಯುತ್ತದೆ ಮತ್ತು symlink ಗಳನ್ನು `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 ಬೈನರಿಗೆ symlink ಗಳು, ಹೀಗಾಗಿ ಯಾವುದೇ ಬದಲಾವಣೆ ಇಲ್ಲದೆ ಅವು ಹೊಸ ಆವೃತ್ತಿಯನ್ನು ಚಲಾಯಿಸುತ್ತವೆ.

### ಪ್ಯಾಕೇಜ್ ಮ್ಯಾನೇಜರ್ ಮೂಲಕ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿದಾಗ

`.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/kn/docs/install.md)
- [ಕಮಾಂಡ್‌ಗಳು](https://ccam.dev/kn/docs/commands.md)
- [ಪದೇ ಪದೇ ಕೇಳುವ ಪ್ರಶ್ನೆಗಳು](https://ccam.dev/kn/docs/faq.md)
